Gelatinous Vault — TTRPG Campaign Manager by Zona GilreathGelatinous Vault — TTRPG Campaign Manager by Zona Gilreath

Gelatinous Vault — TTRPG Campaign Manager

Zona Gilreath

Zona Gilreath

Full-stack encounter manager for tabletop RPGs
Gelatinous Vault is a professional-grade encounter manager for tabletop RPGs, built around one idea: speed at the table. It keeps initiative order, monster stats, spells, class features, and dice in a single screen designed for real play. I built the full stack as founding engineer — event-sourced state, a schema-driven SRD content system, type-safe APIs, and a React 19 UI tuned for dense, legible information.
React 19TypeScripttRPC · ZodPostgreSQL · PrismaSupabase Auth · RLSEvent sourcingRadix UI · TailwindRailway · Vercel · GitHub Actions

Context and scope

Most combat trackers fail at the moment they’re needed most: mid-fight, under time pressure, with a table full of people waiting on you. They bury the important information under configuration, modal flows, and dense layouts designed for setup, not play.
Gelatinous Vault prioritizes the opposite: the high-frequency actions — advancing turns, updating HP, tracking conditions — are front and center. Everything else is a keystroke or click away but never in the way.
I’m building this as founding engineer at Gelatinous Labs, responsible for the full stack: schema design, API layer, auth model, UI system, and deployment infrastructure.

Event-sourced encounter state

All encounter mutations — HP deltas, conditions applied or removed, lineup changes — are stored as typed events rather than overwritten row state. The UI derives current combatant state by replaying the event log from the beginning of the encounter, or from any point in it.
This gives us rewindable history for free: a DM can step backward through the timeline to review what happened, correct a mistake, or settle a rules dispute, then jump back to the present. Undo/redo is a pointer move in the event stream, not a special-case reducer.
The architecture also gives us a clean path to multi-user sync: because state is derived from events, future WebSocket collaboration just needs to broadcast new events and merge them into the log — the reducer handles the rest without changes.
Rewinding the encounter timeline — HP deltas and conditions recomputed from the event log at any prior state

SRD content system and action economy

The SRD content starts as markdown from a community source. Rather than hardcode monster blocks and class features as static records, we analyzed patterns in both the markdown source and the official SRD 5.2 document to build a schema that applies consistent structure to all of it: monsters, spells, class features, feats, and equipment.
On top of that schema sits an action economy system. It derives “action grants” from categorical definitions — class feature sets, monster stat blocks — and then compiles those grants with a specific combatant’s particulars: their actual level, equipment, and any customized stats. The result is a runtime menu of available actions and abilities for each participant, built fresh per combatant rather than hard-coded per type.
This means a Level 11 Druid and a Level 3 Druid see different Wild Shape options automatically. A monster with a custom HP pool or modified stat block still gets the correct attack calculations. The content layer stays data-driven all the way down.
Class feature panel — tabular rules and prose rendered from the same structured SRD schema, not hard-coded markup

Spell and resource management

The spell manager keeps library and prepared list in a single modal, searchable and filterable without losing context. Selecting a spell opens its full rule text alongside the list — so a player can look something up and manage their prepared slots in the same interaction.
Keyboard navigation is implemented for the primary flows and we’re targeting full keyboard-only operation by general availability, so the app works at a physical table without needing to hand off a mouse.
Spell manager — library, prepared list, and rule text in one modal, optimized for mid-session lookup

Stack and architecture

What’s next

Currently in private beta. The next phase focuses on full keyboard-only navigation, multi-user session sync over WebSockets, and expanding encounter tooling — all without compromising the core loop’s speed and legibility.
Like this project

Posted Mar 17, 2026

Founding engineer on a TTRPG campaign manager. Event-sourced state, tRPC + Zod APIs, PostgreSQL with Prisma and Supabase RLS, React 19, and Radix UI components.