尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Try it · Features · How it works · Run locally · Author
Type your Chess.com or Lichess username, tap a game and get a full review in seconds: every move rated from Brilliant to Blunder, accuracy for both players, the key moments, and a coach that explains why in plain English. No account, no uploads and no limits, because the engine runs on your own device.
Open a game → summary → step through the moves → a Great move pops → a mistake explained, with the best move shown
| Pick a game | Summary | Review | Details |
|---|---|---|---|
Great and Brilliant moves get a Chess.com-style pop on the board, with a chime.
"Qf6+ is a great move. This skewers your king and rook, winning a piece." "Nf6 is a miss. This allows Qh4, which pins your knight to the rook." "d3 is good. Better was d4, claiming space in the center."
The coach recognizes what a move actually does: forks, pins, skewers, discovered attacks, mate threats, hanging pieces, trades, recaptures, development, castling, passed pawns, open files and king activity. It then tells you why your move was good or bad, and what the best move would have done instead.
Drag a piece (or tap one and then a square) at any point. A live Stockfish rates the move you tried and explains it. Back to game returns you exactly where you left off. Retry lets you find a better move than your mistake, Show plays out the follow-up, and Best shows the engine's move.
Accuracy for both players, calibrated to match Chess.com's numbers (see How close to Chess.com?). Opening, middlegame and endgame grades for each player, the key moments, an evaluation graph (tap or drag it to jump around), the top 3 engine lines, opening names from a 3,800-line book, clocks and captured material.
One full-screen view that never scrolls: eval bar, coach, a full-width board, a swipeable move strip and a thumb-reach action bar. Details open as bottom sheets. It's installable to the home screen as an app (PWA), and respects the notch and the home indicator.
Distinct sounds for moves, captures, checks, castling and promotion, all generated in code with no audio files. Haptics on Android, plus a light tap on recent iPhones. Five board themes (including wood), autoplay and keyboard shortcuts.
Positions are analysed in parallel by a pool of Stockfish WASM workers, and you can start stepping through while the review is still running. A 40-move game usually takes 20–40 seconds, including the deeper second pass over its key moments. Finished reviews are cached in IndexedDB, so reopening a game is instant.
Everything runs in your browser. Your games go straight from the Chess.com / Lichess API to your device and nowhere else. You can share a link to any review: ?src=chesscom&u=<user>&g=<game>.
| Key | Action |
|---|---|
| ← → | Previous / next move |
| ↑ Home · ↓ End | Start / end of the game |
| Space | Autoplay |
| F | Flip the board |
| Esc | Back to the game from an explored line |
| Backspace | Undo an explored move |
| Step | What happens |
|---|---|
| Engine, pass 1 | Every position gets a MultiPV 3 search (Standard: depth 16 or 800k nodes), spread across up to 4 single-threaded Stockfish 17.1 workers. Each search starts with a cleared hash and a node limit, so the same game gets the same review on every device. |
| Played move | When the move you played isn't one of the engine's top three, it is searched on its own (searchmoves) from the same position and to the same limits. Best and played moves are compared inside one search, not against a separate search of the next position. That makes "Best", "Excellent" and "Inaccuracy" much more reliable. |
| Engine, pass 2 | The moves that decide the review are searched again, deeper (Standard: depth 20): every inaccuracy, mistake, miss and blunder, every Great or Brilliant candidate, and any move sitting on a rating boundary. |
| Win % | Scores become winning chances with the logistic model Lichess fitted on real games. |
| Classification | Based on expected points lost against the best move, using Chess.com's published bands: ≤2% Excellent, ≤5% Good, ≤10% Inaccuracy, ≤20% Mistake, >20% Blunder. A +0.5 → −1.0 swing is serious; +9 → +7.5 isn't. |
| Best / Great | Best is the engine's top move, or a move it scores exactly as well. Great is the top move when every alternative is at least a mistake and would give up the result. If the second-best move still keeps a clearly winning position, the move is just Best. Plain recaptures don't count. |
| Brilliant | A sound sacrifice: it leaves material the opponent can win by static exchange (legal-move SEE, so pins and checks count), it is still (near-)best, and you weren't already completely winning. When you were, it still counts if it's the engine's top move and every other move gives a big part of the win away (like 40...Rxg3+! Kxg3 Rc3+, winning the queen at +13). |
| Miss | You failed to punish your opponent's mistake or blunder. |
| Book | The position is in the Lichess openings dataset, including transpositions. |
| Coach |
Chess.com's API includes its own accuracy score for every game that was reviewed there. scripts/benchmark.ts runs this app's real pipeline, with the same Stockfish build and the same two passes, on those games and compares the results:
| Games (player-games) | Average difference from Chess.com | Within 5 points |
|---|---|---|
| Club players, ~1000–1600 (72) | 2.8 points | 81% |
| Grandmaster blitz (48) | 1.9 points | 96% |
| Unseen test set: 37 recent Hikaru blitz games, not used for fitting (74) | 2.4 points | 92% |
With the plain Lichess formula, the average gap was 5.6 points on the fitting set and 5.9 on the test set. What closed most of it: measuring each move's loss inside one search, and not letting a single blunder drag the harmonic mean to zero. Chess.com's exact formula isn't public, so expect a couple of points of difference on any single game.
Requires Node.js 20+.
git clone https://github.com/ritstar/chess-game-review.git
cd chess-game-review
npm install
npm run dev # → http://localhost:3000
| Script | |
|---|---|
npm run build / npm start | Production build and server |
npm run check | Lint, typecheck and tests |
npm test | Unit tests plus an end-to-end test that runs the real Stockfish build in Node |
npm run benchmark -- <archive.json…> | Compare our accuracy with Chess.com's on games from monthly archive files (see scripts/benchmark.ts) |
npm run build:openings [dir] | Regenerate public/data/openings.json from the Lichess openings TSVs |
app/ Next.js app router entry, layout, metadata and global styles
components/
App.tsx Home screen, game search and routing between views
home/ Game source picker and game list
review/ Board, eval bar and graph, move list, coach, engine lines, summary
hooks/
useGameReview.ts Runs the two-pass analysis, streams results and caches finished reviews
useExplorer.ts Live engine and ratings for moves tried on the board
lib/
engine/ UCI parsing and the Stockfish worker pool
analysis/ Two-pass pipeline, classification, motifs and coach text, tactics (SEE),
phases, accuracy, openings
games/ Chess.com / Lichess API clients and PGN parsing
review/ Board navigation state (game moves and explored lines)
sound.ts, haptics.ts Board feedback
public/stockfish/ Stockfish 17.1 lite, single-threaded WASM build
public/data/ Generated opening book
tests/ Vitest suites
Live at https://chess-game-review.vercel.app. Every push to main deploys to Vercel, and CI runs lint, typecheck, tests and a production build.
The app is static apart from Next.js itself, so it runs anywhere Next.js does (Vercel, Netlify, a Node server). Security headers (CSP, frame and referrer policies) and cache headers for the engine binary are set in next.config.ts. The CSP allows outgoing requests only to api.chess.com and lichess.org. Set NEXT_PUBLIC_SITE_URL if you host it on another domain; it's used for canonical URLs, the sitemap and link previews.
@ritstar If this helped your chess, consider giving the repo a ⭐. Bugs and ideas are welcome in issues.
Copyright © 2026 @ritstar. Released under the GNU General Public License v3.0 or (at your option) any later version, and distributed without any warranty. GPLv3 because the app ships Stockfish, which is GPLv3: anyone who distributes a modified version must share its source under the same licence.
| Board-level motif detection on the played move, the best move and the opponent's best reply, phrased the way Chess.com's coach talks: what your move did, what it allowed, and what the best move would have done. |
| Phases | The game is split into opening, middlegame and endgame (the rules Lichess uses: pieces traded or developed off the back rank; six or fewer pieces left). Each player gets a grade per phase from their move accuracy there. |
| Accuracy | The Lichess method (per-move accuracy from win % lost, combined as a volatility-weighted mean and a harmonic mean), refitted to match Chess.com: each move's loss is taken from the same search as the best move, and one blunder counts at least 40% in the harmonic mean, so a single bad move can't zero out a long game. |