Skip to content
Nachi3D Labs

ProjectsTavernKeeper

TavernKeeper

Live

D&D 5e companion — character sheets, compendium, campaigns, and AI-generated chronicles.

Live demoSource available on request
TavernKeeper — D&D companion app welcome screen — screenshot 1

About this project

Overview

TavernKeeper is a web app for tabletop D&D groups. Players create characters through a 6-step wizard, DMs run campaigns with chapters and events, and when a chapter closes, Groq's Llama 3.3 70B generates a narrative chronicle that pushes to each player's personal journal. It's built for my own gaming group and others who play at a physical table — it deliberately doesn't do combat simulation, dice rolling (unless you want to), or virtual tabletop things. The whole premise is that the app should remember so players can play.

Stack decisions: monorepo with Express + React + Vite, SQLite (node:sqlite locally, better-sqlite3 on Railway) instead of Postgres because the scale doesn't justify it yet, bcryptjs over native bcrypt to avoid Windows build tools, vite-plugin-pwa for mobile install.

I built this because the 'I don't remember what happened last session' problem was real in my own group, and every existing tool either tries to replace the physical table or drowns you in features.

Key features

What it does

Character creator with race/class/stats/equipment/spells, including racial ability bonuses
Campaign journal with chapters, events, and AI-generated chronicles via Groq
Guided Level Up wizard adapting per class/level — HP roll, subclass, ASI or feat, new spells
Short Rest and Long Rest with Hit Dice tracking, party-wide or per-character
Campaign invitations via 6-char code or unique link, per-campaign DM/Player roles
PWA installable on Android, iOS, and desktop — 105 Playwright tests passing

Built with

The Stack

React 18
Express
node:sqlite
Groq AI
Playwright
Railway

What I'd do differently

In hindsight

I'd pick Postgres from day one — the SQLite migration is a cost I'll pay later. And I'd skip the initial token-only auth and go straight to passwords; the soft migration path cost more complexity than it saved.

Want something like this built for you?

Tell me what you'd like to build and we'll see if it fits.