GURPS VTT

A desktop virtual tabletop for running a GURPS campaign, developed partly by an overnight loop that builds one queued item at a time and stops for my review.

Ongoing, last updated 23 October 2026

GURPS VTT is a virtual tabletop and campaign manager for the GURPS roleplaying system, built for the campaign I run. It is a desktop app for the game master with its own multiplayer server built in, so players join from a browser on the local network. It covers combat, characters, a hex map with travel, downtime activities such as alchemy, cooking, crafting and gathering, and inventory.

It is written in TypeScript with React, Electron, Express and Socket.IO. The repository holds about 198,000 lines of application and test code, with 229 test files.

The overnight loop

Part of the development happens while I sleep. A scheduled task wakes up three times a night and runs only if no other session has been active in the last 30 minutes. Each run takes exactly one item from a written queue of ready work:

  1. Claude writes a spec for the item.
  2. Codex implements it.
  3. Claude reads the whole diff and runs the checks itself: type checking, the full test suite, the server's own tests and a design-token check.
  4. If the checks fail, it gets one round of fixes. If they still fail, the item is set aside, and any later retry has to start by writing down what went wrong.

The work lands on a separate branch that is never pushed. I review it and merge what I accept. If 20 commits are waiting for review, the loop stops taking new work. The current version of the loop started on 18 October 2026; an earlier version ran until July.

How it was built

Of the repository's 752 commits on the main branch, 485 were written with Claude or Codex (242 written by Claude directly, 243 with Claude as co-author).

Companion: the character sheet

A separate GURPS character sheet app is built around one rule: every derived number comes from a single calculator. Its code is private. No GURPS rules text is reproduced here.