Build the client
1. Supply the entry
Write /src/frontend.tsx with a default-exported React board component. Read The client file for supported imports and optional exports.
Done when the entry builds and the match can mount it.
2. Draw the viewer's board
Read Read the board. Handle an unavailable board and a spectator without a seat. Resolve uploaded art through the client hooks.
Done when each viewer can see a readable board without private information leaking.
3. Connect player choices
Follow Send player actions. Draw draft and Undo controls where applicable. Show pending actions and failures.
Done when an offered action works and a refusal leaves the player with a clear next step.
4. Check presentation and completion
Test phone and desktop sizes. Check images and sounds and end-of-game controls. Run validate_code and render each viewer.
Done when the client validates and remains usable from setup through game end.