- TypeScript 51.3%
- Vue 22.9%
- CSS 16.2%
- JavaScript 9%
- HTML 0.6%
| .vscode | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| AGENTS.md | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
Heist — v0 playtest
A single-device, hot-seat webgame that implements the execution act of Heist, a cooperative bank-robbery board game for 2-6 players. This is a playtest instrument, not the final digital product: the rules are tabletop-first, and every mechanic can be reproduced with cards, dice and tokens.
What is in v0
- 2-4 players, hot-seat on one device.
- A 5×5 building generated from a 16-tile deck with matching doors.
- 3 action points per turn: move, loot, force, pick/hack, distract, hide, escape.
- Loot casino: 3d6, 6 = one chip, 1 = bust, push your luck.
- 30 complication cards across three levels.
- Dormant guards:
1d6 + action tension, wake on 5+; guard cards with three options. - Shared tension track, alarm and
1d6police countdown. - End screen with escaped/arrested players and public loot.
Not in v0: planning choices, secret agendas, traitor/cop, conditions, character abilities, getaway and split, persistence, online play, solo bots.
Run
npm install
npm run dev
Open the printed URL, choose 2-4 players and start. The seed field is optional; the same seed reproduces the deck, the building and the dice.
Test
npm test
npm run build
The engine is pure TypeScript in src/engine/ and is tested headlessly with Vitest. The UI is Vue 3 in src/components/.
Smoke tests
The browser smoke tests use the locally installed Chrome through playwright-core. Start the dev server first, then:
npm run smoke # setup, board, movement, loot, complication, turn change
npm run smoke:guard # a deterministic guard encounter (seed guard-3)
npm run smoke:end # play until the police arrive and the end screen opens
They write smoke*.png screenshots, which are ignored by git.
Design docs
The game design source of truth and the v0 PRD live in the private mgmt repository:
../mgmt/heist/CONTEXT.md../mgmt/heist/scratch/v0-playtest/PRD.md
Do not copy private mgmt content into this repository if it becomes public.
Tuning notes
- A single loot roll has 58% empty hands. Levers: count 5-6 as loot or roll 4d6.
- A silent action wakes a dormant guard 33% of the time (
1d6 + 0 >= 5). This may be high. - Tension max is
10 + 2 × players(14-18). The automated aggressive run reaches the alarm in two rounds; human groups may be slower. - Extra tension after the alarm reduces the police countdown, which can end the game very fast. Intended, but needs playtest.
Structure
src/engine/ pure TypeScript rules
content/ tiles, characters, missions, complications, guard cards
building.ts 5×5 generation with matching doors
game.ts turns, actions, loot, tension, guards, police
game.test.ts headless tests
src/components/ Vue 3 UI
scripts/ Playwright smoke tests and seed finder
Working title
"Heist" is a working title. A trademark search is pending.