Scheduling assistant for TTRPG groups. Intended as a selfhosted replacement for RollRota.
- Python 67.4%
- JavaScript 32.2%
- Dockerfile 0.2%
| .forgejo | ||
| bot | ||
| docs | ||
| scripts | ||
| webapp | ||
| .env.example | ||
| .gitignore | ||
| .gitmessage | ||
| .pre-commit-config.yaml | ||
| ARCHITECTURE.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| docker-compose.dev.yml | ||
| docker-compose.override.yml | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| TEST_FIX_STATUS.md | ||
Quest Board
Quest Board is a self-hosted TTRPG campaign hub for groups who want scheduling, Discord coordination, session memory, and campaign lore in one place instead of spread across calendars, chat logs, and wikis.
Read This First
- Production Operations
- Development Guide
- OIDC and Discord Integrations
- API Reference
- Enhancement Roadmap
- Completed Roadmap Work
What It Does
- OIDC sign-in with providers like Authentik, Keycloak, and Google
- Session scheduling with vote, direct, and tentative modes, plus per-session voting grids and GM confirmation flows
- Campaign-level reminder scheduling with Discord delivery, configurable offsets, and webhook or bot-backed notifications
- Discord reaction voting, attendance RSVP, account linking, and bot commands like
/next,/recap,/note,/ask, and/record - Voice session recording with transcript upload, attributed speaker capture, review/approval workflow, and AI-generated summaries
- Session pages with private player notes, GM-shared notes, calendar export links, attendance tracking, and responsive dashboards
- Campaign journals that combine session history, recap content, and public notes into a readable campaign record
- Campaign milestones for tracking major events, linked sessions, dates, and long-term progress beats
- Campaign analytics for attendance, participation, and session cadence
- A campaign wiki with article pages, relationships, structured sidebar fields, timeline events, aliases, version history, and search
- Player-character wiki support with owner roles, private character notes, campaign-page linking, and player-editable public character pages
- Lore pipeline automation that turns approved session recordings into reviewable wiki proposals, relationship updates, and campaign-memory tooling
Production Quick Start
1. Clone and configure
git clone https://git.rhoving.com/rbrooks/Quest-Board.git quest-board
cd quest-board
cp .env.example .env
Update .env for your real deployment values. At minimum:
- set
APP_URLandQUESTBOARD_PUBLIC_URLto your public URL - set
OIDC_REDIRECT_URItohttps://your-domain/auth/callback - set strong values for
SECRET_KEY,POSTGRES_PASSWORD,POSTGRES_MIGRATE_PASSWORD, andBOT_API_KEY - configure your OIDC provider settings
- add
DISCORD_BOT_TOKENif you want bot features enabled
The full environment reference lives in .env.example.
2. Start the stack
docker compose up -d
Or:
make up
3. Run the guarded migration workflow
make migrate-safe
This is the preferred production migration path. It:
- runs a schema sanity preflight
- writes an immediate
pg_dumpsnapshot under/app/backups - applies
alembic upgrade head
4. Put it behind a reverse proxy
Quest Board expects external TLS termination. Point your reverse proxy at the frontend HTTP port exposed by the stack.
5. Finish app configuration
- sign in through your OIDC provider
- configure
Admin -> Bot Settings - configure campaign-level Discord settings if needed
See docs/OPERATIONS.md and docs/INTEGRATIONS.md for the detailed production setup steps.
Updating Production
git pull
docker compose up -d --build
make migrate-safe
If you want a manual snapshot before a risky change:
make backup-now
Useful Make Targets
make help
Common operations:
make upmake downmake logsmake migratemake migrate-safemake backup-nowmake set-admin EMAIL=user@example.com
Notes
- Review the code before running it in production. This project has been developed with AI coding assistance and may contain mistakes.
- Development instructions have moved to docs/DEVELOPMENT.md.
- Integration setup details have moved to docs/INTEGRATIONS.md.