Case study

Running, with a finish line

Live races with friends, a feed of real runs, and a mascot who cheers every finish.

Client
RoadRacers
Timeline
4 months · Jul 2026 – Oct 2026
Scope
Identity, Product, Site
The feed and a runner’s profile.
The feed and a runner’s profile.

RoadRacers turns a solo run into a race. Join a live race and see where everyone is on the map, metre by metre.

The brief

RoadRacers wanted a running app that people open because it is fun, not because they feel they should. The idea: turn a solo run into a race against friends.

The hard part

A race only works if it feels live. Positions have to update for every runner as they move, on a phone that is bouncing in a pocket. And a race needs a reason to come back tomorrow, or it is a novelty.

  • Real-time positions for every runner
  • Progress that keeps people coming back
  • Passing App Store review first time
Race results and a live race.
Race results and a live race.

What we designed

A live race screen with everyone on one map and the gaps in metres, a results screen with the route and leaderboard, a feed of real runs, and profiles with followers and divisions.

Progress runs on XP and divisions, from Rookie Bronze up. We drew a panther mascot and the race art around it, so finishing a race feels like a celebration rather than a stats screen.

What we built

An iOS and Android app built with Expo, an Express API with real-time race updates over sockets, and a Next.js site for marketing, invitation links and administration, all in one workspace.

Maps come from Mapbox, subscriptions from RevenueCat, race narration from ElevenLabs, and uploads and race art from object storage. Automated regression tests run against an isolated database.

  • Live races and leaderboards
  • Feed, profiles, followers and divisions
  • Panther customisation and race art packs
  • Subscriptions and notifications

Ready for review

Before release we audited the app against the App Store guidelines and recorded the evidence for every control, so the launch would not stall in review.

Built with

  • Expo
  • React Native
  • Express
  • Socket.IO
  • PostgreSQL
  • Redis
  • Next.js
  • Mapbox
  • RevenueCat
  • ElevenLabs

Shipped

  • iOS and Android app
  • Live races and leaderboards
  • Feed, profiles and divisions
  • Mascot and race art
  • Marketing site

Read more about this build