Young fans are drifting away from live matches. Most of them watch with a second screen open just to follow the stats, so their attention is split between the game and their phone.
The story
01
Fans split their attention
Most young fans watch with a second screen open, just to follow the stats.
02
One stream for everything
We put the match, the analysis and the conversation in one place.
03
Detect
A fine-tuned YOLO model finds every player and the ball in each frame.
04
Track
ByteTrack keeps each player's ID stable from frame to frame, even through crowds.
05
Analyse
Positions and detected events become heatmaps and overlays drawn onto the match.
06
Ask the match
Questions route to the language model, web search or the live match feed.
07
Shipped everywhere
Web, iOS and Android on one pipeline, tested end to end before launch.
What we built
The work that made it.
Computer vision on the live match
A fine-tuned YOLO model finds the players and the ball, ByteTrack keeps their IDs frame to frame, and detected events trigger the overlays.
Analysis drawn onto the stream
Tracking boxes and heatmaps appear right on the match video, so fans see the story of the game without leaving it.
A chatbot that knows the match
Every question is routed: general football to the language model, fresh news to web search, live numbers straight from the match feed, with a fallback to search when it's unsure.
Shipped on every screen
Web in Next.js, iOS and Android in React Native, with the web and auth API, the chatbot API and the video CDN deployed separately.
Tested end to end
Unit and integration tests, load testing with JMeter and security scanning with OWASP ZAP before launch.
How it works
Step by step.
01
Detect
Fine-tuned YOLO finds every player and the ball in each frame.
02
Track
ByteTrack keeps player IDs stable from frame to frame.
03
Analyse
Detected events and positions become heatmaps, stats and overlays.
04
Stream and answer
The processed match streams to fans, and the assistant answers questions from live data.
Frames→YOLO→ByteTrack→Events→Overlays→Stream
Questions take a separate path: a router sends each one to the language model, web search or the live match API, and falls back to search when the answer is uncertain.