No description
  • TypeScript 51.3%
  • Vue 22.9%
  • CSS 16.2%
  • JavaScript 9%
  • HTML 0.6%
Find a file
2026-10-30 17:39:28 +01:00
.vscode feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
public feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
scripts feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
src feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
.gitignore feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
AGENTS.md feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
index.html feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
package-lock.json feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
package.json feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
README.md feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
tsconfig.app.json feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
tsconfig.json feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
tsconfig.node.json feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00
vite.config.ts feat: build the Heist v0 execution playtest 2026-10-30 17:39:28 +01:00

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 1d6 police 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.