Explore Formula 1 telemetry and a curated news briefing.
Compare lap — sector deltas and driving profile
Compare lap — speed, throttle, brake and gear traces
Race replay — broadcast dashboard and onboard HUD
Race replay
Compare lap
Assets live in public/assets/. JPEG/M4V are GitHub-friendly previews; HEIC/MOV are the original captures.
- Race replay — full-race map playback with optional head-to-head driver
- Compare lap — synchronized Speed / Throttle / Brake / Gear charts + sector deltas
- News — blog-style F1 headlines with source attribution
Built by Marcos Mendes.
- Next.js (App Router) + TypeScript
- Route Handlers as the application API
- OpenF1 (server-side only) for telemetry
- Static JSON news feed (local scrape script)
- Recharts
- Vitest
cp .env.example .env.local
npm install
npm run scrape:news
npm run devOpen http://localhost:3000.
npm run test
npm run lint
npm run buildNews is not scraped at runtime. Refresh locally, then commit the JSON:
npm run scrape:newsThis pulls recent F1 stories from Motorsport.com / Autosport (RaceFans when available), enriches each page, and writes up to 10 articles to data/news/articles.json.
git add .
git commit -m "Prepare F1 Telemetry Explorer for production"
git remote add origin https://github.com/<user>/f1-telemetry.git
git push -u origin main- Go to vercel.com/new
- Import the GitHub repository
- Framework preset: Next.js (auto-detected)
- Root directory:
./ - Build command:
npm run build(default) - Output: Next.js default
Optional — the app works without them (defaults to OpenF1 public API):
| Variable | Value | Required |
|---|---|---|
OPENF1_BASE_URL |
https://api.openf1.org/v1 |
No |
Add in Project → Settings → Environment Variables for Production, Preview, and Development if you want it explicit.
Click Deploy. Vercel runs npm install + npm run build and hosts the app.
Race replay and lap compare fetch a lot of data from OpenF1. Route handlers use maxDuration = 60 seconds.
- Vercel Hobby: function limit is 10s — race replay may timeout
- Vercel Pro: up to 60s — recommended for race replay / battle mode
If replay fails in production with a timeout, upgrade the plan or use compare-lap only.
- Home page loads
- Race list populates (
GET /api/sessions) - Race replay for a completed race (e.g. Hungary 2025)
- Compare lap for two drivers on one lap
UI → /api/* → application → domain → OpenF1 infrastructure
Details: docs/architecture/architecture.md
GET /api/sessions
GET /api/sessions/:sessionId/drivers
GET /api/sessions/:sessionId/laps?driverId=
GET /api/sessions/:sessionId/compare?driverA=&driverB=&lap=
GET /api/sessions/:sessionId/replay?driverId=&driverBId=
News pages are App Router routes:
/news
/news/:slug
- Phase 1 (now) — Telemetry explorer, lap compare, race replay, news
- Phase 2 — Richer track visualization
- Phase 3 — Driving analysis (corners, braking, throttle)
- Phase 4 — Advanced race analytics


