About & method
How it's made
Data
A Python pipeline runs offline and exports compact, static data files. The browser never calls FastF1, OpenF1 or Jolpica.
- FastF1 3.8.3 provides the event schedule and circuit metadata (corner positions and numbering, map rotation).
- OpenF1 provides lap timing, car telemetry (speed, throttle, brake, gear, RPM at about 4 Hz), car positions, tyre stints, pit stops and race-control messages. F1's live-timing archive, which FastF1 normally reads, currently requires authentication, so OpenF1 stands in for it.
- Jolpica provides championship standings. Requests carry a custom User-Agent and are rate-limited and cached.
Processing
- Each driver's fastest qualifying lap is resampled to a fixed 10 Hz grid and cut at the exact moment the car crosses the line (found from position data, because lap timestamps are approximate).
- Distance along the lap combines integrated speed (smooth, but it drifts) with the car's position projected onto a reference centerline (anchored, but jittery). It is then warped so every lap reaches the sector boundaries at exactly its official sector times.
- Coordinates are rotated to the usual map orientation, normalized and quantized to 16-bit integers. Telemetry ships in a small gzip-compressed binary format (≈5 KB per lap).
- Race positions are the order in which cars cross the line on each lap. The mini map places cars between crossings using the pole lap's time-to-distance profile, so it is an estimate.
Accuracy
Public telemetry is sampled at about 4 Hz, so the instantaneous gap in the Ghost Duel can wobble by roughly a tenth of a second in slow corners. At sector lines and at the finish it matches the official timing. Treat the corner-level detail as indicative.
Accessibility
- Every visualization has a written summary of its key insights, generated at build time and present in the page before any JavaScript runs.
- Scrubbers are keyboard sliders: arrow keys step, Shift + arrows jump, Home/End, Space plays or pauses, and [ ] change speed.
- With reduced motion enabled, nothing autoplays, the camera doesn't drift, and transitions are instant.
- Teammates are separated by line style as well as color, and the Race Story has a full data table.
Technology
Astro (static output) with Svelte islands. three.js renders through WebGPU where available and falls back to WebGL2, inside a Web Worker on an OffscreenCanvas so the page stays responsive. D3 is used only for scales and curves.
Disclaimer
This is an unofficial fan project and is not associated in any way with the Formula 1 companies. F1, FORMULA ONE, FORMULA 1, FIA FORMULA ONE WORLD CHAMPIONSHIP, GRAND PRIX and related marks are trade marks of Formula One Licensing B.V. No official logos or fonts are used. Team colors are used only to identify teams in the data.