First released:
Changelog
A comprehensive look at what TracingInsights offers today. New features are shipping regularly — check back for updates.
New
Community race ratings: Rate every race and sprint from 1950 to the present. Each event page (
/rate/[season]/[slug]/raceor/sprint) includes a 1–10 overall score picker, a "watched this race" checkbox, and a publish button. After publishing, your score is compared side-by-side with the community average and any new badges you've earned are displayed inline. Navigate between races with prev/next links or arrow keys. A Rating/Results tab switcher lets you flip between the community rating view and the official race results table.Detailed driver, team, and operations ratings: Expand any of four collapsible sections to rate individual drivers (1–10 each), teams (1–10 each), race control, and TV direction. Select award winners for Best Radio, Best Overtake, Most Entertaining, and Best Defense via searchable dropdowns. All sections are independent — open one or all, in any order. Each heading shows completion counts (e.g. "4 of 20 rated") without implying requirement.
Community score with distribution chart: Every event shows the community's aggregate overall score on a /10 scale, total rating count, and — when the sample is sufficient — a visual histogram of score distribution from 1 to 10. Sparse-data states show "Few ratings — not yet representative" instead of a misleading average. Scores are blurred by default behind a spoiler overlay ("Show ratings" button) to avoid biasing your own rating. A global preference toggle in Settings → Data & Controls disables spoilers site-wide.
Rating activity feed: A paginated feed of recent public ratings appears on event pages, the rating landing page, and user profiles. Each entry shows who rated, their score, and when. Cursor-based "load more" pagination.
Rating landing and season pages:
/rateserves as the ratings hub with popular events discovery, season-by-season browsing, and community activity./rate/[season]shows all races in a season with community scores and your personal ratings side-by-side.User rating profiles:
/rate/profileshows your complete rating history — stats summary, top drivers you've rated highest, earned badges with next milestones, recent activity, and privacy controls to hide your profile from other users./rate/user/[handle]is the public view of any user's rating profile.Rating badges and milestones: Earn badges based on your rating activity.
BadgeSummarydisplays your featured earned badges and the next milestones you're approaching. New badges are surfaced inline after each publish.Embedded AI Chat on every page: A floating chat panel is now available on all Stats and Rate pages via a persistent FAB (floating action button) in the bottom-right corner. The panel opens on first visit and remembers your open/closed state across sessions. It operates in two modes — a compact popup panel (mobile default) and an expandable sidebar (desktop) — with smooth transitions between them. Tap the expand button to switch, or hit Escape to close. The panel includes a new-conversation button, a progress status indicator, and full keyboard accessibility. A new conversation ID persists per browser tab session so your thread survives open/close cycles.
Page-aware chat context: The embedded chat automatically detects which page you're viewing — driver profiles, constructor pages, seasons, races, circuits, Grand Prix history, standings, records, comparison tools, and every rate page — and injects structured entity context into your questions. Pronouns like "he", "they", or "this" are resolved to the entity on screen. Each page type also gets curated starter suggestions (e.g. on a driver page: "What is {driver}'s win percentage this season?") so you can start asking questions with one tap.
Enhanced season stats panels: Seven new analysis panels deep-dive into season-level data: pit stops breakdown, laps led analysis, positions gained tracking, race outcome summaries (classified/retired/DNF), recorded incidents with details, and a comprehensive season report matrix. All powered by a new per-year JSON data system (
SeasonEnhancedOverview) covering every season from 1950 to 2026.Driver race-by-race statistics: Individual driver profiles now include a detailed race-by-race results table showing year, Grand Prix (with country flag), constructor, grid position, finish position, laps completed, points scored, and result status (including retirement reasons and gaps to the winner).
Experimental 𝕏 Premium+ / SuperGrok support: Connect your 𝕏 Premium+ or SuperGrok subscription via device-code auth and use Grok models for SQL planning — no separate xAI API key required. Marked experimental while the integration stabilizes. Includes a dedicated OAuth proxy route with proper user-agent headers and issuer URL handling.
AI model fallback and resilience engine: When a model rejects a structured output format, the system now automatically negotiates down — from
json_schematojson_objectto no format — so you always get an answer regardless of provider limitations. On HTTP 413 (request too large) errors, the system tries alternate models from your provider's live model list before progressively shrinking the prompt across three tiers. Model lists are now fetched dynamically from provider APIs rather than relying on a static allowlist, so newly available models work immediately without updates.In-settings provider setup: The AI Provider settings panel now shows step-by-step instructions for each provider (API keys, ChatGPT Codex, and Grok) so you can connect without leaving chat. The /api-keys page remains for the full guides.
New name: TracingInsights: TIF1 AI is now called TracingInsights. The app stays at app.tracinginsights.com.
Telemetry dashboard on the homepage: The homepage is now a full F1 telemetry dashboard. Analyze lap times, speed traces, sector times, tyre data, team radios, weather, and race control messages. Data covers all seasons from 2018 to today. Select the charts that you want to see. Draw on charts with the annotation tools: pencil, text, arrow, line, rectangle, ellipse, and eraser. The old
/analysispage now redirects to the homepage.AI chart explanations: Select the explain button on a dashboard chart. The AI reads the chart data and gives you a written analysis. Available for lap time, telemetry, G-force, speed, stint strategy, weather, and race control charts.
Ultra page for patrons: /ultra is the new home of the patron tier. It has exclusive telemetry charts, for example the G-G diagram, aero summary, and pit stop analysis. It also has Ultra session chat. This chat answers questions about session data: lap times, telemetry, weather, and race control. You can download the charts as images, then edit and share them. Users without a subscription see a public landing page with the list of benefits.
Desktop app: Download the TracingInsights desktop app for Windows, macOS, or Linux from /download. The desktop app supports custom AI providers. It also supports device sign-in for ChatGPT and Grok.
Android app: Download the Android app from /download.
Custom AI providers: Connect your own AI server: Ollama, LM Studio, vLLM, or any OpenAI-compatible endpoint. This works in the browser and in the desktop app. Your keys stay on your device.
FIA documents in chat: Type
@fiain the chat composer to attach FIA regulations or FIA decision documents to your question. Answers cite the source documents. Open the cited documents in the built-in PDF viewer.Page context chip in chat: A chip in the chat composer shows the attached page context. Select the chip to attach or remove the context of the page on screen.
Comments on stats and rate pages: Stats pages and rate pages now have a comments section. Discuss races and statistics with other users.
Regulations encyclopedia: The new /stats/regulations page covers every points system, qualifying format, and technical regulation from 1950 to 2026. It includes era narratives and engine formulas.
FAQ sections on stats pages: Stats pages now answer frequently asked questions about the data on the page.
Redesigned hover cards: Point to a driver, constructor, circuit, or race link on a stats page. A compact card shows the key statistics for that entity.
Reasoning models: The provider bar now supports reasoning models. Select a reasoning model when your question needs a deeper analysis.
Free-text names in slash commands: Slash commands now understand names that you type in free text. You do not need an exact match.
More constructor statistics: Grand Prix pages and circuit pages now show constructor statistics.
Virtual safety car statistics: Standings and incident reports now include virtual safety car data.
Improved
- Faster pages: Stats pages and rate pages now load faster.
- Faster AI answers: Answers now start to stream earlier. You see the first words sooner.
- Rating drafts: The quick rating form now keeps your draft. An unfinished rating survives a page reload.
- Clearer sign-in errors: A failed sign-in now shows a clear message. You can try again from the same screen.
- Better search: The search dialog has better keyboard navigation and better screen reader support.
- Smarter session answers: The chat assistant now understands practice, qualifying, sprint, and race sessions better.
- Driver filters use full names: Driver filter lists now show full names. Drivers are easier to find.
- Patron tier: The sponsor tier is now called the Patron tier. The price is now $5 per month.
- FIA docs bot posts sooner: New FIA documents are posted to the social accounts as soon as they are synced instead of one document per poller tick, and a chained systemd worker keeps draining the outbox between polls. A single-flight drain lock, a retry backoff, per-call timeouts, and a sweep of rows left stuck by a killed run keep the pending queue moving — an admin test post only publishes the document you picked, failed rows can be retried from the ledger, and the admin page now shows the last drain alongside the last run.
Fixed
- Pole position counts: Sprint poles no longer count as Grand Prix poles. Career pole position statistics are now correct.
- Practice session answers: The chat assistant no longer invents data for FP1, FP2, and FP3 questions.
- Android app errors: Fixed the errors that stopped the Android app from loading data.
- Incomplete race entries: Races with incomplete entry data now show all participants for rating.
New
- ChatGPT Codex setup guide on API Keys page: The /api-keys page now includes detailed step-by-step instructions for connecting ChatGPT Codex via device-code authorization — no API key required. Works with any ChatGPT plan (Free, Plus, Pro, or Team).
- Data Session seam documented in ARCHITECTURE.md: New Section 12 describes the
F1DataSessioninterface — the single canonical data seam for loading Parquet tables into DuckDB-WASM and executing SQL. Documents the interface, consumers (orchestrator, template executor, chat-shell adapters), and test seam.
Improved
- Template catalog refactored: Deleted
template-router-catalog.ts(353 lines) and consolidated all regex-backed matching into the manifest (src/lib/ai/templates/manifest.ts) and catalog registry (src/lib/ai/templates/catalog/registry.ts). The catalog'smatch()method is now synchronous and returns extracted params alongside the generator.priorityfield removed fromTemplateEntry— entries are matched in insertion order. - Consistent follow-up suggestions: AI prompts now request exactly 3 follow-up questions per response instead of "2–3", producing a uniform suggestion chip count across all answers.
- SQL query and data pipeline optimizations: Improved query performance across multiple templates and optimized the F1 data pipeline build process with better health check mechanisms.
- Architecture sections renumbered: ARCHITECTURE.md sections 12–18 renumbered to accommodate the new Data Session seam section.
Others
- Updated
local-sql.tsandslash-command.tsto use the consolidated catalog instead of the deletedtemplate-router-catalogmodule. - Multiple template skill files updated for consistency with the catalog refactor.
- Unit tests updated across
query-run.test.ts,template-all.test.ts,template-catalog.test.ts,template-executor.test.ts, andtemplate-router.test.ts.
New
- Slash commands: Type
/in the chat composer to browse and select from 19 analysis skills —driver-vs-driver,constructor-vs-constructor,championship-standings,teammate-battle,race-summary, and more. Full keyboard navigation (↑↓ arrows, Enter to select, Esc to close) with ranked substring matching. Selected skill is locked to the message and displayed as an inline chip in the conversation history. - Reasoning level control: New dropdown in the provider bar lets you choose the AI reasoning effort —
none,low,medium,high, ormax. Selection persists across sessions via localStorage and is passed through to the AI adapter on every request. - Driver vs Driver — 12 analysis dimensions: The comparison template now runs 12 structured steps: career stats, season-by-season performance, qualifying head-to-head, pit stop strategy, sprint results, fastest laps, points efficiency, reliability/DNFs, constructor context with teammate overlap, key milestones, and a verdict summary. Optional
yearparameter scopes the comparison to a single season. Batch table loading reduces redundant DuckDB registrations. - Multi-step template context for AI answers: Templates that run multiple SQL queries now pass all per-step results to the AI as structured context, producing richer, cross-referencing narrative answers instead of generic summaries.
Improved
- UI/UX Improvements
New
- Any ChatGPT account can now power Tracing Insights. Free, Plus, Pro, or Team all work. Pick ChatGPT in the provider list, sign in once at ChatGPT's site, and your account handles the answers from then on. No API key needed.
- The new Data section opens any of the 49 source tables directly. Start at app.tracinginsights.com/f1db. Try drivers, lap times, or championship standings. Inside any table you can sort by clicking a column, filter rows by typing into the column headers, search the sidebar to jump to a different table, and export what you're looking at to CSV.
New
AI & Query Engine
- Three AI providers with dynamic model selection: Google AI Studio (Gemini models with generous free tier), OpenRouter (unified API for GPT-4o, Claude, Llama, and 100+ models), and Cerebras (wafer-scale Llama inference). Per-provider base URL configuration for self-hosted and compatible endpoints.
- Natural language to SQL: Ask questions in plain English and get answers. Structured JSON output includes
understanding,answer,sql,explanation,tables_used,expected_result_shape,chart_suggestion,share_slug, andsuggestions. AI-generated follow-up question suggestions (up to 3 per answer). Dynamic schema pruning — only tables and columns relevant to the question are included in the prompt, reducing token usage and improving accuracy. Temporal context injection (current year/date in system prompt) for season-aware queries. - Self-healing SQL: Automatic repair loop — up to 3 attempts when DuckDB reports errors. Each repair includes the failed SQL, the exact error message, and full conversation context. One browser-provider repair attempt for error classification before routing to the AI for repairs.
F1 Data & Performance
- DuckDB-WASM in your browser: All SQL runs client-side — zero server round-trips for data processing. Columnar analytics engine 10–100× faster than traditional browser SQL.
- Smart Parquet data layer: 50 F1 tables (~9 MB total) as Parquet files. Only tables referenced by the AI's SQL are downloaded — not the entire database. Column-level pruning at the Parquet level. SHA-256 content hash verification per downloaded file. ETag-based incremental updates via a ~5 KB manifest — only tables with changed content hashes are re-downloaded; HTTP 304 responses make unchanged downloads free. 7-day IndexedDB cache expiry with version-based invalidation via schema hash.
- Layered SQL safety: Statement count check (rejects multi-statement SQL). DDL/DML keyword rejection (CREATE, DROP, ALTER, TRUNCATE, INSERT, UPDATE, DELETE). Table allowlist enforcement against the 50 F1DB tables. Row limit wrapping (auto-appends LIMIT clause). Comment and string literal stripping before keyword analysis to prevent SQL injection via obfuscation.
- Data session orchestration: Manifest prefetching overlapped with AI calls to hide network latency. Two-phase prepare-then-execute architecture supporting the repair loop. Automatic table eviction for unused tables to control memory. Memory policy controls (max rows per result, max registered tables, eviction behavior). AbortSignal propagation for cancellation support.
Charts & Visualization
- AI-generated charts from query results: Supports
bar,line,scatter, andpiecharts with title, x-axis, y-axis, and optional group key. Multi-series auto-detection — when results have 3+ columns, grouping columns with 2–12 unique values are automatically identified for grouped/stacked charts. F1-themed 12-color palette with both translucent and solid variants. Chart validation against query result geometry (column existence, data type compatibility). Rendered via Layerchart — SVG-based, Svelte-native, crisp on all screen densities, GPU-composited animations. - Interactive chart controls: Hover tooltips, click-to-filter legends, and responsive resizing. Configurable chart type override and title editing. Multi-series group selection. Fullscreen chart expansion.
Chat Experience
- Token-by-token streaming: Answers stream in real-time via SSE (Server-Sent Events). Stop-generation button to abort mid-response. Auto-scroll keeps the viewport at the latest content. Time-to-first-token and total-time metrics captured per response. Token usage tracking (prompt, completion, total) per AI call.
- Rich results display: Syntax-highlighted SQL in an expandable block with one-click Copy SQL button. Copy Results button for table data. Responsive HTML result tables with row count display and truncation for large result sets. Fullscreen table view for large datasets. Column sorting in result tables. CSV export (RFC 4180 compliant with proper escaping) and JSON export (pretty-printed). Download-as-file via Blob URL.
- Local conversation history: Stored in IndexedDB via Dexie.js. Rename, delete, and clear all local data. Collapsible conversation sidebar with search. AI-powered conversation summarization (2–3 sentence summaries for conversation listings). Conversation context injection — previous Q&A pairs included in AI prompts for follow-up awareness. Provider and model tracking per message.
- Saved queries: Save frequently asked questions with custom names. One-click re-run from the side rail. Tag support with GIN-indexed text array for fast filtering. Server-side persistence for sponsor tier.
- Message voting: Upvote/downvote on any assistant answer. Anonymous and authenticated users alike can provide feedback. Full context collected: provider, model, question, SQL, answer text, and error details. Optimistic UI with IndexedDB durability — vote survives page refresh before server confirmation. Admin feedback dashboard with vote analytics and context inspection.
- Shared conversations (Sponsor): Generate public share links at
/q/[id]/[...slug]. AI-generated URL-friendly slugs (5–8 word hyphenated summaries). Profanity moderation via leet-speak normalization and blocklist. SEO metadata on shared pages (OpenGraph, Twitter Card, canonical URL). Share dialog with copy-link and open-in-new-tab actions. - Suggestion chips: 5 curated starter suggestions for new users. One-click fills question into the composer — no typing needed.
Accounts & Tiers
- Free tier — no account required: Full query functionality with your own API key (BYOK). Data stored exclusively in your browser's IndexedDB — zero server-side data collection.
- Sponsor tier — $4.99/month via GitHub Sponsors: Cloud-synced chat history in PostgreSQL. Server-side AI proxy (your browser never sees API keys). Encrypted API key storage (AES-256-GCM). Server-side saved queries with tags. Shared public conversations. Access from any device with full history.
- Sign in with GitHub or Google: Auth with GitHub and Google OAuth only — no email/password needed, faster onboarding and fewer attack surfaces. Manual sponsor refresh in account settings.
- User profiles at
/u/[handle]: Avatar, display name, patron badge, join date, shared conversations list. Auto-generated handles on first login, editable with 30-day cooldown. Custom @handle validation (1–30 chars, lowercase letters/numbers/underscores only). 27 reserved handles protecting routes (admin,api,login,settings), brands, and tier names. - Patron badges: Blue star for active sponsors, Gold star for lifetime supporters, Dimmed star for past sponsors. Hover/touch reveals membership duration. Badge displayed on profiles, chat header, and shared conversations.
- Account deletion: One-click cascading deletion: saved queries → provider keys → conversations → user profile. Sponsor accounts get a 48-hour recovery window before permanent deletion.
Sponsor Features
- Cloud sync: Conversations stored server-side in PostgreSQL as JSONB with GIN indexing for full-text search. Access your history from any device. Conversation search across all past chats.
- Server AI proxy: Browser calls
/api/chat→ server decrypts your AES-256-GCM key → proxies to AI provider → discards key. Keys never reach your browser, never appear in logs. Response streaming proxied transparently. - Encrypted key storage: AES-256-GCM envelope encryption with unique IV per encryption and authenticated GCM tags. Key decrypted per-request and immediately discarded. Multiple named keys per provider with active key selection.
- Server-side saved queries: Stored with tags. Cloud persistence — never lost on browser cache clear. One-click re-run from sidebar.
Security & Privacy
- AES-256-GCM encryption for all sensitive paid-tier data. Unique IV per encryption operation. Authenticated encryption with GCM authentication tags. Master encryption key stored exclusively in environment variable, never persisted to database. OAuth tokens encrypted at rest.
- Strict Content Security Policy
- CSRF protection: Origin/Referer validation on all POST, PUT, PATCH, DELETE requests.
- Rate limiting: In-memory token bucket algorithm for
/api/chat— 30 requests per minute per key. - API key protection: Structured JSON logs include userId, provider, and model only — zero key leakage in journald, PostHog, or Cloudflare. Keys encrypted before database storage and decrypted per-request. Provider key masking in UI (bullet characters + last 4 characters).
- EU data residency: Hosted on Helsinki, Finland. All server-side data processing under EU jurisdiction and GDPR. Anonymous tier: zero personal data collected server-side. Only one essential cookie: the Auth session cookie. No tracking, marketing, or third-party cookies — no cookie consent banner required.
UI / UX
- 20 themes: 11 F1 team-inspired (Haas — white, Mercedes — teal, Aston Martin — green, Red Bull — gold, Williams — blue, Racing Bulls — purple, McLaren — orange, Sauber — green, Alpine — pink, Ferrari — red) plus 9 community favorites (Dracula, Synthwave, Forest, Sunset, Coffee, Dim, Night, Luxury, Halloween) and the Tracing Insights branded theme. Theme switcher with visual preview chips. Theme persists across sessions via localStorage.
- Mobile-first design: 48px minimum tap targets throughout. Collapsible side rails. Hamburger menu with full navigation tree. Optimized from 320px phones to 4K desktops. Progressive enhancement — initial content renders without JavaScript via SSR. Glass-morphism panels with backdrop blur. Shimmer animation for loading states. Pulse-glow indicators for status changes.
- Accessible to everyone: Skip-to-content link as first focusable element. ARIA labels on all interactive elements. Semantic HTML landmarks. Focus-visible outlines on all focusable elements. High-contrast text in all 20 themes. Proper heading hierarchy (h1→h2→h3). Table
scopeattributes for screen reader navigation. - Service worker: Caches app shell (build output, assets) and immutable files. Excludes
/f1db/*Parquet files (cached separately via IndexedDB). Version-based cache invalidation on new deploys. Update banner with reload button when a new service worker version is detected. - Toast notifications & status indicators: Non-blocking status messages for query progress, errors, copy confirmations, and key operations with auto-dismiss. Skeleton loader — placeholder shimmer while DuckDB initializes or tables load, prevents Cumulative Layout Shift (CLS). Database status indicator — green/amber/red with hover tooltip revealing initialization progress, registered table count, and cache status.
- Provider key management UI: Add keys with custom names per provider. Switch active key with one click. Delete keys with confirmation. Test connectivity by fetching available models from the provider API. Masked key display (bullet characters + last 4 characters). Per-provider model selection dropdown. Server-side key management for sponsor tier with encrypted storage status.
Design System
- Typography: Plus Jakarta Sans for body text and UI elements (clean, modern geometric sans-serif). Space Grotesk for headings, logo, and display text (distinctive character with scientific precision). Font stack with system-ui fallbacks for zero-latency text rendering. Proper
font-display: swapbehavior. - Design tokens: Custom CSS color tokens:
surface(#09090b),card(#18181b),ink(#f4f4f5),muted(#a1a1aa),line(#27272a),accent(#e11d48),danger(#ef4444),success(#10b981). Utility classes:.tap-target(48px minimum touch area),.glass(semi-transparent with backdrop blur),.glass-strong(opaque variant). Custom animations: shimmer, pulse-glow, slide-in, fade-in. CSS bundle budget enforced at 27 KB. - Component architecture: Svelte 5 runes syntax throughout (
$state,$derived,$effect,$props). TypeScript strict mode. Components split into.sveltetemplates and.svelte.tslogic modules for testability. Lucide Svelte icons for consistent, tree-shakeable icons.
Improved
(Initial release — nothing to compare against yet.)
Fixed
(Initial release — nothing to compare against yet.)
Removed
- Groq provider — Removed due to persistent integration issues (frequent
503/504errors, inconsistent structured-output support, lower context windows than alternatives, and unreliable streaming behavior). The remaining providers (Google AI Studio, OpenRouter, Cerebras) continue to cover the full range of model capabilities and free-tier options.
Others
(Initial release — nothing to compare against yet.)