infra/.planning/PROJECT.md
2026-02-23 21:53:51 +00:00

66 lines
3.1 KiB
Markdown

# 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*