Currents

Currents

2024

2024

Timeline

4 Months, May-August 2024

Tools

Xcode, Swift, SwiftUI, C, Objective-C, Typescript

Overview

An all‑in‑one social platform for scuba diving enthusiasts, featuring a dive logbook, global dive‑site maps, and community tools to share and discover underwater adventures.
Check it out at https://www.trycurrents.app.

How I Made It

Currents is an app I built during the summer when I didn’t get accepted into any research or industry internships. Since I was bored, I was like, screw it. Let’s build something cool. I realized that most dive logging apps lacked good UX because they weren’t fun or intuitive to use.

Some Challenges I Had

  1. Distribution is very hard, especially when your target demographic is not Gen Z.

    One of the main challenges in marketing Currents is the competition: Subsurface. Many older divers are understandably hesitant to try new apps, and I don't blame them. There have been plenty of attempts before mine, but most of them weren't serious or well-supported. So I tried a few things: cold DMs on Facebook, Instagram UGC, and basic ASO methods. The results have been great so far, but I came to the conclusion that organic reach doesn't convert that much. For social apps to work, you need things like viral trends, referrals, and word-of-mouth. For Currents to work, it could have been all three, but I've realized I don't have much time for it. The market size for dive log apps is super small, so I don't think it's worth putting too much effort into the app. Regardless, Currents has been my go-to app. It's what I need when it comes to diving.

    Even apps from big manufacturers and agencies like Garmin, Suunto, PADI, and SSI tend to lock user data into their platforms, which adds to the problem. This project has taught me a lot about doing things properly, from design and development to marketing and user experience. Along the way, I partnered with a bunch of great organizations (and hopefully more in the future!) to help make dive logging fun and easy: Suunto, Garmin, DAN, and Dive Assure, to name a few.


  2. CoreBluetooth is so painful to develop with.

    Another thing I had to do for this app to work was create a new library called libdc-swift. Libdc-swift is basically an open-source Swift framework; the goal of it was to make libdivecomputer easy to use in Swift. So a lot of my work involved reading the Subsurface and libdivecomputer codebases, bridging C and Swift with Objective-C, and figuring out how to deal with BLE packets. I've had some roadblocks due to how limited CoreBluetooth documentation is, so back then in 2024, you couldn't really do much with LLMs. This type of work is something that LLMs are still not good at because documentation regarding CoreBluetooth is so limited. Not to mention there are many dive computer brands supported by libdivecomputer, so there could be edge cases on certain dive computers. For example, how dive computers present their names could be MATCH_EXACT, MATCH_PREFIX, or whatever that is.

    Here is a video of how I import my dive logs from Shearwater Peregrine TX:

    I'd say doing this was the second hardest part after distributing the app itself, although things started to get easier once I understood how dive computer protocols work. Since libdivecomputer has done most of the work (even though they don't really maintain documentation of how their codebase works), I feel like the people who have been maintaining it are from the '90s, like the Linus Torvalds era. I'm hoping that through libdc-swift, more people from my generation (Gen Z) will be able to pick it up.

I'll keep maintaining this app for as long as I can, given that I plan to upgrade my diving skills to technical diving :)