3.1 KiB
3.1 KiB
F1 Streaming Service
What This Is
A private F1 streaming aggregation service that auto-scrapes specific streaming sites, extracts actual video source URLs through custom per-site extractors (bypassing obfuscation, CSRF, and redirect chains), and proxies the streams through a unified Svelte web app. Deployed on the existing K8s cluster.
Core Value
When an F1 session is live, users open one URL and immediately see working streams — no hunting for links across sketchy sites.
Requirements
Validated
- ✓ Kubernetes cluster with ingress, NFS storage, monitoring — existing
- ✓ Cloudflare DNS and TLS — existing
- ✓ CI/CD pipeline (Woodpecker) — existing
- ✓ Terraform/Terragrunt deployment pattern — existing
Active
- Auto-scrape configured streaming sites for live F1 stream links
- Custom per-site extractors to bypass obfuscation (CSRF tokens, JS rendering, redirect chains) and extract final video source URLs
- Stream health checks — verify extracted streams are actually live and working before displaying
- Stream proxying/relay through the service for unified playback
- Auto-pull F1 race schedule from official data (Ergast/OpenF1 API)
- Cover all F1 sessions: FP1-3, Qualifying, Sprint, Race, pre/post shows, press conferences
- Svelte web app with schedule view, stream picker, and embedded video player
- Deploy as a service on the existing K8s cluster
Out of Scope
- User authentication — security by obscurity (private URL, not publicly discoverable)
- Community features (chat, comments, voting) — just streams
- DVR/recording — live viewing only
- Mobile app — web-only
- Official F1TV integration — unofficial re-streams only
Context
- Stream sites have anti-scraping protections: CSRF tokens, JavaScript-rendered pages, obfuscated video URLs, redirect chains
- Custom extractors per site are preferred over headless browser for efficiency and reliability
- User will provide the specific sites to scrape — not a discovery/search problem
- F1 calendar data available via Ergast API (ergast.com/mrd/) and OpenF1 API
- HLS (m3u8) is the most common stream format on these sites
- Existing infra supports Svelte apps (user's preferred frontend framework)
Constraints
- Frontend: Svelte — user preference for all new web apps
- Deployment: K8s cluster via Terraform/Terragrunt stack pattern
- Storage: NFS at 10.0.10.15 for any persistent data
- No auth: Rely on non-discoverable URL, no Authentik integration needed
- Extractors: Custom per-site logic, no headless browser dependency
Key Decisions
| Decision | Rationale | Outcome |
|---|---|---|
| Custom per-site extractors over headless browser | More efficient, reliable, and lighter on resources | — Pending |
| No authentication | Private community, security by obscurity sufficient | — Pending |
| Proxy streams through service | Unified player experience, hides source from end users | — Pending |
| All sessions coverage | Users want full weekend + extras, not just race day | — Pending |
Last updated: 2026-02-23 after initialization