PostMatem is a private, client-side chess workstation providing real-time game reviews, blunder workouts, branching move tree analysis, and engine sparring. The platform runs entirely within the browser via WebAssembly (WASM) and multi-threaded Web Workers, requiring no server-side computation, user accounts, or telemetry.
- Client-Side Engine Execution: Stockfish 19 and 17 Lite NNUE run locally inside sandboxed Web Workers with no external evaluation requests.
-
Game Review and Move Classification: Move classification based on an Expected Points Lost (
$\Delta\text{XP}$ ) model, detecting Brilliant sacrifices, Great moves, Best moves, Inaccuracies, Mistakes, Blunders, and Misses. - Blunder Workout: Interactive puzzle generator that rewinds the board to critical errors, tests refutations against Stockfish, and provides progressive hint tiers.
- Advantage and Win-Rate Chart: Continuous win-percentage curves over the course of the game with interactive move scrubbing.
- Versus Engine Sparring: 20 calibrated Elo rating tiers across Casual (hints, evaluation bar, takebacks) and Competitive (strict touch-move rules) modes.
- ECO Opening Book: Searchable catalog of over 3,000 opening variations with one-click analysis board loading.
- External Match Importer: Direct PGN retrieval from Lichess and Chess.com public user feeds.
- Export Formats: Standard annotated PGN export with Informant NAG glyphs, and 1200x630px social summary cards.
- Local Persistence: Offline game archiving and evaluation caching powered by IndexedDB.
| Key | Action |
|---|---|
Right / Space |
Advance to next move |
Left |
Return to previous move |
Up / Home |
Jump to start of game |
Down / End |
Jump to end of game |
Z / Ctrl + Z |
Takeback move (Casual mode) |
F |
Flip board perspective |
E |
Toggle evaluation bar |
H |
Toggle best-move suggestion arrow |
B |
Toggle move classification badges |
- Framework: React 19, TypeScript, Vite
- State Management: Zustand and Immer
- Chess Logic: chess.js
- Board Component: react-chessboard
- Engine: Stockfish 19 Lite via WebAssembly
- Storage: idb (IndexedDB wrapper)
- Iconography: Lucide React
- Node.js 18 or higher (Node.js 20 LTS recommended)
- npm, pnpm, or yarn
git clone https://github.com/M-Nikox/PostMatem.git
cd PostMatem
npm installnpm run devThe application will be accessible at http://localhost:5173.
npm run build
npm run previewPostMatem defaults to the single-threaded Stockfish 19 Lite WASM binary (~1.7 MB). To copy and enable the uncompressed 99 MB full neural network binary locally:
npm run setup:engines:fullPostMatem produces static assets compatible with any static hosting provider. The build output requires standard WebAssembly cross-origin isolation headers (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: credentialless).
- GitHub Pages: Automated deployment is configured in
.github/workflows/deploy.yml. - Cloudflare Pages: Set build command to
npm run buildand output directory todist. Preconfigured viapublic/_headers. - Vercel: Configuration and security headers are specified in
vercel.json. - Netlify: Configuration and security headers are specified in
netlify.toml.
PostMatem incorporates work from the open-source chess and software community:
- Stockfish: Chess engine by Marco Costalba, Joona Kiiski, Tord Romstad, Stéphane Nicolet, and the Stockfish development community (GPLv3).
- Stockfish.js: WebAssembly engine port by nmrugg and contributors (GPLv3).
- CentiChess: Architecture reference for Web Worker engine pools by Cooper Ross (CC0 1.0).
- Chesskit: Reference architecture by GuillaumeSD.
- Lichess: Mathematical win-rate model and ECO dataset (AGPLv3 / CC0).
- Colin M.L. Burnett: Staunton vector chess pieces (CC BY-SA 3.0 / GFDL).
- RhosGFX: Themed piece artwork and board illustrations.
Detailed license information and original links are available in CREDITS.md.
- M-Nikox — @M-Nikox
PostMatem is free software licensed under the GNU General Public License v3.0 (GPLv3).
Stockfish engine binaries in public/engines/ are distributed under the GNU General Public License v3.0 (GPLv3).