Inspiration
Most of my friends run or walk a few times a week. None of us are training for anything. Strava never really fit us: the feed is mostly strangers posting their splits, and a walk feels out of place there. What I wanted was to see my own friends. Who's out right now, who ran further this week, who took the block I ran on Sunday.
So I built Treadline around your friends instead of your stats.
What it does
- Tracks runs and walks. Distance, pace, moving time, elevation gain, splits and the route. Start it yourself, or leave the phone in your pocket and it starts on its own once you've been running or walking for a bit, pauses at stops and ends when you're done.
- Territory. Close a loop and the ground inside it is yours. Your friends see it on the map and can run it to take it back.
- Badges you level up. Badges climb through tiers as you run more, further or faster, and every tier shows how many members hold it. 30 of them are landmark badges you only get by looping a real place, like Big Ben or Cloud Gate.
- Friends on the map. See who's out right now, follow a friend's run live, and compare on the Board: distance, climb, activities, time and pace.
- Clubs with group runs on a calendar, a recap after every activity, a 3D flyover replay of your route, and share cards for posts and stories.
- Apple Health, Home and Lock Screen widgets, and a Live Activity in the Dynamic Island.
It's on the App Store in 48 locales.
How I built it
Native iOS, Swift and SwiftUI. Supabase handles accounts, friends, clubs, territory and leaderboards (Postgres plus a few Edge Functions). Mapbox draws the map. HealthKit, WidgetKit and ActivityKit cover Health, widgets and the Live Activity.
RevenueCat runs all of the monetization. The paywalls are RevenueCat Paywalls shown with RevenueCatUI, so I can change copy and layout without shipping a build. There are three offerings: the default one used around the app, one for the onboarding paywall, and a welcome offer that shows if you close the onboarding paywall. One Pro entitlement gates every Pro feature.
Challenges I ran into
- GPS in the real world. Distance, auto-pause and auto-start all behaved in the simulator and then got things wrong on my first real runs. Fixing that took going out and running, a lot.
- Swapping the map a week before launch. I moved the whole app from MapKit to Mapbox so territory and the live map could look the way I wanted.
- Paywalls in 48 languages. A RevenueCat paywall won't render in a locale that's missing even one string, so every copy change has to land in every language at once.
Accomplishments that I'm proud of
Getting 1.0 through App Review and live in 48 locales, then shipping 1.1 a few days later with widgets and a Live Activity.
What I learned
The free tier has to carry a social app. If competing with your friends costs money, your friends never show up. So everything social is free, and Pro sells depth: older history, career stats, a heatmap, heart rate zones and comparing yourself with a friend.
What's next for Treadline
Getting the first real crews on it. Reddit first, then a short video for each landmark badge.
Built With
- activitykit
- appsflyer
- core-location
- deno
- healthkit
- mapbox
- postgresql
- posthog
- revenuecat
- supabase
- swift
- swiftui
- widgetkit
Log in or sign up for Devpost to join the conversation.