# TODO — Weirsøe Party Protocol (Django) ## Projektmål Byg **Weirsøe Party Protocol**: en dansk party-webapp platform ala Jackbox, hvor spil vises på storskærm/web, og spillere deltager via mobil. ## Navne - **Platform/repo:** `weirsoe-party-protocol` - **Spil 1 (inspireret af Fibbage):** `Fup og Fakta` (django-app slug: `fupogfakta`) ## Teknologivalg (besluttet) - Backend: **Django 6.0.2** - Realtid: Django Channels + Redis (websocket til host + telefoner) - DB: MySQL (test + prod databaser i samme MySQL LXC) - Deployment: Proxmox LXC (ikke Docker) ## Midlertidige defaults (kan finjusteres senere) - Spillere: min 3, max 12 - Løgntid (X): 45 sek - Gættetid (Z): 30 sek - Login: username/password for host/admin - Join i kørende spil: session-kode ## Arbejdsaftale (kommunikation) - Giv korte progress updates intermitterende under udvikling (ikke spam). - Hvis der opdages nice-to-have eller need-to-have, skriv dem ind i TODO.md med tydelig markering. ## Faseplan ### Fase 0 — Scope + regler - [x] Fastlæg MVP for Spil 1 (`Fup og Fakta`) — se `docs/F0_MVP_FUP_OG_FAKTA.md` - [x] Midlertidige defaults sat (X/Z, spillerantal) - [x] Fastlæg anti-cheat regler (fx ingen identiske løgne) — se docs/F0_ANTI_CHEAT_RULES.md ### Fase 1 — Monorepo + Django skelet - [x] Opret Django-projekt (`partyhub`) - [x] Opret apps: - [x] `core_admin` (global administration) - [x] `fupogfakta` (Spil 1) - [x] `lobby` (room/session/player join flow) - [x] `realtime` (channels events, game state broadcast) - [x] `voice` (fælles voice-acting interface) - [x] Miljøfiler (`.env.test`, `.env.prod` skabeloner) - [x] Konfig for MySQL test/prod ### Fase 2 — Domænemodel (MVP) - [x] `GameSession` (kode, host, status) - [x] `Player` (nickname, session, score) - [x] `RoundConfig` (kategori, K spørgsmål, point korrekt, point bluff) - [x] `Category` - [x] `Question` (prompt + korrekt svar + kategori) - [x] `LieAnswer` (spillers løgn) - [x] `Guess` (hvilket svar spiller valgte) - [x] `ScoreEvent` (auditérbar pointslog) ### Fase 3 — Spilflow `Fup og Fakta` - [x] Lobby: host opretter session, spillere joiner via kode - [x] Runde starter med kategori - [ ] Spørgsmål vises -> alle skriver løgn inden X sek - [ ] System blander korrekt svar + løgne - [ ] Guessfase: alle gætter inden Z sek - [ ] Pointudregning (konfigurerbar pr. runde) - [ ] Scoreboard + næste spørgsmål/runde - [ ] Slutresultat ### Fase 4 — Voice-acting (platformkrav) - [ ] Definér TTS provider-interface - [ ] Voice-queue pr. game session - [ ] Per-spil hooks for voice lines - [ ] Konfigurerbare stemmer/sprog/hastighed ### Fase 5 — Admin & content management - [x] Django admin til kategorier/spørgsmål (grundregistrering) - [ ] Bulk-import spørgsmål (CSV/JSON) - [ ] Validering af spørgsmål - [ ] Rundeopsætning i admin (Y/K/point) ### Fase 6 — Drift/admin-app (`core_admin`) - [ ] Miljø-checks (DB, Redis, websockets) - [ ] Port/host sanity checks (read-only) - [ ] DB indeks-checks - [ ] Brugeroprettelse (username/password) ### Fase 7 — Test og kvalitet - [ ] Enhedstests for scoring/rules engine - [ ] Integrationstest for fuld runde - [ ] Reconnect-scenarier for mobilklient ### Fase 8 — Dokumentation (Gitea wiki) - [ ] Arkitektur-overblik - [ ] Setup guide (test/prod) - [ ] Spilflow for `Fup og Fakta` - [ ] Driftsguide + fejlsøgning ### Fase 9 — Secrets og DB-oprettelse - [ ] Opret databaser + brugere (`wpp_test`, `wpp_prod`) - [ ] Gem credentials i `https://gitea.weircon.dk/agw/Secrets/src/branch/main/secrets.csv` - [ ] Verificér least-privilege ### Fase 10 — Deployment i Proxmox LXC - [ ] Opret dedikeret LXC - [ ] Installér Python/venv + services - [ ] Reverse proxy/NPM + TLS - [ ] Migrations + static + health checks ### Backlog — Need-to-have / Nice-to-have - [ ] (Need-to-have) [Fejltype: CI/lint F401] [Fil/område: core_admin/*, fupogfakta/tests.py+views.py, lobby/admin.py+models.py, realtime/*, voice/*] [Branch/PR: feature/f3-lobby-create-join, feature/fase0-mvp-fup-og-fakta, feature/lobby-mvp (ingen åbne PRs fundet)] Fjern ubrugte scaffold-imports (eller kør ruff check --fix) så quality gate kan blive grøn før merge. - [ ] (Need-to-have) Rate limiting på join/submit endpoints - [ ] (Need-to-have) Session-kode brute-force beskyttelse - [ ] (Need-to-have) Audit-log for host-handlinger (start/stop/skip) - [ ] (Nice-to-have) Runde-tema musik/lyd-cues - [ ] (Nice-to-have) Hurtig onboarding-skærm for nye spillere