7.6 KiB
7.6 KiB
Дорожная карта
Статус на 19 июля 2026: полный versioned production-пайплайн между событием, составами, live-серией и турнирной сеткой реализован. Backend, admin roster editor, live/spectator UI, SSE и проверки контракта связаны в единый сценарий.
Завершённый контрольный рубеж — полный пайплайн скрима
- закрыть регистрацию и зафиксировать Going-участников;
- сгенерировать и выбрать вариант баланса;
- дать Admin обменивать игроков одинаковой роли и заменять их резервными;
- пересчитывать показатели после каждой ручной правки;
- подтвердить составы 1/2/2 и капитанов;
- редактировать произвольный граф Bo3 через Team / Winner / Loser и запускать все готовые пары;
- связать жеребьёвку, map draft, hero draft и результаты карт единым versioned FSM;
- блокировать обычное изменение составов после старта;
- разрешить аудируемую аварийную замену Admin;
- синхронизировать admin/live/spectator экраны через SSE;
- показывать сохранённые составы на публичной странице события после балансировки;
- уведомлять участника звуком, когда сервер передаёт ход его команде;
- покрыть переходы и конфликты версий unit-, integration- и UI-тестами.
Этап 0 — уточнение продукта
- согласовать способ оценки игроков и рейтинг по ролям;
- определить размеры команд и число одновременно создаваемых команд;
- выбрать первый формат турнирной сетки;
- подтвердить редактируемые части регламента;
- подготовить wireframes ключевых экранов.
Этап 1 — фундамент
- создать Go backend и React frontend;
- подготовить отдельный Compose для локальной разработки;
- подготовить production Compose для Coolify без пользовательских сетей;
- добавить multi-stage Dockerfile для frontend и backend;
- настроить PostgreSQL в составе production-стека, persistent volume и миграции;
- добавить healthcheck и graceful shutdown сервисов;
- описать переменные Coolify и настройку внешних резервных копий БД;
- реализовать Discord OAuth и серверные сессии;
- добавить роли Admin/Player и безопасное начальное назначение Admin по Discord ID;
- зафиксировать OpenAPI-контракт;
- реализовать базовую навигацию и дизайн-систему;
- добавить переключение RU/EN и локализовать все пользовательские строки;
- добавить автоматические проверки и тесты.
Этап 2 — игроки и балансировка
- самостоятельное заполнение профиля и рейтингов по ролям;
- выбор предпочитаемых ролей, до трёх желаемых союзников и до трёх avoid-игроков;
- календарь будущих миксов;
- статусы участия Going / Maybe / NotGoing;
- админку для событий, игроков и регистраций;
- изменение Admin статуса участия за другого игрока с аудитом;
- подтверждение списка участников Admin;
- назначение доступных ролей;
- генерация нескольких вариантов команд;
- оценка качества баланса;
- мягкий учёт ролевых, командных и avoid-предпочтений в целевой функции;
- ручная перестановка игроков с пересчётом показателей.
- назначение и переназначение капитана каждой команды.
Этап 3 — проведение серии
- создание пары команд;
- серверная жеребьёвка с прозрачным результатом;
- драфт карт по выбранному ruleset;
- бан героев с проверкой ролей и истории серии;
- фиксация победителя или ничьей каждой карты;
- автоматический счёт серии и определение победителя;
- исправление ошибочного результата с аудитом;
- синхронизация клиентов в реальном времени.
Этап 4 — турнир
- versioned drag-and-drop редактор произвольной сетки;
- автоматическое создание следующих пар по Winner/Loser-зависимостям;
- экран трансляции/зрителя;
- история результатов игрового вечера.
Этап 5 — удобство сообщества
- пресеты регламентов;
- статистика игроков и команд;
- повторная жеребьёвка с защитой от одинаковых составов;
- Discord-анонс нового микса с
@everyoneи ссылкой на регистрацию; - event-specific Discord-роли ответа и статусов Going/Maybe/NotGoing;
- обновление анонса, напоминания, публикация составов и результатов;
- идемпотентная синхронизация временных Discord team/captain и Tank/Damage/Support ролей;
- отдельные member-list группы для команд и зарегистрированных участников;
- пятиминутная глобальная сверка и восстановление managed Discord-ролей;
- создание и очистка временных командных голосовых каналов;
- импорт данных и резервное копирование.
Идеи после MVP
- режим «капитанский драфт» игроков;
- ограничения «хочу вместе» и «не ставить вместе»;
- сезонный рейтинг сообщества;
- прогноз вероятности победы и подсветка причин дисбаланса;
- голосование зрителей за карту или MVP;
- публичный overlay для стрима;
- PWA с push-уведомлением о начале матча;
- синхронизация событий с внешним календарём через iCalendar;
- библиотека версионируемых регламентов под разные патчи.