Interactive booth games for kids, designed to run on a kiosk with a single big button (Enter key). Players use RFID cards (NTAG213) to carry their identity and scores between sessions — no backend, no accounts, no PII.
| Game | Description | Mascot |
|---|---|---|
| Mascot Runner | Infinite side-scrolling runner — jump over obstacles, collect Wiz Kidz logos for bonus points, beat your high score | Any mascot |
| Chess Masters | Strategic puzzle game — solve in minimum moves | Peacock Pride |
| Memory Game | Sequence memory challenge — replay the mascot pattern | Orchid Mantis |
apps/
booth-kiosk/ — Main kiosk launcher (game menu)
admin-card-config/ — Admin tool to configure RFID cards
games/
mascot-runner/ — Infinite runner game
chess-masters/ — Chess puzzle game
memory-game/ — Sequence memory game
packages/
design-system/ — Shared UI components, Tailwind tokens, CSS
mascot-system/ — Mascot metadata and personalities
card-io/ — NTAG213 RFID read/write logic
analytics/ — Session tracking (30-min inactivity timeout)
ai-models/ — Hugging Face Transformers.js wrapper
public/
gameRegistry.json — Game catalogue (update when adding a game)
cardDataStructure.json — NTAG213 byte layout shared across apps
Install Node.js 18+ and pnpm 8+:
npm install -g pnpm
# Clone the repo
git clone https://github.com/wizkidzai/games-events.git
cd games-events
# Install all dependencies
pnpm install
pnpm dev
Each game starts on its own Vite dev server (ports assigned automatically). Open the URL printed in the terminal for each game.
# Mascot Runner game only
pnpm --filter mascot-runner dev
# Chess Masters game only
pnpm --filter chess-masters dev
# Memory Game only
pnpm --filter memory-game dev
# Booth kiosk launcher (http://localhost:5173)
pnpm dev:kiosk
# Admin card configurator (http://localhost:5174)
pnpm dev:admin
The runner game supports a real logo image. Drop your PNG at:
games/mascot-runner/public/wizkidz-logo.png
If the file is absent the game automatically uses a gold “WZ” badge as a fallback — no code change needed.
# Build every app and game
pnpm build
Built files land in each package’s dist/ directory. Deploy them to any static host (CDN, nginx, etc.).
# Run all unit tests (Vitest)
pnpm test
# Watch mode
pnpm test:watch
# End-to-end tests (Playwright — requires a running dev server)
pnpm test:e2e
pnpm lint # ESLint check
pnpm lint:fix # Auto-fix lint errors
pnpm format # Prettier write
pnpm format:check # Prettier check (used in CI)
Use the scaffold script — it wires up the boilerplate and updates gameRegistry.json automatically:
pnpm create-game <game-id> --mascot <0-5> --ageGroups <0,1,2>
Then implement your game logic in games/<game-id>/src/scenes/GameScene.ts.
The kiosk runs on a single-button input device that sends the Enter key. All game flows are designed around this constraint:
RFID cards are read once at session start (identity + previous score) and written once at session end (updated score). Cards are never used as game input.
| Token | Hex | Use |
|---|---|---|
| Peacock Pride | #006464 |
Primary teal, buttons |
| Orchid Mantis | #A30078 |
Primary magenta |
| Yellow Fawn | #FFC832 |
Accents, collectibles |
| Blue Jay | #0AA4EB |
Sky blue |
| Red Fox | #FF4747 |
Hard difficulty |
| Green Frog | #43A277 |
Easy difficulty |
GitHub Actions runs on every push and pull request:
See .github/workflows/ci.yml for details.