- Express + TypeScript backend with SQLite (default) or PostgreSQL support
via DB_DRIVER env var; dual-dialect migration runner with adapter pattern
- React + Vite + TailwindCSS frontend with hls.js player
- RTMP ingest via node-media-server 2.3.9 → HLS segments served by Express
- Multi-provider OIDC auth (openid-client v5) + local email/password fallback
- First-run setup page creates local admin account (invite-only provisioning)
- Valkey (Redis-compatible) session store via connect-redis
- Podman compose: default SQLite stack; --profile postgres for PostgreSQL
- Fix: CSP media-src/worker-src blob: directives required by hls.js MSE API
- Fix: video element muted for autoplay policy compliance
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>