A one-stop shop for managing campaigns for your discord-based dnd group.
| .gitignore | ||
| README.md | ||
DnD Campaign Hub
Self-hosted web application and Discord bot for managing rotating DnD campaigns.
Stack
- Node.js + TypeScript (Express API + Discord bot + scheduler)
- React + Vite + TypeScript
- SQLite
- Docker Compose
Quick Start
- Copy
.env.exampleto.envand fill values. - Install dependencies:
npm install
- Run DB migrations:
npm run migrate -w @dnd-hub/server
- Run in dev mode:
npm run dev
Docker
- Copy
.env.exampleto.env. - Start:
docker compose up --build
Project Layout
apps/server: API, SQLite access, scheduler, Discord bot and slash commandsapps/web: React UIinfra: Docker and nginx config
Transcript Session Feature
Added structured transcript support with campaign + character context.
Discord Commands
/session start: starts a transcript session on the currently selected campaign/session stop: ends active transcript session/session status: shows active transcript session state
API Endpoints
POST /sessions/startPOST /sessions/:id/stopGET /sessions/activePOST /sessions/:id/segmentsGET /sessions/:id/transcriptPOST /sessions/:id/push-to-cloud
Cloud Sync
If CLOUD_API_BASE_URL is configured, each transcript segment is queued and POSTed to:
POST {CLOUD_API_BASE_URL}/transcripts/segments
Headers sent:
X-API-Key:CLOUD_API_KEYX-Idempotency-Key:${sessionId}:${sequence}X-Signature: HMAC-SHA256 payload signature usingCLOUD_API_HMAC_SECRET