Side project · 2026 · Built end-to-end

Tabiya

The position you know. The move you don't.

A chess coach that explains every move in plain English — and the first thing I built to find out what AWS could actually do for me.

Why
Learn AWS by shipping something real
Stack
TypeScript · React · Stockfish · CDK
AWS
Lambda · SQS · S3 · CloudFront · EventBridge
Running cost
Inside the permanent free tier
The Tabiya dashboard: the last 7 days, games and accuracy per day, and the openings to work on next.
The dashboard, reading 181 of my own games.

I got back into chess. I played a lot, I lost a lot, and I could not say why — the games just ended. The obvious answer was a Chess.com subscription. I did not want to pay for one, and I wanted the practice more than I wanted the tool.

So I built the thing I wanted: something that watches the games I actually play against friends, names the mistake I keep repeating, and tells me the move where my opening knowledge runs out. The chess was the excuse. The real goal was to stop reading about AWS and put something live on it — a pipeline that runs on a schedule, costs nothing, and keeps working when I close the laptop.

01

A coach on every move

Play Stockfish at eight strengths. After each move the coach gives a verdict, the reason in one sentence, the move that was better, and the engine lines you can step through on the board. Every sentence is built from facts the position actually shows — a hanging piece, a fork, material won along the line — so it never claims something the board does not back up.

Play and Learn: the coach marks 3.Bc4 as a blunder, explains that the bishop is not defended well enough, gives the evaluation before and after, and lists the best line.
My blunder, named and explained, with the line I should have played.
02

Your own games, turned into patterns

It downloads my Chess.com archive, analyses every game with Stockfish, and groups the mistakes by what went wrong rather than by game. One habit at the top accounts for a quarter of my errors — which makes it the only thing worth practising this week. Each pattern carries real examples you can open on the board.

The report groups 551 mistakes into patterns: walked into a combination, missed a way to win material, strategic error, left a piece undefended, endgame technique error.
551 mistakes across 181 games, sorted by the habit behind them.
03

Openings, explained line by line

Twenty openings and forty-nine lines, each move with a reason. Learn mode walks the line; Practice mode makes you find the moves and judges the wrong ones with the engine. The report ties back into it: it knows the move where I leave the book in each opening, and sends me to that exact line.

The Sicilian Defence in Learn mode: the line list, the board with an arrow on 3.d4, and the explanation that White opens the centre to use the lead in development.
Every book move carries the reason it is played.

No server and no database. A schedule wakes a function, the functions write files, and the browser reads them.

Tabiya on AWS EventBridge triggers a Poller every 15 minutes. The Poller writes new games to S3 and puts them on an SQS queue. An Analyser Lambda running Stockfish reads the queue and writes analysis to S3. A Reporter Lambda turns the analysis into report files in S3. CloudFront serves the app and those files to the browser. EventBridge every 15 min Poller λ SQS one job per game Analyser λ · Stockfish WASM Reporter λ · patterns games analysis report S3 — one bucket data/ the games, the analysis, the report · web/ the app itself CloudFront cached at the edge Browser reads the files, no API
Five moving parts. Nothing runs while nothing is happening.

The pipeline is the product

Every stage writes a file and stops. A failed analysis retries on its own from the queue without replaying the download, and the browser only ever reads finished files — so a slow Stockfish run never makes the page slow.

Stockfish inside a Lambda

The engine runs as WebAssembly inside the function, one game per invocation, about a minute each. Roughly ninety games a month is a rounding error against the free tier.

Infrastructure as code

The whole stack is a CDK app: one command builds it, deploys it, uploads the site and clears the CDN cache. Tearing it down and rebuilding it is how I learned what each piece was actually for.