# 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
- [ ] Fastlæg MVP for Spil 1 (`Fup og Fakta`)
- [x] Midlertidige defaults sat (X/Z, spillerantal)
- [ ] Fastlæg anti-cheat regler (fx ingen identiske løgne)

### 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`
- [ ] Lobby: host opretter session, spillere joiner via kode
- [ ] 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) 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
