尚未偵測到更新。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. |