tchella.tech
How Chess Practice was built
A record of the reference, the choices, what shipped in v1, and what is parked. The same notes live in the repo as docs/PROCESS.md.
Back to the boardThe reference
Two links: the GPL project frank-otto/grok-bot-chess-3d, and the live board at frank-otto.github.io/grok-bot-chess-3d. It is a browser game. Three.js bots with personalities, a weak minimax opponent called Grok Bot, and Stockfish 19 as a coach that never moves the pieces. Useful pieces of that design: three candidate moves, motif names (fork, pin, skewer, discovered attack, mate), a hint that hides the move, 25 preset positions (8 openings, 9 tactics, 8 endgames), and a post-game list of the worst moves. The public “ask the coach” box is canned pattern matching, not a model. The whole repo is GPL-3.0 because it bundles Stockfish.
What this one is
Chess Practice is a study board for the Play shelf on tchella.tech, next to Domino Practice and Carrom Practice. It is not a clone of the 3D bots. The orbit camera fights a phone, and the piece personalities are that project’s signature. No source from that repo was copied. Famous positions (Lucena, Philidor, smothered mate, the Queen’s Gambit) are chess, not their text.
Three modes, one board:
- Drill — 25 lessons. A hint ladder. “Correct” only when the idea lands.
- Play — you against one engine at Learn, Club, or Sharp. Your move gets a grade and one sentence.
- Review — the game you just played. A bar for each move, the line, and the better move drawn on.
The hint ladder is stricter than an on/off hint: motif, then the piece, then the square, then the move. The coach never moves a piece for you. One engine does both jobs, so the opponent and the coach cannot disagree about the rules. Learn and Club sometimes play the second or third best line. Sharp plays the first.
v1, and what was parked
v1 is legal chess (castling, en passant, promotion, mate, stalemate, and the usual draws), three strengths, a live grade, the hint ladder, the 25 lessons, review of the current game, FEN copy and load, and a phone layout. Progress (finished lessons, side, strength) stays in the browser. No account.
Parked for a later version, on purpose:
- Kids language toggle.
- A model that explains a position in sentences, grounded on the engine lines so it cannot invent a move.
- PGN import and export, move sounds, opening-book names.
- 3D pieces, voice, video export, hotseat, accounts.
Keyboard shortcuts did ship: U undo, H hint, N new game, Esc clears a promotion choice.
How a grade is made
Stockfish searches with three lines. If your move is one of them, the grade is the drop from the best line to yours, in centipawns, from the side that just moved. Under 20 is best, under 50 good, under 100 an inaccuracy, under 200 a mistake, and past that a blunder. If both lines are mate for you, it stays best. If your move was not in the three lines, the engine reads the position you left behind and grades from that.
The sentence is a template, not a chat. It names a motif it can see on the board: mate, smothered mate, back rank, double check, discovered check, skewer, pin, fork, or a plain capture. If it cannot see one, it still names the better move. It will not invent a move that is not in the engine’s line.
Lessons
Nine motifs, eight endgames, eight openings. Each accepted move was checked so it is legal. Mate lessons have to be mate. The pawn breakthrough was searched to confirm b6 forces a new queen and a side push does not. The rule of the square was simulated: a4 outruns the king on f8, a3 does not. Opening lessons are two plies with a book reply, so the Italian is Bc4 and then a developing move, not a one-move quiz.
Stack, license, hosting
The board is SVG pieces on a grid, not a 3D scene. chess.js owns the rules. Stockfish 19 lite runs in a worker so the board does not freeze. Strength is a time limit plus which line is played, not a second engine.
Stockfish is GPL-3.0, and this app ships it, so this project is GPL-3.0. Keep it as its own repo. Do not fold it into a private monorepo. The license text is linked from the footer.
When it is published:
- Put the repo under the tchella-tech GitHub account and mark it GPL-3.0.
- Import it on Vercel and attach chess.tchella.tech.
- Add a Play card: “Chess Practice — drill a motif, play a graded game, see why the move was wrong.”