Local, static, browser-based GURPS loot generator.
  • TypeScript 55%
  • Python 24.6%
  • JavaScript 19.5%
  • HTML 0.6%
  • CSS 0.3%
Find a file
2026-05-21 08:36:49 +02:00
.github feat: add local GURPS visual QA prompt instructions 2026-05-21 08:36:49 +02:00
app v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
data feat: add local GURPS visual QA prompt instructions 2026-05-21 08:36:49 +02:00
docs/roadmap Add concept and roadmap work instructions 2026-05-20 21:55:35 +02:00
GURPS feat: add local GURPS visual QA prompt instructions 2026-05-21 08:36:49 +02:00
schema v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
tests v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
tools feat: add local GURPS visual QA prompt instructions 2026-05-21 08:36:49 +02:00
.gitignore chore(tooling): import skills and prompts from bollwerk 2026-05-20 22:29:19 +02:00
CONCEPT.md Add concept and roadmap work instructions 2026-05-20 21:55:35 +02:00
package-lock.json v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
package.json v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
postcss.config.js v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
README.md v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
start.py fix: fall back to default webbrowser if vscode simple-browser is unavailable 2026-05-20 23:27:02 +02:00
tailwind.config.js v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
tsconfig.json v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00
vite.config.ts v0.1: scaffold MVP (engine, schemas, tooling, minimal UI, test pack) 2026-05-20 22:16:08 +02:00

LootGenerator

A local, static, browser-based loot generator for GURPS pen-and-paper sessions. Data is curated in Git as JSON and bundled into a single static HTML/JS app that runs from file:// — no server required.

See CONCEPT.md for the design and docs/roadmap/ for milestone plans.

Status

v0.1 MVP: engine, schemas, tooling, and a minimal React UI. Ships with a tiny hand-crafted data/test/ pack so the whole pipeline can be exercised end-to-end.

Requirements

  • Node.js 20+ (uses the built-in test runner).
  • npm 9+.

Setup

npm install

Develop

npm run dev

Runs the bundler then starts Vite on a local dev server.

Build a distributable

npm run build

This:

  1. Validates every JSON file against its schema and the cross-reference rules.
  2. Runs the unit tests.
  3. Bundles all data into app/public/data.bundle.json.
  4. Builds the Vite app into dist/.

Open dist/index.html directly from disk — it works via file://.

Test

npm test

Runs all tests/**/*.test.ts via Node's built-in test runner (TypeScript loaded through tsx).

Validate data only

npm run validate

Checks schemas, cross-references, dedupe, and lootEffects cycles.

Layout

app/            Vite app (TypeScript + React + Tailwind)
  src/engine/   Pure-function loot engine (RNG, dice, weighted picker, generator)
  src/ui/       React UI
data/           One folder per setting (test pack ships with this MVP)
schema/         JSON Schemas + controlled modifier-slot vocabulary
tools/          validate.mjs, bundle.mjs, shared lib
tests/          Engine tests + fixtures
docs/roadmap/   Per-milestone work instructions

Reproducibility

Provide a seed in the UI (or pass seed to generate()) and the same inputs always produce the same loot list.