Neva. От компьютерного клуба до киберспортивной платформы

Neva начиналась с практической задачи: проводить собственные киберспортивные турниры и не собирать процесс вручную из таблиц, чатов и отдельных игровых сервисов.
Но полноценный турнир — это не только список участников и финальный матч. Необходимо зарегистрировать игроков, собрать команды, сформировать сетку, назначить расписание, создать игровые лобби, зафиксировать результаты и сохранить статистику.
Так внутренняя система компьютерного клуба постепенно превратилась в самостоятельную платформу для игроков, команд и организаторов.
Проект в фактах
- Что сделалиКод-ревью, рефакторинг, продуктовая и дизайн-супервизия, разработка новых модулей
- ПродуктВеб-платформа для игроков, команд и организаторов киберспортивных турниров
Проект уже существовал. Управляемость — не совсем
Мы подключились не к чистому листу. У Neva уже были кодовая база, дизайн и часть функциональности.
Полностью переписывать продукт означало бы потерять время и работающие наработки. Продолжать разработку без предварительного разбора — накапливать новые проблемы поверх старых.
Поэтому начали с технического и продуктового погружения:
- провели код-ревью существующей системы;
- разобрали взаимосвязи между разделами;
- определили участки для рефакторинга;
- помогли уточнить пользовательские сценарии;
- проверяли дизайн-решения с точки зрения логики и реализации;
- после этого приступили к разработке новых модулей.
Цель
Создать платформу, в которой игроки, капитаны команд и организаторы смогут пройти весь путь турнира — от регистрации до результатов и статистики.
Задача
Стабилизировать существующую разработку, привести кодовую базу в состояние, пригодное для дальнейшего развития, и реализовать ключевые продуктовые сценарии: команды, профили, турнирную сетку, расписание, общение и связанные состояния матчей.
Не авторы интерфейса, но участники продуктового решения
Визуальный дизайн платформы разрабатывала команда клиента. Круто выступали в роли технических и продуктовых супервайзеров.
Мы помогали проверять:
- соответствует ли экран реальному сценарию турнира;
- учтены ли роли игрока, капитана и организатора;
- что происходит в пустых, промежуточных и ошибочных состояниях;
- как меняется интерфейс до, во время и после матча;
- можно ли реализовать предложенную механику без конфликтов с остальной системой;
- как сценарий будет работать на разных устройствах.
Так дизайн оставался работой клиентской команды, а мы помогали сделать его логичным, реализуемым и связанным с настоящими правилами киберспорта.


Не снести старое, а вернуть продукту возможность расти
Legacy-проект нельзя безопасно развивать, пока команда не понимает, какие части системы зависят друг от друга.
После код-ревью мы провели рефакторинг существующей базы и подготовили её к развитию новых разделов. Работа шла параллельно с продуктовым разбором: изменение одного сценария могло повлиять на команды, матчи, сетку, расписание и права пользователей.
Ключевой принцип — не переписывать всё ради переписывания, а постепенно отделять рабочие части системы от тех, которые мешали дальнейшей разработке.




От первого профиля до последнего раунда
Платформа объединяет несколько ролей и десятки связанных состояний. Если один шаг работает неправильно, турнир останавливается целиком.
Поэтому модули нельзя было проектировать и разрабатывать изолированно.
- Игрок регистрируется и связывает профиль с игровой учётной записью
- Создаёт команду или присоединяется к существующей
- Выбирает турнир по дисциплине, региону и формату
- Команда подтверждает участие
- Система формирует сетку и расписание
- Участники переходят в лобби и готовят матч
- После игры обновляются результаты и статистика
- История остаётся в профилях игроков и команд
Одна страница — весь контекст соревнования
Страница турнира объединяет информацию, которая нужна участникам на разных этапах:
- параметры и статус турнира;
- организатора, регион и формат;
- регистрацию и подтверждение участия;
- список команд;
- турнирную сетку;
- расписание матчей;
- регламент;
- общий чат.
Предстоящие, активные и завершённые турниры получили разные состояния. Пользователь видит не только информацию о соревновании, но и своё следующее действие.




Уже начали сложный продукт и застряли в легаси?
Разберём кодовую базу, восстановим логику продукта и поможем продолжить разработку без бессмысленного переписывания всего проекта.
Математика турнира, понятная человеку
Сетка должна учитывать количество команд, формат соревнования, результаты матчей и переход участников между раундами.
Мы разработали отображение пар, этапов и результатов так, чтобы пользователь мог быстро понять:
- кто с кем играет;
- какой раунд идёт сейчас;
- кто уже прошёл дальше;
- какой матч завершён;
- где ещё не определены участники;
- когда состоится следующая игра.
Сетка связана со страницами матчей и расписанием: результат одной встречи влияет на последующие пары и дальнейшее движение турнира.


