CoaChess
A chess coaching platform with four customer-facing surfaces, a B2B side for academies, and self-hosted live video.
| Role | CTO and co-founder |
|---|---|
| Period | 2022 to present |
| Surfaces | |
| Stack | TypeScript, React, Python |
Chess coaching is a synchronous craft. A coach and a student share a board, the coach draws on it, and the value is in the conversation happening over the position. Most learning platforms are built for asynchronous content, so they model the lesson as a video with a comment thread underneath.
CoaChess is built the other way round.
One platform, five surfaces
The landing site is where a player finds a bootcamp, a weekly group, or a coach for one to one work. The player app is where practice happens between sessions: lessons, puzzles, challenges and games. The academy app is the other side of the market, where a school schedules classes, manages its students and trainers, assigns homework and tracks progress. The live classroom is the session itself, with a shared board, video, real time annotation and replays afterwards. Behind all of them sits an internal back office.
Two of those serve players, one serves the schools that teach them, one is the lesson, and one is for us. They keep separate rhythms and share one identity and one data model.
That last part is the whole problem. A student in a group class, an academy administrator, and a coach mid-session are three different people looking at the same underlying objects, and the moment those objects diverge per surface the platform starts lying to somebody.
Video that had to be owned
The live classroom is not a video call with a chessboard beside it. Annotation, board state and speech have to stay in step, and a session has to be recoverable afterwards as a replay. That ruled out embedding a hosted meeting widget and made the real time layer something to run and operate directly, recording included.
Operating it is the cost. Owning it is what makes replays and synchronised annotation possible at all.
Architecture over time
The platform began as a set of small services, which is a reasonable shape for a team exploring a domain and an expensive one for a team shipping a product. It was consolidated into a typed front end and a Python service layer, which is where it runs today.
The interesting part of that migration was not the rewrite. It was deciding which boundaries were real and which were organisational accidents. Five surfaces sharing one data model makes that judgement permanent: a boundary drawn in the wrong place shows up four more times.