We started with a core team of five: two developers (one on the AI and streaming side, one on the web platform), a graphic designer, our operations manager and our CEO. In the second phase we added a UX/UI designer, more Laravel developers and a cloud engineer. We worked in two-week sprints with regular demos, and the founder was involved at every step.
Architecture. The system has four parts that work together. A desktop client on the player's computer captures video and audio. A streaming server receives the streams, stores them and cuts them into short segments. A set of AI analyzers checks each segment. The SzuperChess web platform shows everything to players, referees and admins. The parts talk to each other through clear APIs, so each analyzer can be improved or replaced without touching the rest.
Player client and onboarding. We built a cross-platform desktop client in .NET with Avalonia. The player logs in with their SzuperChess account, and the client walks them through onboarding. It checks that the face is visible and the light is good, then asks them to turn their head to show each ear, using computer vision to confirm each step. It then streams the webcam, screen, microphone and system audio to our server over gRPC. Referees can send messages to players during the game, and they appear on the player's screen.
AI analyzers. Each analyzer is a separate Python service that looks for one kind of risk:
- Gaze tracking: Facial landmark detection locates the eyes and pupils in every frame. The system raises an alert when a player looks away from the screen for about four seconds, keeps glancing in the same direction, or disappears from view.
- Screen blacklist (OCR): The player's screen is read with optical character recognition and checked against a blacklist the organiser can edit. It includes chess engines such as Stockfish, Komodo, Houdini and Fritz, as well as messaging apps and bots.
- Voice activity and speech detection: The audio is checked for human speech, which may mean someone in the room is helping. Speech-to-text then tries to capture what was said.
- Stress and emotion analysis: A convolutional neural network classifies facial expressions and combines them with facial landmark measurements into a stress score. Referees can use it to see how a player reacted at key moments of a game.
- Presence checks: Alerts are raised when the face is missing, more than one face appears, or the player disconnects.
Every alert includes the exact time it happened and links to the matching camera, screen and audio recordings, so a referee can check the evidence right away.
Web platform and referee dashboard. The SzuperChess website is built in Laravel. Players register, fill in a chess profile (FIDE rating, club, country, nicknames on the host sites) and join tournaments hosted on Lichess, Chess.com or Chess24. Admins manage tournaments, partners, referees and players from one dashboard. Referees get a purpose-built view. It shows a grid of live players and a real-time feed of alerts, and for any player they can open camera, screen and audio in sync. Alert markers on the timeline let them jump straight to the moment in question. They can also mark videos as seen or for later review, log incidents, chat with players, send announcements and export all alerts to a spreadsheet after the event.
Fewer, better alerts. The first live tournaments showed that raw AI output can overwhelm referees. Based on the founder's feedback from those events, we reworked the alert system around three severity levels. Red alerts, such as forbidden software on screen or a player missing for over a minute, are shown by default. Orange and green alerts are available through filters. Referees can sort players by number of serious alerts, so their attention goes where it matters.
Cloud and browser client. In the second phase we moved storage to AWS. Recordings are uploaded through short-lived secure links into a separate storage bucket for each tournament, and they are deleted automatically when the retention period ends, in line with GDPR. We also built a browser-based WebRTC client and embedded it in the SzuperChess website, so players could join without installing anything.
From one product to a platform. In early 2021 SzuperChess decided to move to a B2B model. It planned to take the same technology to other sectors, such as online exams and esports, under a new brand called Decoditive. We analysed two architectures for this: separate sites per sector (the "tentacle" model) or one shared platform with sector-specific settings. We compared code quality, scaling, hosting and development cost, and recommended the option that fitted their roadmap.
We then designed the admin controls so each session could have its own analyzers, alert thresholds and alert messages.
Privacy by design. Because the system records faces and voices, data protection was part of the design from day one. The platform includes consent management, a cookie policy, profile anonymisation when a user deletes their account, and automatic deletion of recordings.
Working with the founder. We stayed in close contact throughout the project and treated SzuperChess as if we were its in-house tech team. Beyond the agreed scope, we kept proposing improvements and new features along the way, and many of them made it into the product.