F1 Telemetry Manager is the post-race surface of F1 StratLab: a FastAPI backend that wraps the strategy agents (N25–N31) and the telemetry / comparison / circuit-domination services, and a React web app (Vite + TypeScript + Tailwind + ECharts) that consumes them. It is vendored into F1 StratLab as a git submodule at src/telemetry/ and shares the parent's data root, ML weights, and .env.
The repo can also be cloned standalone if you only want the analytics dashboard, but the chat and strategy endpoints assume the F1 StratLab models live alongside.
| Surface | Entry point | What it does |
|---|---|---|
| FastAPI backend | uvicorn backend.main:app --port 8000 |
REST endpoints for telemetry, comparison, circuit domination, strategy and chat. Mounts a FastMCP server at /mcp exposing the strategy agents as tools. |
| React web app | docker compose up (service webapp) or cd webapp && npm run dev |
Post-race SPA: telemetry dashboard, 60fps driver comparison, ML model lab, multi-agent strategy, race analysis, and a streaming AI chat that renders tool results (cards + ECharts) inline. Reports, sessions, image attach. |
The chat pipeline runs in-process against the strategy agents through a tool-calling loop (OpenAI tool contract); the same tools are exposed externally over MCP, so Claude Desktop, Cursor or any MCP client can drive the agents directly.
From the F1 StratLab repo root (recommended):
docker compose updocker compose up brings the backend up on :8000 and the React web app on :8501. The legacy Streamlit UI is retained for reference under frontend/ and still runs locally via f1-streamlit, but it no longer ships in compose.
Standalone (from this directory):
docker compose upThe compose file mounts ../../src and ../../data from the parent repo (read-only), and reads ../../.env for the LLM provider. To run without F1 StratLab, point those volumes at your own data and set OPENAI_API_KEY (or F1_LLM_PROVIDER=lmstudio with LM Studio on host.docker.internal:1234).
Manual install for development:
uv sync
uvicorn backend.main:app --reload --port 8000 # terminal 1
cd webapp && npm install && npm run dev # terminal 2 (web app on :5173)Requires Python 3.11+.
All endpoints sit under /api/v1. The full reference lives at docs/backend-api.md in the parent repo; the short version:
/telemetry— GPs, sessions, drivers, lap times, per-lap telemetry, aggregated data (FastF1)./comparison/compare— two-driver fastest-lap comparison with synchronised delta./circuit-domination— microsector-level dominant-driver map./strategy— pace, tire degradation, situation, pit timing, radio NLP, FIA RAG and the orchestratedrecommendendpoint that ties them together. Also drives the simulator (/strategy/simulate)./chat— message, stream, tool-message and tool-message-stream. The tool-message endpoints implement the OpenAI tool-calling loop against the strategy MCP tools;/streamis the plain chat passthrough./mcp— FastMCP Streamable-HTTP transport. External MCP clients connect here to call the strategy tools directly.
The voice chat surface (STT → LLM → TTS) was retired in v2. It remains available in the legacy Streamlit app under
frontend/and in the parent repo'slegacy_versionbranch.
backend/— FastAPI appapi/v1/endpoints/—telemetry,comparison,circuit_domination,strategy,chatservices/— chatbot (chat engine, MCP bridge, stage tracker, LLM service), telemetry, simulationmcp_tools.py— FastMCP server wrapping the N25–N31 agents
frontend/— Streamlit appapp/main.py— landing + dashboardpages/— Advanced, Compare, Downloads, Reports, Admincomponents/— chatbot, telemetry and shared widgets
docs/— architecture, changelog, multimodal and MCP notes, import guidetests/— pytest coverage for chat engine, MCP bridge, comparison and telemetry services
Backend: FastAPI 0.109, Pydantic 2.5, FastF1 3.4, FastMCP 3.x.
Frontend (web app): React 19, Vite, TypeScript, Tailwind v4, ECharts, TanStack Router/Query, Zustand. (The retired Streamlit UI lives under frontend/ for reference.)
AI: OpenAI-compatible LLM (LM Studio local server or OpenAI API).
The backend stays FastAPI, no question — and the Streamlit frontend has been replaced by a modern React web app (Vite + TypeScript + Tailwind v4 + ECharts + TanStack Router/Query). It keeps the original structure, menus and flows, but escapes Streamlit's design constraints: instant client-side navigation, a 60fps canvas replay, a redesigned pit-wall aesthetic, and a chat that streams the LLM reply for real over SSE and renders each tool's output (cards + charts) inline. The web app is now the default surface; the legacy Streamlit app is retained under frontend/ for reference.
This repo is one piece of F1 StratLab:
- F1 StratLab — strategy engine, agents, CLI and Arcade live UI
- F1 Telemetry Manager (this repo) — backend and post-race React web app, vendored as a submodule
- F1 AI Team Detection — YOLOv12 team identification from race footage
- F1 Strategy Dataset — trained weights and processed race data
Originally built as a coursework project (Santiago Souto Ortega and Víctor Vega Sobral, fourth year, Grado en Ingeniería de Sistemas Inteligentes) and later refactored into the post-race surface of F1 StratLab. Pull requests and issues are welcome at VforVitorio/F1_Telemetry_Manager.
Licensed under the Apache License 2.0 — see LICENSE.
Disclaimer — no copyright infringement intended. Formula 1, F1 and related marks are trademarks of Formula One Licensing B.V. and are used here for reference only. Race data is sourced from public APIs (FastF1) and used strictly for educational and non-commercial purposes. This project is not affiliated with, endorsed by, or in any way officially connected to Formula 1, the FIA, or any F1 team.