Every game becomes a highlight reel
Finished games are automatically turned into vertical highlight clips and posted to YouTube, Instagram and Discord — plus a live board stream.

In plain words
The most dramatic moments of opolyx now travel beyond the game. When a match finishes, the system finds its best moments — a last-second win, a bankruptcy, an auction war, a huge rent hit — and turns them into short vertical clips that post automatically to YouTube, Instagram and Discord.
The clips are branded and readable on a phone: the opolyx logo on top, the chat inside the board, and the standings below. There is also a live stream of bot-versus-bot showcase games running from a real broadcast box.
For the technically curious
The foundation is a broadcaster-only read path. Migration 0036 adds profiles.broadcaster and OR-s an is_broadcaster() check into the six game-table SELECT policies, unlocking two gated routes: /spectate (the live board) and /replay (a deterministic engine replay fold of the event log).
A pure engine function scores highlights — win, bankruptcy, big rent, auction war, jackpot, lead change, trade, teleport — and picks the top non-overlapping windows. A separate apps/broadcaster worker renders each window in headless Chromium, pipes it through ffmpeg to an mp4, uploads to storage, and publishes via a social provider plus Discord. It is idempotent through a storage marker, so the game daemon is never touched.
// engine: scoreHighlights() — pure, deterministic
// win / bankruptcy / big-rent / auction-war / jackpot / lead-change / trade / teleport
// broadcaster: window -> headless Chromium /replay -> ffmpeg -> mp4 -> Storage -> publish
// .done marker = idempotent; daemon untouchedThe headless clip browser signs in as the broadcaster via the Supabase cookie codec so the gated /replay renders. An auth bridge does the same for the OBS browser on the streaming box, letting it render the live /spectate board directly. Showcase games are pre-marked done so they are excluded from the Shorts pipeline.
