Der Musikclub is a PvP table game. This file is the product and client plan, not the rules. Implement matches from rules.md and comprehensive-rules.md.
Horizon:
| Phase | Session | Proof |
|---|---|---|
| Now | Standalone PvP: each DJ has their own client session | Two humans, two browsers, one match |
| Next | 3–4 seats on the same session model | Same engine, more clients |
| Later | Tournaments | Brackets and seating; not new mix rules |
There is no hotseat. One process never plays two human seats. A bot may fill a seat. It is optional. It is not the MVP.
A person opens the HTML client as their session, joins a PvP match with at least one other human session, finishes a night according to the rulebook, and may hear music caused by play.
Browser A (session) ──┐
├── match host / rules engine
Browser B (session) ──┘
→ match result per client
→ lobby / next match
Music, if present:
match event → MusicRequested → service or fixture → samples
Deck construction only as far as the rulebook’s crate needs for a playable night.
Scene flow (simple is fine):
Boot → (optional identity) → Lobby → Match → Result → Lobby
Lobby verbs are join / host PvP. Each client is one DJ. Practice vs bot is secondary.
The shell is Der Musikclub: typography, color, table layout (lines, mix, dice, owner borders). It does not implement legality; it renders GameState.
Each human DJ is a standalone session (own browser, own connection, own private hand).
GameStateCORS and HTTPS are required for a hosted client.
MusicRequested to real match events.Playback failure must not freeze the match (retry / skip music).
Each client:
Do not specify SATB, costs, or hold here.
The bot, if any, calls the same legal-action API as a human.
Usable UI for: engine exception, disconnected seat, music timeout, autoplay block, missing assets. Never a blank freeze.
Without developer intervention:
Stretch: at least one gameplay event produces audible music.
Tournaments are a later proof. Extra seats (3–4) can follow the two-session bar.
HTML client
→ session + match host (authoritative rules engine)
→ two standalone PvP sessions, one match
→ (optional) music playback
→ 3–4 seats
→ tournaments
Three proofs: