A cartoon shell game for the browser. A fox hides a penny under 3–5 cups, shuffles them (and tries to distract you at higher levels), and you tap the cup you think hides the penny. Six levels, stars, streaks, and progress saved in the browser.
Built from the Claude Design handoff in mockups/design_handoff_penny_hunt/ — see PLAN.md for the build plan.
Bun · Vite · React 19 · TypeScript · plain CSS (design tokens in src/styles/tokens.css) · Vitest · Playwright. No backend — it's a static site.
brew install oven-sh/bun/bun just prek
git clone <this repo> && cd shell-game
just setup # bun install + Playwright Chromium
prek install -f # git hooks (secret scanning etc.)
just dev # http://localhost:5173If
bunx playwright installhangs, runbunx playwright install --dry-run chromiumto get the download URL and unzip it manually into~/Library/Caches/ms-playwright/(see CLAUDE.md).
| Command | What |
|---|---|
just dev |
Dev server with HMR |
just build |
Typecheck + production build → dist/ |
just preview |
Serve dist/ |
just test |
Unit tests (game engine + reducer) |
just e2e |
Playwright browser tests (desktop + mobile) |
just lint |
oxlint + tsc |
just check |
lint, tsc, unit tests, then terraform fmt -check and validate (what CI's check job runs; e2e is separate) |
just deploy / just smoke |
The Platform deploy and its URL check (CI runs these; from a Mac, with AWS_PROFILE=household) |
src/
game/ levels, copy, pure engine, reducer (state machine), useGame (timers)
save/ localStorage persistence ('pennyhunt-save')
audio/ WebAudio bleeps
components/ TitleScreen, LevelSelect, GameTable (+ overlays), SettingsModal, common/
styles/ tokens.css, keyframes.css, base.css
test/ vitest specs
e2e/ playwright specs
public/ fox.svg, fox-sitting.svg
The game is live at https://pennyhunt.apps.geyers.net on the household Platform (all-apps): .github/workflows/deploy.yml runs just check, then just build, just deploy and just smoke on every push to main. The Platform's rules for this repo are in docs/platform.md.