Game systems for a virtual tabletop
I led game development on a team of five to eight: the character sheets, dice and rules automation behind 25 tabletop RPGs, and the tools that let other people build their own.
games people can play
pull requests in four years
reviews for teammates
for a year-long system
lost characters found
sheet building blocks
tests behind the rules engine
test files added in 2026
A year of work, shipped in three months
Daggerheart on Alchemy was projected at a year or more. The first commit was on April 17, 2026, it launched five weeks later on May 22, and the heavy work ran into early July.
What shipped
Guided character creation, levelling up, domain cards, Hope and Fear rolls, beast forms and companions, and a new in-game character panel.
Not alone
Three teammates made about a third of the commits on it, and the founder started the system definition.
How
I designed each piece and reviewed what came back. Agents wrote most of the code.
The agent workflow is why this took three months instead of a year.
The fix players felt
For years, players wrote in to say their character had been deleted. It hadn't. It had lost its link to the game, and nobody knew why.
The cause
Creating a character saved the game's whole character list from one player's copy. Anything another player had changed in the meantime was overwritten.
The fix
I took the overwrite out, so creating a character no longer replaces the game's whole character list.
The repair
I wrote a script that found about 3,000 characters, across about 2,000 games, to put back where they belonged.
Tools for other people
In 2023 I built game systems by hand, one sheet at a time. After that, most of my work went into the tools that mean nobody has to.
Sheet Builder
Fifteen building blocks, so a game designer can lay out a character sheet without an engineer. In 2025, every hand-coded sheet moved onto it.
2024 to 2026A language for dice
Authors write a roll like a formula, with prompts, conditions and re-rolls, instead of asking for code.
2025 to 2026Rules as data
What a shield does to your armor is now something an author sets on the item. Stats update live, backed by about 167 tests.
2026A designer can now lay out a sheet, write a roll and set what an item does without an engineer, me included.
Also built
3D dice
A custom dice renderer on Three.js, with physics from cannon-es.
2026Creation and level-up wizards
Guided character creation and levelling for the systems that need it.
2026Dice pools
Roll actions for games that count successes across a pool of dice.
2023 to 2024Authoring tools
Asset folders, a rich-text toolbar for articles, and user-created modules, the containers that hold a game's articles, NPCs, assets and handouts.
2025Table features
Handouts, custom trackers, roll tables, the game lobby, multi-track audio and video chat.
2022 to 2023Data model changes
Skills and abilities moved onto the character document. System values moved into sheet data. Items and features gained structured modifiers.
2024 to 2026Game systems
Each one is somebody's favorite game, working the way its rulebook says. Sixteen have sheets and in-game panels I built. Nine more, shown dimmer, have rules and dice I worked on.
Other people's work
I reviewed 1,404 pull requests for teammates. That's 43 more than I wrote.
A review skill, shared
I moved my own review workflow into the team's repository so anyone could run it. It looks hard for problems, then rewrites each one as a good-faith question before anything is posted.
Reviewing other people's work was as much the job as writing my own.
2022 to 2025
Written by hand
The Borg and Year Zero systems with their character generators, the Sheet Builder blocks, and the roll command parser. I typed these in TypeScript.
2026
Directed through agents
Daggerheart, the 3D dice engine, and the modifier engine. I merged about as many pull requests a month as before, and they came with tests: 18 test files added in 2025, 239 in 2026.
What it stands on
Other people built the platform under all of this: the real-time service, the tactical map, the accounts and the infrastructure. My work sat on top of theirs.
Numbers counted from the repository and GitHub on October 2, 2026. The repository is private.