Formula 1 Hub
Every Grand Prix in one place: the calendar in your local time, live timing, full results and championship standings, plus driver and team profiles and an archive of every season since 1990.
Under the hood
- Live timing relay. A Node.js server on Render connects to F1's official live timing feed the same way formula1.com does (SignalR over WebSocket), merges 11 data streams into one state and pushes every update to the browsers that have the page open.
- A track map without GPS. The public feed doesn't include car positions (only F1 TV accounts get them), so the map estimates them: it knows the last of ~25 timing checkpoints each car passed and moves it at the pace of its last lap until the next one.
- Accurate finishing laps. The chequered-flag message can arrive after the leader has already crossed the line, so the server works out when each driver finished from the feed's own timestamps. It runs on the relay, which is always connected, so no crossing is missed even when nobody has the page open.
- Self-updating results. A GitHub Actions workflow checks every 30 minutes on race weekends for sessions that ended without results. When it finds one, it pulls the data from the OpenF1 API, rebuilds the stats and commits them, so the site updates itself after every session.
- JavaScript
- Node.js
- WebSockets
- Chart.js
- GitHub Actions
- OpenF1 API