Variant:
Saved locally in this browser.
Portable JSON (share / replay).
Clocks pause automatically while browsing Analysis.
Account
offline
Players (local seats)
You:
White: — • Black: —
You are: —
When locked: seats frozen, spectators only.
Game lock: open
Network (two tabs / same device)
Status: offline
• Room: —
• Role: offline
⚠️ Network desync detected.
How to use: open this file in two browser tabs. Set one tab to host, the other to client, same room id.
Manual action (engine-driven)
Tip: click a token to select, then click a destination. Action type uses the dropdown.
When connected as client, moves are sent to the host.
Analysis
Viewing ply /
To make moves, you must be viewing the latest ply.
Anti-cheat audit
Verify signatures & chain integrity.
Move log
Diagnostics
Chain continuity: —
Signatures: —
Replay validity: —
Match result
Load a setup (for fast testing)
If JSON is provided, it overrides the square lists above.
Server API contract (draft)
{
"POST /auth/anon": { "playerId": "uuid", "token": "jwt" },
"POST /match/start": {
"gameId": "hash",
"players": { "W": "playerId", "B": "playerId" },
"initialStateHash": "hash"
},
"POST /match/move": {
"gameId": "hash",
"playerId": "uuid",
"action": { "type": "copy|move", "from": "A1", "to": "A2" },
"prevStateHash": "hash"
},
"POST /match/finish": {
"gameId": "hash",
"result": {
"outcome": "W|B|D",
"reason": "string",
"plyCount": 42,
"finalHash": "hash"
}
},
"GET /leaderboard": {
"entries": [{ "playerId": "uuid", "rating": 1234 }]
}
}
Pure documentation only. No server dependency yet.
Deployment presets
Static hosting (recommended)
- GitHub Pages: upload this file as
index.html - Netlify: drag & drop this file
- S3 / Cloudflare Pages: static HTML
No build step, no server required.
Server-backed (optional)
Enable
SERVER.enabled = true and point SERVER.baseUrl to your API.
Auth, match reporting, and leaderboards will activate automatically.
Notes:
- Official initial setup is 2 tokens each: W: A1, H8 and B: A8, H1, with White to move.
- Pressure tests in Appendix A verify the strict after > before requirement.