Important
UNDER MAINTENANCE: SilverWall is currently undergoing a major architectural pivot. We are migrating from the legacy Python/Supabase stack to a Full TypeScript + SpacetimeDB architecture to resolve 2026 season parity issues and enhance real-time performance.
Note
MIGRATION STATUS: The backend telemetry engine, Season Races, and Championship Standings have been successfully migrated to SpacetimeDB. Core 2024/2025/2026 data is verified and fully operational. Track geometry visualization is currently undergoing refinement and is temporarily disabled on the main landing page.
graph TD
A[OpenF1 API] -->|Telemetry & Standings| I[TS Ingestor Worker]
I -->|Low Latency Push| S[(SpacetimeDB Core)]
C[Clerk Auth] -->|Authenticate SDK| F[React Frontend]
S <-->|Direct Multiplexed Sync| F
S <-->|Slash Commands| B[Discord Bot Service]
U[Discord User] <-->|Interactions| B
- Restored 2026 Season Parity: Resolved "Off Season" state; the landing page now correctly displays upcoming 2026 races with real-time countdowns from SpacetimeDB.
- Verified 2024/2025/2026 Standings: Historical and upcoming championship data is now served natively from the new TypeScript engine.
- Track Geometry Modernization: Initiated migration of circuit maps to high-fidelity vertex-based rendering (feature currently in refinement).
Engineering-Grade F1 Telemetry Dashboard
SilverWall is transitioning to a SpacetimeDB-powered reactive engine. It provides ultra-low latency F1 telemetry, session tracking, and historical data with zero polling overhead.
The backend dynamically identifies the "Active Season" based on Supabase data. As soon as you seed a new season, the entire app transitionsβno code changes required.
- Dynamic Results: The
/api/resultsendpoint is 100% database-drivenβno more hardcoded placeholders. - Standings Sync: Automated pipelines fetch official positions and update championship standings.
- Track Learning: Autonomously captures and saves new circuit geometry during live sessions.
SilverWall features a dual-layer Discord integration:
-
Automation (Webhooks):
silverwall_automation.ymltriggers every 3 days.- Posts a rich, automated report to your designated channel.
- Includes health status, leaderboard, and next race countdown.
-
Interaction (Slash Commands):
/status: Check system health & next race./standings [year]: Get live or historical championship standings./results: Get detailed podium results of the last completed race./champions: See world champions of the latest completed season./next: Get countdown and location for the upcoming Grand Prix.
silverwall/
βββ π backend/ # FastAPI Python Backend
β βββ main.py # FastAPI app entry point with CORS
β βββ database.py # Supabase client initialization
β βββ models.py # Pydantic models for API responses
β βββ requirements.txt # Python dependencies
β βββ vercel.json # Vercel serverless deployment config
β βββ Procfile # Railway/Heroku deployment
β β
β βββ π routes/ # API Endpoint Handlers
β β βββ status.py # /api/status - Race status & countdown
β β βββ standings.py # /api/standings/* & /api/champions
β β βββ track.py # /api/track/{circuit} - SVG geometry
β β βββ results.py # /api/results & /api/season/races
β β βββ discord.py # /api/discord/interactions - Bot handlers
β β βββ commentary.py # /api/commentary - AI race commentary
β β βββ radio.py # /api/radio - Team radio messages
β β
β βββ π migrations/ # Supabase SQL Migrations (Consolidated)
β β βββ 001_create_tables.sql # Core schema (seasons, races, standings)
β β βββ 002_historical_2024.sql # Complete 2024 season data
β β βββ 003_historical_2025.sql # Complete 2025 season data
β β βββ 004_seed_2026_season.sql # 2026 season opener kickoff
β β βββ 005_seed_tracks.sql # Bootstrap track geometry maps
β β
β βββ π pipeline/ # Automation Scripts
β β βββ seed_tracks.py # Seed track geometry to Supabase
β β βββ ingest_results.py # Fetch & store race results from OpenF1
β β βββ health_keepalive.py # Supabase keepalive + Discord alerts
β β βββ register_commands.py # Register Discord Slash Commands
β β βββ fake_monza_timeline.py # Test timeline generator
β β
β βββ π websocket/ # WebSocket Handlers
β β βββ telemetry_ws.py # Real-time telemetry streaming
β β
β βββ openf1_fetcher.py # OpenF1 API client
β βββ gemini_fetcher.py # Gemini AI integration for commentary
β
βββ π Silverwall UIUX design system/ # React Frontend (Vite + TypeScript)
β βββ index.html # HTML entry point
β βββ vite.config.ts # Vite configuration
β βββ tailwind.config.js # Tailwind CSS configuration
β βββ package.json # NPM dependencies
β β
β βββ π src/
β βββ main.tsx # React entry point
β βββ App.tsx # Router configuration
β β
β βββ π pages/ # Route Pages
β β βββ Landing.tsx # Home page with race card & countdown
β β βββ TelemetryLive.tsx # Live telemetry pit-wall dashboard
β β βββ DesignSystem.tsx # Component library showcase
β β
β βββ π components/ # Reusable UI Components
β β βββ ResultsModal.tsx # Season results modal (standings, races)
β β βββ CountdownOverlay.tsx # Race countdown overlay
β β βββ SeasonCountdown.tsx # Off-season countdown display
β β βββ CommentaryPanel.tsx # AI-generated race commentary
β β
β βββ π hooks/ # Custom React Hooks
β β βββ useRaceStatus.ts # Fetches race status from /api/status
β β βββ useChampions.ts # Fetches champions from /api/champions
β β βββ useStandings.ts # Fetches standings from /api/standings
β β βββ useTrack.ts # Fetches track SVG from /api/track
β β βββ useTelemetry.ts # WebSocket telemetry hook
β β
β βββ π styles/ # Global Styles
β βββ index.css # Tailwind imports & custom styles
β
βββ π .github/
β βββ π workflows/
β βββ deploy-pages.yml # Frontend deployment
β βββ silverwall_automation.yml # Automated health check task
β
βββ π docs/ # Documentation
β βββ API.md # API endpoint documentation
β βββ ARCHITECTURE.md # System architecture details
β
βββ README.md # This file
βββ CHANGELOG.md # Version history
βββ DEPLOYMENT.md # Deployment instructions
βββ Dockerfile # Container deployment
βββ railway.json # Railway deployment config
graph TD
A[OpenF1 API] -->|Live Telemetry| B[FastAPI Backend]
S[(Supabase DB)] <-->|Schedules/Standings/Tracks| B
B -->|REST API| F[React Frontend]
B -->|WebSocket| F
G[GitHub Actions] -->|Trigger| H[Health Sentinel]
H -->|Ping| S
H -->|Report| D1[Discord Webhook]
U[Discord User] <-->|Slash Commands| B
B <-->|Interactions| D2[Discord Bot]
| Table | Description |
|---|---|
seasons |
Year, champion driver/constructor |
races |
Race schedule (date, circuit, status) |
race_results |
P1-P10 results for each race |
driver_standings |
Points, wins, position per driver |
constructor_standings |
Team championship standings |
tracks |
Circuit geometry (SVG path data) |
SilverWall uses an idempotent "Delete-then-Insert" migration strategy. This means you can run these scripts multiple times to reset your data to a clean state without hitting unique constraint errors.
Run the migrations in the following order in your Supabase SQL Editor:
001_create_tables.sql: Core schema (tables & constraints).002_historical_2024.sql: Full 2024 archive (Standings & Podium Results).003_historical_2025.sql: Full 2025 archive (Standings & Official Results).004_seed_2026_season.sql: 2026 Season Kickoff (Upcoming events).005_seed_tracks.sql: Bootstrap Track Maps (Geometry data).
Create backend/env/.env.supabase:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...Create Silverwall UIUX design system/.env:
VITE_API_URL=http://localhost:8000Backend:
cd backend
pip install -r requirements.txt
python -m uvicorn main:app --reload --port 8000Frontend:
cd "Silverwall UIUX design system"
npm install
npm run dev -- --port 3000| Endpoint | Method | Description |
|---|---|---|
/api/status |
GET | Race status, countdown, next event |
/api/champions |
GET | Current season champions |
/api/standings/drivers/{year} |
GET | Driver championship standings |
/api/standings/constructors/{year} |
GET | Constructor standings |
/api/season/races/{year} |
GET | Race schedule with podium results |
/api/track/{circuit} |
GET | Track SVG geometry |
/api/results |
GET | Latest race results |
/api/discord/interactions |
POST | Discord Bot slash command gateway |
| Secret | Description |
|---|---|
SUPABASE_URL |
Your Supabase Project API URL |
SUPABASE_SERVICE_KEY |
Service Role Key (write access) |
DISCORD_WEBHOOK_URL |
Discord health channel webhook |
DISCORD_APP_ID |
Discord Bot Application ID |
DISCORD_PUBLIC_KEY |
Discord Bot Public Key |
DISCORD_BOT_TOKEN |
Discord Bot Auth Token |
| Platform | Config File |
|---|---|
| Vercel | backend/vercel.json |
| Railway | railway.json |
| Docker | Dockerfile |
- Autonomous Season Transitions
- Dynamic Track Map Learning
- Automated Standings Ingestion
- Off-Season Countdown Display
- Two-Way Discord Interaction Engine
- AI-Powered Race Strategy Predictions
- Multi-Driver Multi-View Layout
- Lap Time Comparison Charts
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS |
| Backend | Python, FastAPI, Pydantic |
| Database | Supabase (PostgreSQL) |
| Real-time | WebSocket, OpenF1 API |
| AI | Google Gemini (Commentary) |
| CI/CD | GitHub Actions |
MIT License | Built with passion for F1 Engineering.
ποΈ SilverWall β Where Data Meets the Track