Gapline
Every gap, live. The whole race on one screen: who is where, by what gap, and what it means for the championship. Unofficial app, not affiliated with Formula 1 or the FIA.
On Web, iPhone and Android.


Live, gap by gap
Live timing, standings and the calendar, each in its own tab.




What it does: Gapline
Live timing
Running order, or lap-time classification in qualifying and practice, with gaps, tyres and pit stops, current-lap sectors and eliminations.
Everything on track
Safety Car, VSC and red-flag banner, race control messages, weather, a live track map and team radio.
Your driver, pinned
Pick your driver once: they stay pinned everywhere and the app celebrates when they gain a place, set the fastest lap or reach the points.
Standings that move
Drivers and teams, provisional with live Sprint and Race points or official, plus your driver's championship battle.
The season story
The title fight, the points progression and the teammate head-to-head.
Calendar
A countdown to the next session and the whole weekend, in your time zone or track time.
Data: OpenF1 for live timing, Jolpica-F1 for standings, schedule and results.
On the web, in your pocket
Web app
In the browser, nothing to install.
iPhone
The full iOS app.
Android
The full Android app.
Live Activity
Position, gap, lap, tyres and flags on the lock screen and in the Dynamic Island.
Widgets
The next session and the championship on the home screen.
How I built it
One codebase
Expo SDK 57, React Native and react-native-web: the same app for iOS, Android and the web.
A real-time relay
A Node service takes the OpenF1 MQTT feed, fans it out to the apps over WebSocket and updates Live Activities through APNs.
Protected credentials
The OpenF1 login never ships in the app: the relay and a Vercel function keep it server-side.
Native animations
Reanimated for standings that move and favourite-driver celebrations.
Other apps
Let's talk about your project.
For startups, small businesses and proofs of concept (POC). Fixed price, quote within 48 h.