День соревнований
Чекин, судейство, подсчёт баллов и прямая трансляция для событий Fitofan
Пять приложений, которые проводят турнир на месте: чекин и судейство на десктопе, судейские консоли на телефонах и планшетах, мост к оборудованию для подсчёта баллов, камеры телефонов, которые транслируют с живым табло, и многокамерный повтор.
- Роль
- Ведущий инженер: Flutter, нативные iOS и Android, десктоп
- Период
- 2024 – 2026


Контекст
Турниры проходят в спортзалах с ненадёжным Wi-Fi, одолженным оборудованием и без времени на настройку. Экосистеме Fitofan нужно было собственное программное обеспечение для зала, и я сделал каждую его часть с нуля.
Задача
Держать чекин, судейство и трансляцию в работе, когда пропадает интернет, дать любому телефону или планшету подключиться сканированием QR-кода и возвращать результаты на платформу и в сторонние системы подсчёта.
Реализовано на всех уровнях стека
- Fitofan Core, Flutter для десктопа на macOS, Windows и Chromebook: чекин с оплатой и печатью QR-бейджей, судейство дзюдо и MMA, жеребьёвка и сетки, отдельный процесс для второго ТВ-экрана
- Fitofan Touch, Flutter для телефонов и планшетов: судейская консоль с 10 наборами правил, от тхэквондо WT и ITF и карате WKF до гимнастики и брейкинга, с хаптикой и моделью ввода, учитывающей состояние соединения
- Fitofan Connect, Flutter для десктопа: база результатов на SQLite и локальный HTTP API, который соединяет со сторонними электронными системами подсчёта
- LiveOn, нативные Swift и Kotlin: трансляция в Amazon IVS с настройкой по QR и трёхслойным микшером камеры, логотипа и наложенного живого табло
- VR, Electron: до четырёх камер — телефон, USB или RTSP — через WebRTC, мгновенный повтор и нарезка клипов через ffmpeg, рестрим на YouTube, офлайн-лицензирование, подписанные и нотаризованные сборки для macOS, Windows и Linux
Инженерные акценты
- Offline-first: сохранённая исходящая очередь сбрасывается на платформу, когда соединение возвращается
- Собственноручно написанный LAN-протокол: UDP-обнаружение широковещанием, TCP-сессии с переподключением, loopback-связь с окном ТВ
- Накладки табло рендерятся нативно и компонуются в видеопоток раз в секунду
- Живой поток баллов через Socket.IO управляет накладкой на iOS и автоматическим определением границ боя в приложении повторов
Что это даёт
Организатор приезжает с ноутбуками и телефонами и проводит регистрацию, судейство, подсчёт баллов и трансляцию из одной экосистемы, с интернетом или без.