Boxwood Chess Sim
The board is the product. A visitor lands and plays a full, legal game against the engine — no signup, no modal, no route change. Everything else on the page exists to get them there.
A real game, not a picture of one
The board is live 3D. Piece geometry is turned procedurally in-component — a Staunton profile revolved on a lathe — so nothing is a sprite and nothing is imported. Tap a piece and every legal square lights up. Castling, en passant, promotion and the draw conditions are adjudicated properly. Take back, resign, or play fullscreen.
Eight engines
Each level is a named opponent with its own rating and temperament, from 600 to 2000. The search is written for this template — material-aware negamax, depth scaled from the level. It punishes blunders and gives nothing away.
A record that remembers
Every finished game is written to the visitor's own device and drives a personal leaderboard: games played, record, streak, best level beaten, and a running rating estimate per level.
What ships
Five self-contained code components — header, hero, board, leaderboard, footer. Nine colour styles and six text styles drive the whole site: retheme those and every section follows, because nothing on the canvas carries a hardcoded fill. Built at desktop, tablet and phone — each breakpoint laid out, not reflowed.
Setup
Duplicate the project. Rename through the header and footer controls, edit the nine colour styles, set engine strength on the board instance, update the page metadata. No backend, no API keys, no third-party account.
Type: Fraunces, Instrument Sans, Sometype Mono.
Good to know
WebGL is required; there is no 2D fallback. The search runs on the main thread, so levels 7–8 think slower on phones. The record is per-device — a shared, cross-device leaderboard would need a backend.
Licensing
Nothing here carries a share-alike or copyleft term. Move generation and rule adjudication use chess.js (MIT); the footer colophon carries the notice
Boxwood Chess Sim
The board is the product. A visitor lands and plays a full, legal game against the engine — no signup, no modal, no route change. Everything else on the page exists to get them there.
A real game, not a picture of one
The board is live 3D. Piece geometry is turned procedurally in-component — a Staunton profile revolved on a lathe — so nothing is a sprite and nothing is imported. Tap a piece and every legal square lights up. Castling, en passant, promotion and the draw conditions are adjudicated properly. Take back, resign, or play fullscreen.
Eight engines
Each level is a named opponent with its own rating and temperament, from 600 to 2000. The search is written for this template — material-aware negamax, depth scaled from the level. It punishes blunders and gives nothing away.
A record that remembers
Every finished game is written to the visitor's own device and drives a personal leaderboard: games played, record, streak, best level beaten, and a running rating estimate per level.
What ships
Five self-contained code components — header, hero, board, leaderboard, footer. Nine colour styles and six text styles drive the whole site: retheme those and every section follows, because nothing on the canvas carries a hardcoded fill. Built at desktop, tablet and phone — each breakpoint laid out, not reflowed.
Setup
Duplicate the project. Rename through the header and footer controls, edit the nine colour styles, set engine strength on the board instance, update the page metadata. No backend, no API keys, no third-party account.
Type: Fraunces, Instrument Sans, Sometype Mono.
Good to know
WebGL is required; there is no 2D fallback. The search runs on the main thread, so levels 7–8 think slower on phones. The record is per-device — a shared, cross-device leaderboard would need a backend.
Licensing
Nothing here carries a share-alike or copyleft term. Move generation and rule adjudication use chess.js (MIT); the footer colophon carries the notice