A one-stop shop for managing campaigns for your discord-based dnd group.
Find a file
2026-03-16 22:15:15 -04:00
.claude logic commit 2026-03-16 22:15:15 -04:00
apps logic commit 2026-03-16 22:15:15 -04:00
infra logic commit 2026-03-16 22:15:15 -04:00
.gitignore first commit 2026-03-16 22:14:18 -04:00
AGENTS.md logic commit 2026-03-16 22:15:15 -04:00
docker-compose.yml logic commit 2026-03-16 22:15:15 -04:00
package-lock.json logic commit 2026-03-16 22:15:15 -04:00
package.json logic commit 2026-03-16 22:15:15 -04:00
README.md first commit 2026-03-16 22:14:18 -04:00
VOICE_TRANSCRIPT_PLAN.md logic commit 2026-03-16 22:15:15 -04:00

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

  1. Copy .env.example to .env and fill values.
  2. Install dependencies:
    • npm install
  3. Run DB migrations:
    • npm run migrate -w @dnd-hub/server
  4. Run in dev mode:
    • npm run dev

Docker

  1. Copy .env.example to .env.
  2. Start:
    • docker compose up --build

Project Layout

  • apps/server: API, SQLite access, scheduler, Discord bot and slash commands
  • apps/web: React UI
  • infra: 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/start
  • POST /sessions/:id/stop
  • GET /sessions/active
  • POST /sessions/:id/segments
  • GET /sessions/:id/transcript
  • POST /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_KEY
  • X-Idempotency-Key: ${sessionId}:${sequence}
  • X-Signature: HMAC-SHA256 payload signature using CLOUD_API_HMAC_SECRET