Competition Day
Check-in, judging, scoring and live broadcast for Fitofan events
Five apps that run a tournament on site: check-in and judging on a desktop, judge consoles on phones and tablets, a bridge to scoring hardware, phone cameras that broadcast with a live scoreboard, and multi-camera replay.
- Role
- Lead Engineer: Flutter, native iOS and Android, desktop
- Period
- 2024 – 2026


Context
Tournaments happen in sports halls with unreliable Wi-Fi, borrowed hardware and no time for setup. The Fitofan ecosystem needed its own venue software, and I built every part of it from scratch.
The challenge
Keep check-in, judging and the broadcast running when the internet drops, let any phone or tablet join by scanning a QR code, and feed results back to the platform and to third-party scoring systems.
Built across the stack
- Fitofan Core, Flutter desktop for macOS, Windows and Chromebook: check-in with payments and QR badge printing, judging for judo and MMA, draws and brackets, a second TV-screen process
- Fitofan Touch, Flutter for phones and tablets: a judge console with 10 rule sets, from WT and ITF taekwondo and WKF karate to gymnastics and breaking, with haptics and a connectivity-aware input model
- Fitofan Connect, Flutter desktop: a SQLite results database and a local HTTP API that bridges to third-party electronic scoring
- LiveOn, native Swift and Kotlin: QR-configured broadcasting to Amazon IVS with a three-layer mixer of camera, logo and live scoreboard overlay
- VR, Electron: up to four phone, USB or RTSP cameras over WebRTC, instant replay and clip cutting with ffmpeg, YouTube restream, offline licensing, signed and notarised builds for macOS, Windows and Linux
Engineering highlights
- Offline-first: a persisted outbound queue flushes to the platform when the connection returns
- A hand-written LAN protocol: UDP broadcast discovery, TCP sessions with reconnect, a loopback link to the TV window
- Scoreboard overlays rendered natively and composited into the video stream once a second
- A live scoring feed over Socket.IO drives the overlay on iOS and automatic fight-boundary detection in the replay app
What it enables
An organiser arrives with laptops and phones and runs registration, judging, scoring and the broadcast from one ecosystem, online or not.