Ghostbike is an activity app, which allows you to race against a previous bike ride. It’s a fun little app for bike commuters like myself!
Simulator snapshot:
I built Ghostbike for a couple of reasons…
-
I commute to UNA HQ almost every morning and I wanted to have an app that showed me in real time if I was ahead or behind my PB.
-
I wanted to try out the development experience and app publishing experience for myself.
I should point out that I’m not an experienced C++ developer. My background is in electronics engineering and I’m the CEO here at UNA - which essentially means I’m in charge of admin!! For this exercise, I deliberately refrained from poking Ross and Denys, our firmware developers, on Slack to see how far I could get with the docs (and Claude..)
Anyway, back to development:
The app is a fork of Cycling and maintains all of its features: laps, autopause and .fit file creation all still work. However, in addition, you now have the option of racing against a ghost - a track saved from a previous ride.
The app uses a simple time/distance comparison during the ride, and then has a finish detection feature based on coming within 10m of the end of the track.
I used Claude extensively (almost entirely) to develop Ghostbike. My preferred setup is to use the Claude extension within VS Code.
My process was:
- Provide some UI snapshots and describe the main screens.
- Ask Claude to create a Requirements.md based on my input.
- Review Requirements.md and iterate.
- Ask Claude to generate the UI in the TouchGFX simulator before writing any app logic. Claude can actually drive the simulator as well, but I found I was competing with it for focus, so this needs some refinement. Multiple iterations here.
- Finally, ask Claude to build the logic and complete the .uapp build.
The fact I was able to essentially vibe code this almost entirely is a testament to the SDK documentation and the various md files in the SDK repo. Nice job @Ross_UNA!
On to testing…
Despite being a fairly basic app, there were still a few bugs to iron out. A few laps later, and the app was behaving well.
So, there we are. The app is in the app store - let me know what you think!
My hope is that UNA apps will span a spectrum of tone and purpose, from serious, performance-oriented training tools to more playful experiences like Ghostbike!



