How it works
85 lessons, all engine-verified
Before any lesson reaches you, a script replays it with chess.js and Stockfish and refuses it if a single move is illegal, second-best or unwinnable.
Last updated
touch_appA verified lesson: every move you need to find here is Stockfish's top choice.
The numbers
- 85
- lessons checked
- 0
- failures
- 16
- engine search depth
- 2026-11-06
- last full run
- 37 puzzles
- 14 quizzes
- 12 opening lessons
- 9 play-it-out endgames
- 8 piece-movement games
- 5 tap-the-square drills
What the check does, lesson by lesson
- Puzzles: every move you are asked to find must be legal and Stockfish's top choice (or a checkmate), and every reply the lesson plays for the opponent must be legal.
- Endgames you play out: the start position must be legal, and Stockfish must agree it is winning (or a draw, when the task is to hold the draw).
- Openings: every move of every step must be legal from the starting position.
- Piece-movement games: the stars must be reachable, and the move target (par) must equal the true shortest route.
- Tap drills: "tap the free piece" answers must be exactly the pieces that are attacked and undefended.
- Everything: no duplicate lesson IDs, valid positions in every intro slide and question.
Why we bother
A lesson that teaches a wrong move does real damage: the student learns it, then gets punished for it in a game and stops trusting the teacher. Hand-written chess content gets this wrong more often than you'd think, usually a second move that is just as good, or a defence the author missed. Checking every position with an engine before it ships removes that whole class of mistake.
When a check fails
The check runs as a script (npm run verify:lessons). If any lesson fails, it prints the exact problem, for example "step 2: Nf7 is not the engine's best (Qg8, gap 300)", and the lesson is fixed before release. The numbers on this page come from the last full run, read when the site was built.