← All projects
ProductsLive site·Shipped

ChessReflex

ChessReflex teaches openings by drilling the moments where your opponent can go several ways, instead of replaying whole lines move by move. It has 61 engine-checked courses, spaced repetition review, and puzzles built from your own games. It's live on the web, and an iOS version is in progress.

Period

Jun 2026 – present

Role

Solo developer

Type

Live site

Tools

Next.jsTypeScriptTailwind CSSSupabaseDrizzleStripeStockfishchess.jsZustandVitestCapacitorVercel
Visit the site ↗Source: private

Why I built it

Most opening trainers make you replay a line from move one every time you review it. Most of those moves are forced or obvious, so you spend your time on stuff you already know. The part that's actually hard to remember is the handful of positions where your opponent can go a few different ways.

ChessReflex drills those positions and skips the rest. In the Easy Memory trainer the board sits at one of those forks. It plays one of the opponent's replies, you answer, then it snaps back and plays the next one. Across the whole library that's about 1,350 decisions to learn instead of roughly 33,700 moves to replay.

Where the courses come from

I didn't write the lines by hand. A script walks each opening with Stockfish, branching on the replies people actually play when it's the opponent's turn and taking the engine's best move on ours. A second script replays every line at depth 18 and throws out any line where our move gives up more than about a pawn and a half.

The trap courses come from crossing Lichess data on what 1600 to 2200 players actually play with Stockfish's evaluation of what it costs them. Right now there are 61 courses: 35 openings, 25 short trap courses and one community course, about 3,700 lines total.

The rest of the app

Reviews are scheduled with FSRS, a spaced repetition algorithm, and every line sits in one of four states from "don't know" to "knows." You can type in a chess.com or Lichess username and it pulls your public games, finds the first spot where you blundered, and asks you to find the move you missed. If it can't find enough of those it falls back to a pool of about 34,000 free Lichess puzzles. There are also board vision and blindfold drills, tiny forced mate puzzles called Minis, and a daily leaderboard.

It's Next.js 16, React 19 and TypeScript on Vercel, with Supabase for auth and Postgres (row level security, Drizzle for migrations) and Stockfish 18 running in the browser as WebAssembly. Billing goes through Stripe. CI runs lint, type checks, more than 1,800 Vitest tests and a production build on every push to main. Generated files like the course stats have their own tests, so they can't drift away from the actual courses.

The iOS version wraps a static export of the same code with Capacitor so it works offline. That took a few workarounds, like splitting the static build from the server build and writing a small Swift router because Capacitor sends every path to the home page. It isn't on the App Store yet.

Where it's at

It's live and it works, but it's early. Payments are still in Stripe's test mode and only a few people use it so far. Getting it in front of players matters more right now than adding features.

ChessReflex landing page
ChessReflex landing page
The course library. Each course shows how many lines it has and how much of it you know.
The course library. Each course shows how many lines it has and how much of it you know.
A course before drilling. You work through ten lines at a time, and each line is tracked as knows, kinda knows, struggles with, or don't know.
A course before drilling. You work through ten lines at a time, and each line is tracked as knows, kinda knows, struggles with, or don't know.
Next →Multi-Tenant Sponsorship CRM