# Активный контекст ## Текущее состояние Собран и проверен full-stack MVP: Go API с PostgreSQL, Discord OAuth и серверными сессиями, React-интерфейс, календарь и RSVP, административные сценарии, preference-aware балансировка 1/2/2, капитаны, Bo3-драфты и результаты, single-elimination сетка, SSE и RU/EN локализация. Добавлены Docker Compose для локальной разработки и Coolify, миграции, OpenAPI-контракт и CI. ## Подтверждённые требования - сообщество из 20+ игроков; - backend на Go с Clean Architecture; - современный frontend на фреймворке; - Discord OAuth и самостоятельное заполнение игроком рейтингов Tank, Damage и Support; - выбор игроком предпочитаемых ролей и до трёх желаемых союзников; - переключение всего интерфейса между RU и EN; - календарь запланированных миксов со статусами Going / Maybe / NotGoing; - административная панель управления событиями, игроками и регистрациями; - возможность Admin отметить участие за другого игрока; - автоматическая балансировка полных команд 1 Tank / 2 Damage / 2 Support; - резерв для участников, не вошедших в полные команды; - назначение Admin капитана каждой сформированной команды; - жеребьёвка на сайте; - последовательные баны карт и героев; - серии Bo3; - фиксация исхода каждой карты, счёта серии и итогового победителя; - турнирная сетка; - production-развёртывание единым Docker Compose resource в Coolify; - PostgreSQL в том же Compose-стеке с persistent volume; - мобильный и десктопный интерфейс. ## Исходный регламент - основной Bo3: Control → Hybrid/Escort → Control; - альтернативный Bo3: Control → Push → Escort; - первый бан карт определяется жеребьёвкой; - карты банятся по очереди до одной оставшейся; - тайбрейкер Control не повторяет уже сыгранную Control-карту; - перед каждой картой команды делают по два бана героев в порядке A → B → A → B; - два бана одной команды должны относиться к разным ролям; - команда не повторяет собственный бан героя в пределах серии; - повторить героя, которого ранее банил соперник, разрешено; - первой героев банит команда, проигравшая начальный жребий. ## Предлагаемый стек - backend: Go, PostgreSQL, REST, WebSocket/SSE; - frontend: React, TypeScript, Vite, TanStack Query/Router, Tailwind CSS, shadcn/ui; - контракт: OpenAPI; - локальная инфраструктура: Docker Compose; - production: Coolify + Docker Compose без пользовательских сетей. ## Принятые решения для MVP - игрок входит через Discord; - игрок самостоятельно указывает Overwatch-ранг от Bronze 5 до Champion 1 для каждой роли; - балансировщик автоматически назначает роли и собирает команды 1/2/2; - предпочтения ролей и союзников учитываются как мягкие штрафы после требований баланса; - участники сверх полного состава остаются в резерве; - первая турнирная сетка — single elimination; - игрок отмечается на микс через календарь; - Admin может изменить RSVP за игрока, а действие сохраняет автора; - капитан назначается отдельно для каждой команды и должен входить в её состав; - исход карты задаётся как победа одной из команд или ничья; - сервер автоматически пересчитывает счёт Bo3 и победителя серии; - frontend, API и PostgreSQL разворачиваются одним Compose-стеком; - Coolify управляет сетью и публичным маршрутом, PostgreSQL хранит данные в named volume. ## Ближайший следующий шаг Развернуть тестовый экземпляр через Coolify, настроить Discord OAuth и выполнить приёмочное тестирование полного сценария на реальных аккаунтах и PostgreSQL. Открытое продуктовое решение, которое не блокирует каркас: как выбирается Hybrid/Escort для второй карты — заранее организатором, случайно или отдельным действием команд.