For Legacy of Dragonholt
A real-time companion app for the storytelling board game. The party, the purse, the renown, the calendar, the chronicle — every panel updates on every player's screen the moment it changes.
One panel per concern. All of them in sync.

Hero cards with species, background, stamina, skills, traits, conditions, inventory and notes — up to six characters.
Read more →
The party's coin and renown — two slim counters in the ledger column.
Read more →
Current adventure, day, and time of day — with one-tap advancement and a long-rest action.
Read more →
Pledged errands with notes and active/completed filtering.
Read more →
The cast met along the way — tagged ally, foe, neutral or unknown, with locations and notes.
Read more →
The book's story tokens, logged and searchable as the party finds them.
Read more →
The A1–Z8 grid of story entries with progress, chapter navigation and filtering.
Read more →
Bundle the whole campaign into a JSON file with one click. Restore it onto any fresh server.
Read more →No refresh. No accounts. Just sync.
Every panel is wired to a shared Socket.IO channel. When one player marks a quest done, advances the calendar, or restores stamina with a long rest, the change is broadcast to every other browser in the campaign — phone, tablet or laptop, all at once.
If the realtime link drops, edits keep working locally and a toast announces the loss. When the link returns, sync resumes.
The backend can persist to MongoDB or fall back to an in-memory store — perfect for an evening around the table without any setup.
Two terminals and you're at the table.
Install dependencies, start the backend on :3080, start the dev server on :3000, point your players' browsers at the same backend, and you're done. The full walkthrough — including production builds and remote-play setup — is on the Get started page.
yarn install --frozen-lockfile
# Terminal 1 — backend on :3080
yarn dev
# Terminal 2 — Vite dev server on :3000
yarn start