Building a Running App
My motivations, a road map, and progress updates
The important things are in the road map; read the first and last sections for entertainmentLast Edited: Jan 25, 2025
Motivations - a rant about my running journey
I started running sometime during covid, when I realized I needed to exercise more but was tired of treadmills and
home workouts. (Unfortunately, I still hate everything gym/fitness related; I’ll do a dare if you can make me
enjoy doing gym workouts) My running was mediocre or worse; I could barely run a mile even when half of that was
downhill. I learned everything from scratch, but I managed to improve significantly over a year when I hit the
5km mark. Unfortunately, I hit a wall after that. I dreaded those Saturday mornings when I knew I had to run 5km
in the afternoon. I made it a weekly routine because I knew that I would not be able to run another 5km if I skipped
too many weeks. My 5km pace improved from 33 minutes to 27 minutes, but it was nowhere near ‘good running distance’.
Two things happened. First, I started searching for fresh running routes that could ignite my motivation. I actively looked for
longer routes with
fewer slopes and better scenery. Two, a friend advised me to maintain my heart rate in the 160s; start slow, and fasten my pace
after a few kilometers. I’d seen this on YouTube before, but I was not able to fathom its true meaning until then. So now, I’ve
been doing 5-9km runs every two days, sacrificing my pace for a longer distance (for now).
My running journey as a not-very-athletic but enthusiastic person was rocky at best, but it worked out. I’ve learned to genuinely
enjoy running,
and it’s substantially improved my life (and my sleep!). I realized that everyone can start running - and continue running - with the right
guidance and motivation, which is why I decided to start this project.
Building a solid, all-in-one running app has been running in the back of my mind for years. I have used a few running apps
before, but they don’t have the things I really need. Take Nike Run Club for instance. (Does Nike Run Club have that much
of an incentive to build a good running app? They don’t profit from this in the first place - there are no in-app purchases,
so I suspect it’s mostly for the brand image.) They only track essential information like heart rate and cadence, and the guided
runs are not very flexible. No route planning, just GPS tracking. Frankly speaking, my testimony for the other apps isn’t as credible,
since not many of them are available/widely used in Korea. I can’t say much for Strava, inarguably the most popular sports app, since
I haven’t used the pro features, but I can say that the route recommendations based on the heat map are not particularly high-quality,
in Seoul or regions with relatively few runners; it suggested a hiking path.
So my end goal is a running app that analyzes every bit of the user’s running data, gives ‘good’ route recommendations, and supports
route navigation/guided runs with real-time adjustments. I’ll give a more detailed explanation in the next section.
A short ‘Why am I writing this?’
I honestly need to put all my thoughts in one place. More importantly, to receive advice/feedback from others, I need a concrete ‘thing’ to send to people that’s not just the source code or my github repository. I hope people will have the patience to read the whole thing.
Road map (road map? roadmap?)
The very bare minimum — even more basic than the MVP — would be route recommendations,
based on user input (starting point, destination, distance). Choose a few waypoints
around the area, generate routes based on that, and feed weather data, map data, and the candidate routes into a fine-tuned gpt model.
Something that counts as an MVP would certainly go a bit further than this. Record runs,
gather health stats from Apple watch (I’m working on Android development right now so we
shall see how this works out), and adequately store user data. I need to build a backend server,
design some kind of interface for recording runs, track distance/location, implement account setup,
and give voice announcements every kilometer. Essentially everything that running apps already offer. These should be
a lot easier to code (although it is a long list, so I’m starting to get scared), hopefully, a lot of this is open source
/ cursor and gpt 4o mini will do a better job.
The next steps would go much further than this, and they are rough sketches of ideas, rather than something I can explain on a
technical level (e.g. I haven’t implemented a graph neural network before; I need to do more research into this). First, fine-tune
a voice assistant to do route navigation + guided runs at the same time, giving real-time route adjustments and pace suggestions. And
gather all the running data from a user to give comprehensive analytics, distance/pace recommendations, and a personalized training plan.
Other things, like implementing all the core algorithms without API assistance would be cool if I had the time. Among other things, I can
use a graph neural network to do route calculations from scratch and train some kind of AI model for data analytics (surely more complicated
than a basic neural network). If I want my mom and friends who don’t run to use this app, I can expand this to walking (walking is the
easier version of running).
Progress updates - hopefully my explanation doesn’t make this all look too easy, otherwise it just makes me a bad programmer
Jan 25: I already have most of ‘the bare minimum’ done except for the fine-tuned gpt model because I don’t have the
api key yet. This took me ~2 weeks, which is a solid start in my opinion. I’ll give a brief illustration of my journey.
First and foremost, Android Studio is not fun. Android development isn't as easy as it looks. The Kotlin syntax never ceases
to confuse me. The UI design is a lot more complicated than CSS. I need a way to multithread my app since it crashes every
once in a while. Some functions are different depending on the Android SDK version, which means that ChatGPT may not be perfect.
Plus, it takes too much time to run the whole thing on a virtual machine. (I would genuinely appreciate tips on how to make Android
Studio run faster! Other than getting an SSD, that is) ChatGPT and Cursor have been of immense help though. I would have given up on
debugging midway without these.
Now, onto the Google Maps API. The Routes API does not work in Seoul?? Even in Google Maps, if you search for walking routes
from one place to another, Google Maps will refuse to answer. The map, geocoding, latitude/longitude, and waypoints (places API)
are immensely helpful. So I had to switch to Graphhopper API for routing, which seems better.
So my overall process right now for routing:
- User input: I successfully implemented the Google Maps Place Autocomplete API but it made the app crash so that's on a hiatus. For now, it's just the starting point, destination, and desired distance.
- Geocoding: Latitude/longitude translation
- Waypoints: Select good nearby waypoints (think of them as points of interest), I have several custom keywords for this.
- Select a few waypoints at random
- Come up with a few candidate routes based on the waypoints
- Feed the routes, weather data, map data, and a system prompt into the OpenAI API
- Select a route
I would genuinely appreciate any advice or feedback! Please reach out through email/discord/anything else on the Contact page.