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, Track Geometry, Season Races, and Championship Standings have been successfully migrated to SpacetimeDB and fully integrated into the frontend. The migration is complete and available for review on the feat/spacetime-standings-migration branch before being merged into main.
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
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