RealmKeeper
D&D campaign platform. DM encounter state and player character sheets stay in sync over WebSockets.
- React
- TypeScript
- Node.js
- Express
- MongoDB
D&D tools usually split into "build a character sheet" sites and "run an encounter" trackers, with Discord patching over the gap. RealmKeeper does both in one app: the DM's encounter state and each player's sheet are the same data, kept in sync over Socket.io.
What's in it
- Server-side encounter runtime: initiative, HP, status effects, zone effects (auras, lingering damage, exhaustion ticks). The DM advances a round, every player's sheet updates immediately.
- Same chat surface handles in-session messages and out-of-session DM nudges.
- NPCs are full participants. Same hooks as PCs for damage, status, and chat lines, so the encounter logic doesn't fork.
Stack
Yarn workspaces monorepo. React + Vite client, Express + Mongoose API, Socket.io for live state, Zod schemas shared between them. Hosted on Fly.io.