Inspiration
I ride a scooter around Indore almost every day. Same roads, same signals, same traffic. One day it hit me that nobody had ever told me whether I was actually riding well. My phone could get me anywhere, but it had no idea how I got there. Running apps score your run. Watches score your sleep. Nothing scored a ride.
Then I looked at the numbers, and it stopped feeling like a small idea. India has more road deaths than any other country, with over 170,000 people killed in a single year, and the biggest group is people like me: two-wheeler riders, who make up roughly 45% of those deaths. Most of us learned to ride from family or friends, passed a short licence test once, and have never had a single piece of feedback on our riding since. The habits that put us at risk, like braking too late and too hard or launching off every signal, are small and invisible, and nobody is watching.
So I wanted to build the thing I wished I had: an app that watches how you ride, gives you a score when you stop, and tells you the one thing to do better next time. That became Coast, and it's the first app I've ever built.
What it does
Coast is a ride coach and navigator for scooters and cars.
- Search for where you're going and Coast gives you turn-by-turn directions, with your speed on screen and your arrival time counting down. Miss a turn and it quietly finds a new way.
- Tap Start Ride and Coast watches for hard braking and harsh launches using your phone's motion sensors and GPS. A scooter and a car are judged by their own limits.
- When you stop, you get a score out of 100 and a map showing every hard brake.
- Then comes the coaching: the one thing that cost you the most points, your speed across the whole ride, and what a smoother ride could have saved.
- After five scored rides, Trends shows whether you're getting better, your average, your best, and what's changing. History keeps every ride, and you can replay any of them on the map.
- The map is yours too: light or dark, 3D, live traffic, satellite, and your favourite places one tap away.
Recording a ride and getting your score is free, because the part that can make someone a safer rider shouldn't sit behind a paywall. Coast Pro, annual or lifetime, unlocks the coaching, directions, Trends, full history, replays and the extra map layers. There's no account to make, and your rides stay on your phone.
How we built it
Coast is written in Flutter, so one codebase runs on both Android and iOS. Some things Flutter couldn't do on its own, like controlling the Apple Maps camera smoothly or using iOS 26's Liquid Glass, so those parts are native Swift and Kotlin. I don't own a Mac, so every iOS build ran in the cloud on Codemagic.
RevenueCat runs all of Coast Pro. There's one entitlement backed by an annual subscription and a lifetime purchase on both Google Play and the App Store, and nobody has to sign in to buy or restore.
OneSignal
OneSignal is how Coast turns single rides into a habit. We wanted every message to arrive at a moment that actually means something to the rider, so we built everything around what's happening in their riding.
- Opt-in from the start. OneSignal only switches on once the rider chooses to, so every tag, message and Journey is working for someone who actually asked to hear from Coast.
- Tags as the rider's story. After every ride, Coast updates the rider's tags: how many rides they've done, their last score, which vehicle they ride, and whether Trends just unlocked. Those tags are what everything else is built on.
- Segments and Journeys. Segments are built from those tags, and two Journeys run on them. "Trends ready" sends a push the moment a rider's fifth scored ride unlocks Trends, and the push carries data that opens the app straight onto the Trends tab. "Come Back" sends one push after a week without opening Coast, and riders who come back on their own before then never get it.
- In-app messages for the moments in between. Four messages cover the rider's journey: explaining what their first score means, celebrating Trends unlocking, and telling them when their trend is going up or starting to slip. Each one fires from an in-app trigger that Coast sets after a ride, and their buttons carry actions the app listens for, so a tap takes you straight to the right screen.
- Quiet while riding. The moment a ride starts, Coast pauses in-app messages and stops notifications from showing, because anything popping up on your screen at high speed is dangerous.
How Coast was vibecoded
Coast was built with Claude Code running on my laptop. My part was deciding what Coast should be, riding it, and saying what felt wrong.
Most days looked like this. I'd go for a ride or use the app and send over whatever felt off. Sometimes a ride that felt smooth scored badly, or a hard stop didn't get caught, so we kept adjusting the ride thresholds until the score matched what the ride actually felt like. Sometimes the map didn't recentre properly on me every time. The agent would dig through the code, find the real cause, fix it, build the app and install it straight onto my phone over USB, then screenshot it to check before I even looked. I'd try it again and tell it what was still wrong. Some days we went round that loop dozens of times.
A few things made it work:
- We used real rides, not guesses. Coast can export the raw sensor data from a ride, so we built a tool that runs the real scoring code over those recordings. We tuned the detection on several real rides, including car drives I went on with my dad, until it was right.
- The AI is fast, but it isn't always right. More than once it confidently blamed the wrong thing. Every real fix came from testing, a log line, or reading the library's own source code.
- It helped outside the code too. It helped fill in the store listings and set up the OneSignal Journeys and messages in the browser, and I checked everything before it went out. Even the demo video is made in code, from real recordings of my phone.
Challenges we ran into
- Liquid Glass on Android. I originally built Coast for iOS only, and Apple's Liquid Glass became a big part of how it looked. When we decided to bring Coast to Android as well, we hit a wall: Android has nothing like it. I didn't want Coast to feel like a different app depending on your phone, so we built our own glass on Android, with its own blur and colour and a custom shader for the thin highlight on the edges, and kept adjusting it until it looked as close to the iPhone as we could get.
- Gravity. The obvious way to take gravity out of the accelerometer reading is quietly wrong. It made a firm brake look six times gentler than it was. It took a proper vector fix to get right.
- Scooters shake a lot. With no suspension between you and the road, a scooter vibrates about three times more than a car, and every simple threshold failed. The fix was to only count a brake when the GPS agrees you actually slowed down. On the car drives with my dad, which had just one firm stop, the old version reported 7 hard brakes and 3 harsh launches. The new one finds exactly that one stop.
- Maps fought us. Recentring on a tilted map landed you off-centre, and Apple Maps kept sliding after a flick no matter what we told it. Both took a lot of testing to fix.
- The stores. Apple rejected us three times and Google once before Coast went live. Every rejection taught us another rule we didn't know existed.
Accomplishments that we're proud of
- Coast is live on both the App Store and Google Play, with real purchases running through RevenueCat.
- The ride detection was tested on real rides, not just simulated ones, and has more than 200 automated tests behind it.
- Our OneSignal setup follows the rider through their story. Tags, segments, Journeys and in-app messages all work together, so a message shows up when something has actually happened in your riding, not on a random schedule.
- Navigation, coaching, trends, replays and a Liquid Glass design that feels the same on both platforms, all built by a student with an AI agent.
What we learned
- Get the physics right before touching the numbers. Most of our "tuning" problems turned out to be maths problems.
- Timing is everything with notifications. The right message at the right moment beats ten messages on a schedule.
- With vibecoding, the hard part isn't writing code anymore. It's noticing what's wrong and explaining it clearly. A screenshot beats a paragraph every time.
- Shipping is its own skill. Building the app was one thing, but getting it through store review, privacy forms and permission rules on two platforms taught us just as much.
What's next for Coast
- Offline maps, so you can navigate and get your score even when there's no signal.
- Shareable ride scores, so you can show your friends your best ride and see who rides smoothest.
- Coaching that learns your regular routes, so Coast can show you exactly where on your daily commute you brake hardest, and whether that spot is getting better over time.
Built With
- claudecode
- flutter
- vibecoded
Log in or sign up for Devpost to join the conversation.