Public: anyone can read this; the crew can change it.
Migrated from github.com/amirmushichge/pixel-plays
Add Cake Stall: the playable page and its place in the catalogue, on the rules in `cake-stall/order.js` #371
Check · Review · Land · Live done — Landed and live in production.
Cake Stall is playable at `/cake-stall/` and listed in the catalogue. The Cake Stall page tests, `serve.test.mjs` and the Cake Stall playtests pass (the playtests include the per-game time budget). I did not run the whole suite; the forge runs it on push. `bun scripts/design-lint.ts` doesn't exist in this clone, and `bun x tsc --noEmit` only printed its help text because there's no tsconfig. So ne…
shipped production is serving it deploy 5b5fb07
Cake Stall is playable at /cake-stall/ and listed in the catalogue. The Cake Stall page tests, serve.test.mjs and the Cake Stall playtests pass (the playtests include the per-game time budget). I did not run the whole suite; the forge runs it on push. bun scripts/design-lint.ts doesn't exist in this clone, and bun x tsc --noEmit only printed its help text because there's no tsconfig. So neither ran.
What changed
- Page:
cake-stall/index.htmldraws a striped-awning cake stall on a gingham cloth at the 30-degree camera, with hard shadows screen-right. The customer's order sits as a stacked cake on the left plate. A silver cloche covers it once the rules hide it. Your stack builds on the right plate. - Controls: four layer buttons run along the bottom of the canvas. Tap one or press 1–4 to place a layer. R starts a fresh seed.
- Patterns: each layer differs by pattern as well as colour (sponge crumb dots, jam diagonal stripe, cream wavy swirl, icing checks), on the cake faces and the buttons.
- HUD: it shows round, lives and score, and every move, refusal and end line goes through the aria-live region. The page calls only
CakeStall.tick,placeandstart; the order, scoring and lives come fromorder.js. - Other required items: the rules popup is three lines, there's a
#mutebutton, no.mp3, and the awning fringe stops under reduced motion. The listing is inGAMES, the rootindex.html, the README games table and the no-music list.bun scripts/og.mjshas been run. - Tests:
- rounds.mjs has a scripted round that wins all 8 orders.
- serve.test.mjs checks that /cake-stall/ and /cake-stall/order.js answer 200.
- cake-stall/page.test.mjs has 8 tests, all passing.
Not in the issue
- Arrow keys mark a button and Space or Enter places it. I added this because the keyboard playtest needs a key besides 1–4 to change the game. It is selection only, not a rule.
- Pips under each plate count the layers, and a bar under the order plate shows the showing time running out.
Not done
- The announcements never name the order or the correct layer, so the game stays a memory test. That means a screen-reader user can't read the order aloud.
- A restart uses a fresh random seed rather than replaying the old one, so the orders can't be memorised across restarts.
To try it: run bun serve.mjs and open /cake-stall/. Watch the order, then stack it back from memory.
🤖 Generated with Claude Code
Cake Stall works in the preview (/cake-stall/ answers 200). It is a canvas page with 1-4 keys, arrow marking with Space/Enter, tap buttons, R restart and an aria-live status, and it drives only start/tick/place from order.js. Patterns differ per layer, reduced motion holds the awning still, and the listing, README, og cards, rounds and tests are all in. Next, I would: (1) give the status line a way for a screen-reader user to replay the order, for example a 'read order' key that announces the layers while it is on show; (2) add a no-JS fallback line to the page that explains what the game is, beyond the noscript notice. Neither blocks this pull.
Cake Stall is playable at
/cake-stall/and listed in the catalogue. The Cake Stall page tests,serve.test.mjsand the Cake Stall playtests pass (the playtests include the per-game time budget). I did not run the whole suite; the forge runs it on push.bun scripts/design-lint.tsdoesn't exist in this clone, andbun x tsc --noEmitonly printed its help text because there's no tsconfig. So neither ran.What changed
cake-stall/index.htmldraws a striped-awning cake stall on a gingham cloth at the 30-degree camera, with hard shadows screen-right. The customer's order sits as a stacked cake on the left plate. A silver cloche covers it once the rules hide it. Your stack builds on the right plate.CakeStall.tick,placeandstart; the order, scoring and lives come fromorder.js.#mutebutton, no.mp3, and the awning fringe stops under reduced motion. The listing is inGAMES, the rootindex.html, the README games table and the no-music list.bun scripts/og.mjshas been run.-
rounds.mjshas a scripted round that wins all 8 orders. -serve.test.mjschecks that/cake-stall/and/cake-stall/order.jsanswer 200. -cake-stall/page.test.mjshas 8 tests, all passing.Not in the issue
Not done
To try it: run
bun serve.mjsand open/cake-stall/. Watch the order, then stack it back from memory.🤖 Generated with Claude Code
Closes #361