Каждая партия становится нарезкой лучших моментов
Завершённые партии автоматически превращаются в вертикальные клипы с лучшими моментами и публикуются в YouTube, Instagram и Discord — плюс живая трансляция доски.

Простыми словами
Самые драматичные моменты opolyx теперь выходят за пределы игры. Когда матч завершается, система находит его лучшие моменты — победа на последней секунде, банкротство, аукционная война, огромная выплата аренды — и превращает их в короткие вертикальные клипы, которые автоматически публикуются в YouTube, Instagram и Discord.
Клипы оформлены в фирменном стиле и читаются на телефоне: логотип opolyx сверху, чат внутри доски, а таблица положения снизу. Есть и живая трансляция показательных партий бот-против-бота, идущая с настоящего вещательного узла.
Для тех, кому интересны детали
Основа — путь чтения только для вещателя. Миграция 0036 добавляет profiles.broadcaster и по ИЛИ вплетает проверку is_broadcaster() в шесть SELECT-политик игровых таблиц, открывая два защищённых маршрута: /spectate (живая доска) и /replay (детерминированная свёртка воспроизведения движком по журналу событий).
Чистая функция движка оценивает лучшие моменты — победа, банкротство, крупная аренда, аукционная война, jackpot, смена лидера, обмен, телепорт — и выбирает лучшие непересекающиеся окна. Отдельный воркер apps/broadcaster рендерит каждое окно в безголовом Chromium, прогоняет его через ffmpeg в mp4, загружает в хранилище и публикует через социального провайдера плюс Discord. Он идемпотентен благодаря маркеру в хранилище, так что игровой daemon вообще не затрагивается.
// 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 untouchedБезголовый браузер клипов входит как вещатель через кодек куки Supabase, чтобы отрисовался защищённый /replay. Мост аутентификации делает то же для браузера OBS на вещательном узле, позволяя ему напрямую отрисовывать живую доску /spectate. Показательные партии заранее помечаются завершёнными, чтобы их исключить из конвейера Shorts.
