День змагань
Чекін, суддівство, підрахунок балів і пряма трансляція для подій 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 і автоматичним визначенням меж бою в застосунку повторів
Що це дає
Організатор приїжджає з ноутбуками й телефонами та проводить реєстрацію, суддівство, підрахунок балів і трансляцію з однієї екосистеми, з інтернетом чи без.