Когда матч нельзя сыграть вовремя
Расписание киберспортивного турнира меняется: команды договариваются о переносах, капитаны отправляют заявки, а организатор должен контролировать доступные интервалы.
Мы разработали календарную систему с дневным и недельным представлением, временными слотами и разными ролями пользователей.
Сценарий переноса включает:
- Выбор матча.
- Предложение новой даты и времени.
- Отправку заявки другой стороне.
- Подтверждение или отклонение капитаном либо организатором.
- Обновление расписания.
- Системные уведомления для участников.




CS2 и Dota 2 требуют разной логики
У разных дисциплин отличаются правила, данные и подготовка к матчу. Поэтому одну универсальную страницу нельзя было просто наполнить разными картинками.
CS2
В матчах учитываются карты, стороны T и CT, формат серии, процесс выбора и исключения карт, результаты раундов, статистика и демо-записи.
Dota 2
Для Dota 2 важны стороны Dire и Radiant, очередность выбора, герои, стадии pick/ban и собственный набор статистических показателей.
При этом обе дисциплины должны оставаться частями одной платформы с общей логикой статусов, команд и турнирных переходов.


Матч начинается до подключения к серверу
Лобби координирует подготовку команд к игре. Здесь участники подтверждают готовность, определяют очередность действий, выбирают карты и стороны, получают параметры сервера и переходят к матчу.
В макетах предусмотрены:
- составы обеих команд;
- капитаны и роли участников;
- таймеры и обратный отсчёт;
- coin flip;
- выбор первой или второй очереди;
- T/CT для CS2;
- Dire/Radiant для Dota 2;
- выбор и исключение карт;
- название и пароль сервера;
- состояния загрузки и ожидания.
Это один из наиболее насыщенных логикой разделов: действия одной команды определяют доступные действия другой.

Игрок — не строка в турнирной таблице
Мы разработали разделы, в которых пользователь существует и за пределами конкретного матча.
Профиль игрока
В профиле можно показать игровую историю, последние матчи, публикации, медиа, друзей и связанные игровые аккаунты.

Страница команды
Командный раздел объединяет состав, игроков, тренеров, менеджеров, спонсоров, историю, активные и прошедшие турниры, а также статистику по дисциплинам.

Общение
В платформе предусмотрены личные и групповые чаты, заявки в друзья, сообщения команды и инструменты управления участниками беседы.

Круто подключились к существующей платформе и помогли команде перейти от разрозненного legacy-решения к управляемой разработке:
- провели код-ревью;
- выполнили рефакторинг;
- помогли уточнить продуктовую логику;
- консультировали дизайн-команду;
- разработали ключевые турнирные модули;
- связали команды, профили, расписание и сетку;
- учли разные сценарии CS2 и Dota 2;
- подготовили систему к дальнейшему развитию.
Это кейс не про красивый запуск с чистого листа. Он про более сложную работу: войти в чужой код и логику, сохранить полезное и довести продукт до следующего этапа.
Можно ли развивать легаси, не переписывая весь продукт?
Если существующая база содержит рабочие сценарии и полезную бизнес-логику, переписывание может оказаться дороже и рискованнее. Решение принимается после код-ревью: нужно понять структуру зависимостей, качество критичных модулей и стоимость дальнейшей поддержки.
Да. Мы можем провести аудит, предложить план стабилизации, взять в работу отдельные модули или подключиться к дальнейшему развитию продукта. Главное — заранее разделить зоны ответственности.
Потому что за ней стоит логика результатов, раундов, форматов соревнования и переходов команд. Изменение результата одного матча может перестроить несколько последующих этапов.
У дисциплин разные правила подготовки и проведения матчей: карты, стороны, герои, pick/ban и статистика. Общая оболочка помогает сохранить целостность продукта, но внутренняя логика должна учитывать особенности каждой игры.
Лобби управляет подготовкой матча: проверяет участников, распределяет роли, запускает выбор карт и сторон, передаёт параметры сервера и синхронизирует действия двух команд.
Да. Разработчики видят зависимости, роли и пограничные состояния, которые не всегда заметны на отдельных макетах. В Neva мы не создавали визуальный дизайн, но помогали проверять и уточнять продуктовую логику.
Начинать с анализа зависимостей и разделять продукт на самостоятельные зоны ответственности. Новый модуль должен подключаться к существующим данным и ролям через понятные правила, а не встраиваться в код точечными исключениями.
Другие крутые кейсы

Tuborg. Бренд-сайт, который открывает больше
Спроектировали яркий мультиязычный сайт, объединив продуктовую линейку, историю бренда, музыку, события и интерактивные механики.

Concept Catering. Кейтеринг, который начинается с диалога
Пересобрали digital-образ бренда: разработали дизайн и сайт, подключили админ-панель, ИИ-консьержа и комплексное SEO-продвижение.









