← Bryan Lee03 / 05

ChessGym

03 / 05 · Live · Since Aug 2026

Chess training that checks its own answers.

Puzzles, openings, and endgame drills, all checked by an engine. Import your own games, and Stockfish grades every move.

Open Chess Gym →
Made for
Club players, rated 250 to 1500
My role
Idea, design, and code
Built with
JavaScript, Vite, Stockfish 18
Status
Live · Open it
chess-gym.vercel.app
Game review on a laptop: Stockfish marks 16.Qb8+ as Brilliant
A visualization puzzle on a phone
Every move graded by Stockfish, right in the browser.Real screens from the live app. The game is the Opera Game, from 1858.
The storyAug 2026

Chess Gym started on August 22, 2026, with one rule: never teach a move that an engine hasn’t checked.

Below about 1500, games tend to turn on a hanging piece or a short tactic. So the gym trains those habits first. Missed puzzles come back on a schedule, drills are tested to be winnable, and your own games from Chess.com and Lichess get graded move by move.

The rule paid off early. When Stockfish first went over the puzzle bank, it flagged at least 15 puzzles that didn’t really win, or had a second answer that was just as good. I rebuilt them and made the check stricter.

I built it for myself first, then opened it up to friends with optional accounts. Six weeks and 169 commits later, it also has a Lab that teaches Jeremy Silman’s imbalances on a live board.

The idea
A wrong lesson is worse than no lesson. So an engine checks it first.
What makes it good06 ideas
01

Puzzles with one right answer

155 rated puzzles, from 400 to 2600, with a level picker. After each solve, a "Why it works" card explains the idea, and your rating moves.

A puzzle with two right answers teaches you nothing. A Stockfish check looks for one clearly best first move and a real win, and every line replays against the best defense on each test run.

chess-gym.vercel.app
A solved underpromotion puzzle with its "Why it works" card
02

Play it in your head

You see a position from a real game. Play the last few moves in your head, type the mate in 3, then rebuild the final position on an empty board.

It trains calculation without touching the pieces. All 120 games are real, with both players rated 2001 or higher, and each one is checked to end in a forced mate in 3. The answer box forgives phone keyboards, so "rc2+" still counts as Rc2+.

A visualization puzzle, with the first answer accepted
03

Openings with reasons

Seven repertoire chapters, 36 lines in all, drilled one move at a time. Each move says why it’s played, what the other side wants, and which principle is at work. Eight more courses add 224 decision drills.

You learn the plan behind each move instead of memorizing a string of moves. The book reply plays itself after a short pause, and each line keeps its own review schedule, so one slip brings that line right back.

chess-gym.vercel.app
The Italian Game, with the reason for the next move
04

Endgames you can actually win

13 drills against an engine that defends well: basic mates, the Lucena and Philidor positions, opposition, and more. A stalemate or a draw by repetition counts as a miss.

If you fail a drill, the mistake is yours. Every start position is tested first, and seven drills get replayed by engine self-play on every test run.

chess-gym.vercel.app
The Lucena drill, four moves in
05

Your own games, graded

Import games from Chess.com or Lichess by username, or paste one in. Stockfish 18 grades every move, from Brilliant to Blunder, with accuracy for both sides and the top three engine lines.

The engine runs on your own device, so there’s no server to wait on and no account to make. Your misses turn into puzzles that come back after 1, 3, 7, 16, and 40 days, so you end up drilling the exact mistakes you make.

Game review on a phone: 16.Qb8+, Brilliant
06

The Imbalance Lab

Jeremy Silman’s book How to Reassess Your Chess, turned into seven lenses you lay over the board: pawns, squares, files, space, pieces, king, and plan. It comes with a nine-chapter course, a guided tour, and an X-ray for any position.

Every highlight is worked out live from the pieces, so it works on any position you bring, even from your own games. Every claim in the lessons is checked against that same analysis, and the lessons never quote the book.

chess-gym.vercel.app
The Lab with the Plan lens on
The look06 colors
  • Ground#0e1013
  • Surface#1b1f26
  • Text#f2f3f5
  • Gold#d2a24c
  • Board light#ebecd0
  • Board dark#779556

Inter for the app, a book serif in the Lab, and monospace numbers.

Borders instead of shadows. Gold only shows up in three places: where you are, the move to play, and the main button. Move grades always have a label and a symbol, so you can read them without seeing color.

Try itA working demo · made-up data

White to move. One knight move wins something big.

Wrong moves get a hint. Like the real app, the puzzle keeps its name hidden until you solve it.

Chess GymFind the best move
The small stuff06 details
  • Pieces slide

    A piece slides from where it stood instead of blinking onto its new square. Make your next move mid-slide, and it picks up from there.

  • The name stays hidden

    A puzzle shows only "Puzzle · 1500" until you solve it, because the name would give the tactic away.

  • Fair mate puzzles

    Any checkmate solves a mate puzzle. A slower forced mate gets a free retry, with no rating loss.

  • Tap, drag, or type

    The board takes all three, keyboard included. The promotion picker opens on the square itself, with the queen closest.

  • No blank screen

    While the code loads, plain CSS draws an empty board, so the first thing you see already looks like the app.

  • Boards from a real chess set

    Seven boards and six piece sets, based on the Nymzo Stanton Series 01, load before the first board draws.

Under the hoodJavaScript, Vite, Stockfish 18
  • Plain JavaScript modules and Vite, with no UI framework. The only runtime library is the Supabase client, for optional sign-in.
  • There are two engines. A built-in engine plays the bots and checks the lessons. Stockfish 18 runs as WebAssembly in a background worker, right in the browser, to grade your games.
  • The built-in move generator matches the published counts of legal positions, like 197,281 positions four half-moves deep from the start.
  • Guest mode keeps everything in the browser. Signing in syncs one table, and row-level security keeps each player to their own rows.
  • Lessons are plain data. Checker scripts prove that every position is legal, every move is legal, and every goal can be reached.
  • Credits: the board and the move grades follow Chess.com, the pieces are the Cburnett set, the visualization games come from the free Lichess puzzle database, and Stockfish is open source.
Started
Aug 2026
Commits
169
Checks per test run
17,703
Lines of code
25,696
Rated puzzles
155
Mate-in-3 games
120