Captures all brainstormed decisions: - Pluggable game cartridge platform (GameDriver interface) - Celery + Redis timer-driven phase transitions - Session owner play/pause/exit controls (no skip) - Escalating scoring per round, incremental reveal scoring - Emoji reactions during guess phase → post-game awards - Relational per-user config presets with game-specific models - Ephemeral game state (no persistence after exit/finish) - Full WebSocket event reference and data lifecycle Also: updated TODO.md (WebSocket done, persisted answers done), created CLAUDE.md, and PROMPT.md for ralph-loop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
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, default max 5 (MVP)
- 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) — sedocs/F0_MVP_FUP_OG_FAKTA.md - Midlertidige defaults sat (X/Z, spillerantal)
- Fastlæg anti-cheat regler (fx ingen identiske løgne) — se docs/F0_ANTI_CHEAT_RULES.md
Fase 1 — Monorepo + Django skelet
- Opret Django-projekt (
partyhub) - Opret apps:
core_admin(global administration)fupogfakta(Spil 1)lobby(room/session/player join flow)realtime(app-skelet oprettet — consumers/routing IKKE implementeret endnu)voice(fælles voice-acting interface — stub)
- Miljøfiler (
.env.test,.env.prodskabeloner) - Konfig for MySQL test/prod
Fase 2 — Domænemodel (MVP)
GameSession(kode, host, status)Player(nickname, session, score)RoundConfig(kategori, K spørgsmål, point korrekt, point bluff)CategoryQuestion(prompt + korrekt svar + kategori)LieAnswer(spillers løgn)Guess(hvilket svar spiller valgte)ScoreEvent(auditérbar pointslog)
Fase 3 — Spilflow Fup og Fakta
- Lobby: host opretter session, spillere joiner via kode (REST)
- Runde starter med kategori (REST)
- Spørgsmål vises -> alle skriver løgn inden X sek (REST)
- System blander korrekt svar + løgne (persisted i JSONField, anti-cheat dedup)
- Guessfase: alle gætter inden Z sek (REST)
- Pointudregning (konfigurerbar pr. runde, ScoreEvent audit trail)
- Scoreboard + næste spørgsmål/runde (REST)
- Slutresultat (REST)
- WebSocket push af phase-events til host + spillere (GameConsumer + broadcast.py, InMemoryChannelLayer i tests)
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
- 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) Persistér mixed svarrækkefølge pr. round question — DONE (JSONField + migration 0003 + test)
- (Need-to-have) Tilføj spiller-auth/session-token for submit_lie (pt. baseret på player_id i payload)
- (Nice-to-have) Endpoint til status/progress i løgnfasen (antal indsendt ud af total)
- (Need-to-have) Fjern ubrugte scaffold-imports i core_admin/, realtime/, voice/*, fupogfakta/views.py (kør
ruff check --fix) så CI quality gate er grøn - (Need-to-have) [Issue #251] Release-often lane: SPA MVP opdelt i 3 merge-klare micro-PR batches (plan + acceptance criteria dokumenteret i
docs/ISSUE-251-RELEASE-OFTEN-SPA-MVP-BATCH-PLAN.md). - (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
PO-beslutninger (2026-02-27)
- MVP: Første spil (Fup og Fakta) skal være spilbart end-to-end og stabilt.
- Realtime: WebSocket er krav i MVP (ingen polling).
- Join: kun i LOBBY i MVP (viewers senere).
- Sikkerhed: sanitised inputs + server-side validering + fairness logging er hard requirement.
- Spillere: default max 5, minimum 3 for start (konfigurerbart).
- Se detaljer: coordination/PO_DECISIONS_2026-02-27.md.