Files
linearvoid/.github/instructions/BACKLOG.md
T
zwitschi d2e5b64ece
CI / test (push) Failing after 57s
CI / docker (push) Skipped
CI / release (push) Skipped
fix: chat build syntax errors, disable GitHub cache on Gitea runner
- Fix 3 orphaned function bodies in main.go (handleAdminSchedule,
  handleAdminSystemSummary, probeMediaDurationSeconds) caused by
  insertions that split function headers from bodies
- Remove cache: true from setup-go and cache: npm from setup-node
  (Gitea runner times out 135s trying to reach GitHub cache API)
- Add go vet ./... step replacing placeholder echo
- Remove || echo fallback from lint (tsc --noEmit is working)
2026-08-06 18:01:34 +02:00

4.8 KiB

BACKLOG

Playout & Delivery

  • Implement FFmpeg + MediaMTX/SRS continuous HLS playout from playlist
  • Implement immutable HLS segment naming for cache-friendly delivery
  • Upload HLS segments to Cloudflare R2 via S3-compatible API
  • Implement emergency slate fallback on playout failure
  • Auto-restart loop for FFmpeg/MediaMTX on failure

Video Normalization

  • Implement video normalization pipeline (H.264/AAC, 30 fps, 2 s keyframes)
  • Implement ffprobe verification gate rejecting non-conforming files
  • Enforce normalization check before upload acceptance in admin UI

Chat Service

  • Implement WebSocket chat backend (Go) with room fan-out
  • Implement private DM channel routing
  • Implement Redis presence tracking for chat
  • Implement Redis pub/sub for multi-instance chat
  • Implement Redis rate limiting (INCR + EXPIRE windowing, >10/10s throttle)
  • Implement chat message persistence (SQLite v1, PostgreSQL migration path)
  • Implement moderation commands (/mod, /mute, /ban) in backend
  • Implement moderation audit log persistence
  • Implement graceful degradation when Redis unavailable (core chat remains up)

Frontend — Viewer SPA

  • Build static SPA with hls.js player integration
  • Build chat sidebar UI (public rooms + private DMs)
  • Implement schedule metadata display synced with playlist timeline
  • Implement responsive/mobile-friendly viewer layout

Frontend — Admin Interfaces

  • Build admin login page with session authentication
  • Build admin dashboard overview page
  • Build video upload interface with chunked upload support
  • Build playlist management interface (drag-to-reorder, validation warnings)
  • Build schedule override/management interface (CRUD + conflict detection)
  • Build user management interface (mute/unmute/ban/unban actions)
  • Build moderation dashboard (chat log, inline mod actions, CSV export)
  • Build analytics dashboard (time range selector)
  • Build system configuration/status page (config editor, restart buttons)

Infrastructure — nginx

  • Configure nginx reverse proxy with auth_request for admin paths
  • Configure nginx HLS path with CORS headers + OPTIONS preflight
  • Configure nginx WebSocket upgrade forwarding for /ws
  • Configure nginx health endpoints (/health JSON, stub_status)

Infrastructure — Docker

  • Create Dockerfiles for playout, chat, nginx services
  • Create docker-compose.yml for all services
  • Create docker-compose.prod.yml override for production

Infrastructure — CI/CD (Gitea Actions)

  • Implement CI workflow (lint, build, test, push images)
  • Implement CD workflow (pull, deploy, health checks — IP-agnostic)
  • Generate .env from Gitea secrets in CD workflow
  • Seed Prometheus config into named volume during deploy
  • Implement health check validation with retry in CD pipeline

Cloudflare Configuration

  • Configure DNS for linearvoid.tv apex and www redirect (manual)
  • Configure media.linearvoid.tv for split-domain HLS delivery (manual)
  • Create R2 bucket (manual)
  • Configure Cache Rules: .ts/.m4s + .m3u8 (manual)
  • Configure Cloudflare Pages (manual)
  • Enable Tiered Cache, WAF, rate limiting (manual)
  • Implement Worker for immutable cache headers on segment paths
  • Enforce HTTPS/WSS, redirect HTTP → HTTPS (manual)

Monitoring & Observability

  • Set up Prometheus with chat scrape target
  • Add nginx/redis/postgres/node exporters
  • Import Grafana app + operational dashboards
  • Define Prometheus alerting rules
  • Set up UptimeRobot external monitoring

Security

  • Implement admin cookie-session auth (HttpOnly, SameSite=Strict, Secure when TLS)
  • Implement server-side session expiration
  • Enforce HTTPS/WSS at edge and origin
  • Implement rate limiting for chat messages with Redis windowing

Data & Storage

  • Set up PostgreSQL/SQLite for chat history and moderation data
  • Set up Redis with append-only persistence + maxmemory policy
  • Implement daily/weekly/monthly Postgres backups
  • Implement backup integrity verification
  • Document and rehearse recovery runbook

Scaling & Performance

  • Optimize segment immutability and manifest TTL for cache efficiency
  • Measure playback TTFB from multiple US regions
  • Load-test WebSocket connections
  • Benchmark admin API p95 latency
  • Track cache hit ratio and R2 ops in production
  • Capacity trigger monitoring
  • Plan Phase 2 service separation
  • Plan Phase 3 multi-origin resilience

Documentation

  • Document API contracts in API.md
  • Document deployment runbook in DEPLOYMENT.md
  • Document monitoring setup in MONITORING.md
  • Document security model in SECURITY.md
  • Create incident runbook
  • Write Level 2/3 building block views