Host and operate
Known limitations and scope decisions
The creator panel, settings, public board, eight registered themes, and Studio are connected to the Worker/D1/Durable Object system. This page separates remaining limitations from implemented behavior; the documentation index links operating and extension guides.
Remaining limitations#
- Invite-card revocation: pending-invite Revoke currently dismisses local UI state, not the server-side invitation. Remove that moderator's board access or replace the invitation through the owner API to invalidate it. Do not rely on dismissing the card as a security control. See security.
- Undo adjudication: recorded outcomes and their ledger effects have no compensating undo transaction. The result-screen Undo control is disabled.
- Voter detail: ballots persist trusted voter IDs for enforcement, but projections expose aggregate totals rather than a browsable voter list. Drawers must not invent identities.
- Historical drill-down: round totals, challenge-win counts, streaks, and Challenger played/won totals are available. The current history projection does not provide a complete historical task list for each round.
- Generic-run archive: the coordinator stores the current definition/run and accepted-event markers, not an append-only full event log. Starting another generic run replaces the current one; product-session replacement clears coordinator storage. Generic runs are not archived into D1 automatically.
- Unattended show automation: reference-show auto-next and automatic ballot-close requests run in an open creator panel. D1 rejects late votes, but there is no DO alarm advancing that entire show flow while all panels are closed. Generic metric-run countdown/deadline alarms are separate.
- Optional overlay data: enabling a widget does not provision sponsor data, follower goals, or game telemetry. Live widgets render only available public data. Studio can demonstrate data that has no current production source/configuration UI.
- Game support: the reporter and example adapter are provider-neutral. There is no built-in universal gameplay/video verifier or claim of a working Fortnite/skateboarding telemetry integration.
- AI cost controls: parsing/naming default on and can incur charges locally or remotely. Feature switches exist, but the app has no per-board hard spending budget. Configured provider status is not a paid inference/credit-balance check.
- Runtime theme uploads: themes are compiled React/CSS with bounded primitive settings. There is no arbitrary uploaded HTML/JS/CSS theme execution or ZIP installer.
- Public-page privacy: disabling the scoreboard page does not protect the public state/API or OBS source. Do not place private information in broadcast fields/assets.
- Credential hardening: saved Twitch app/signing secrets are D1 strings without application-level encryption. OAuth tokens are currently transient, not persisted; there is no background refresh-token/subscription-repair service.
Implemented behavior#
- Inbox persists across rounds. Suggestions received outside open intake, unshortlisted ideas, and losing candidates remain board-scoped and can rejoin collecting sessions.
- Draft editing and deselection work while collecting. Pending/approved tasks can be edited; voting locks drafts. Original request/attribution are preserved by the reference editor.
- Pause/resume is authoritative. Show attempts persist paused timestamps in D1 and project them to OBS; generic runs also have engine-owned pause/resume.
- Round titles persist. Manual naming works without AI; regeneration checks the switch and avoids bounded recent names for that round with deterministic fallback.
- Round rollover updates overlays. Old session sockets close, the live source clears stale run state, and reconnect resolves the board's new active session.
- Cancel and board deletion exist. Cancel replaces the current contest while preserving unfinished Inbox ideas. Delete removes the board's data/assets/access; it is not an undoable reset.
- Existing-board sign-in routes correctly. The app prefers an explicitly selected completed accessible board, otherwise the first completed accessible board, before requiring setup.
- Pending feedback is part of the creator flow. Network-backed actions show loading/disabled states. This is per-client feedback, not a distributed lock or blanket endpoint idempotency guarantee.
Deliberate scope choices#
- Auto-next delay is persisted per board, but the countdown is local to the operator panel. Keep one panel driving it or advance manually.
- Ballot size/duration are snapshotted per ballot; board defaults only seed that choice. Each viewer gets a distinct-vote allowance equal to selected challenge count.
- Board colors are server-owned; local browser state caches appearance and Studio workstation preferences. Studio Game/Events remain mock-only, while theme/settings/elements persist to D1.
- Moderators can inspect/simulate Studio but cannot save owner appearance settings. The Worker rejects unauthorized writes regardless of controls shown.
- The public scoreboard polls every 15 seconds; OBS uses its public bootstrap/WebSocket source. Public projections exclude administrative credentials.
- Eight themes/fonts are eagerly registered. Unknown saved theme IDs fall back to Broadcast. The resulting initial bundle has a size warning; no code-splitting change is claimed by the documentation work.
Use the release checklist before a broadcast. The product plan describes design intent and is not an implementation checklist.