- TypeScript 92.6%
- JavaScript 4.4%
- CSS 3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| apps/campaign-platform | ||
| docs | ||
| fixtures | ||
| packages | ||
| scripts | ||
| tests | ||
| tools | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| AGENTS.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| vitest.config.ts | ||
RPG Campaign Platform
Self-hostable web software for managing tabletop RPG campaigns, characters, NPCs, monsters, game systems, versioned campaign settings, persistent campaign history, themes, and playable character sheets. Clone the repo, run an instance, and fill it with your campaigns and characters.
The current app lives in apps/campaign-platform/. latitude.ronhelwig.com is one operator's instance (a classroom MVP), not the canonical dataset. Runtime data stays on the host (apps/campaign-platform/data/ locally) and is not part of this repository.
The project is intended to be comparable in scope to tools like D&D Beyond, while remaining system-neutral. Game masters should be able to create campaigns, choose a game system and visual theme, create invite links for players, manage characters and campaign actors, and keep multiple campaign character views open during play. Players should be able to join campaigns from invites, create and edit characters, use those characters live at the table, and roll from character sheets or cards. Campaign assignment of characters is GM-controlled (players do not reassign campaigns themselves).
The platform is explicitly not a social network. It can publish read-only characters, campaigns, histories, and cloneable settings at links users share elsewhere, but it will not provide followers, feeds, likes, comments, direct messages, or a public social graph. Characters are externally visible only with both player consent and public-campaign consent.
This is a new project rather than a refactor of rpg-character-cards. The older project may provide content, import/export formats, rendering lessons, and printable card/PDF generation ideas, but this platform should be designed as a hosted multi-user web application from the beginning.
Current Status
Each install is a single instance (Node/TypeScript, SQLite + files; IPFS optional later): invite-only access, passkeys and/or username+password plus Sign-in with Dash, GM-created campaigns, and print packages from the site. Federation is not required to run an instance, but the design should stay federation-capable.
Longer-term design still lives in docs/SPECS.md, docs/ARCHITECTURE-DIRECTION.md (privacy-minimal, self-hostable, federated later), and the disposable federation lab in docs/SECOND-PROTOTYPE.md. Federation and multi-home sync can wait until a single-host instance is solid.
Also: docs/BUSINESS_PLAN.md, docs/SUSTAINABILITY-MODEL.md (including an optional later idea: hosted convenience subscriptions before federation, then moving accounts/campaigns between competing hosts), docs/DASH-INTEGRATION.md, docs/FEDERATION-AUTH-SYNC-RESEARCH-2026-08-07.md.
Run an instance
npm run dev:lan
# The launcher prints the LAN URL on port 8766. First visit creates the owner
# account; campaigns start empty unless you opt into example seeds.
# Use npm run dev only for loopback-only testing.
Implementation lives in apps/campaign-platform/. Production notes
are in apps/campaign-platform/deploy/. Set
CAMPAIGN_PLATFORM_PUBLIC_BASE_URL (and related env) to your hostname.
After the owner exists, npm run seed:system-labs adds generic SRD sample
characters for the bundled D&D rules profiles.
Checklist: docs/TASKS.md.
Campaign data
Keep campaign plans, player records, portraits, and operator deployment notes in a private data repository. This checkout contains reusable software and generic examples. See data discipline and migration guidance.
Goals
- Hosted campaign and character management.
- Game-master and player accounts.
- Campaign membership and permissions.
- Invite-link based campaign joining.
- System-neutral character data and rules.
- Live character editing and play views.
- Click-to-roll support from sheets and cards, contributing to a persistent campaign history.
- GM dashboard with multiple character tabs.
- Campaign-level game system and theme selection.
- Characters active in at most one campaign at a time; GM-only assignment/reassignment.
- First-version import from
rpg-character-cardsandchar_vaultcharacter data. - Operator-configured image imports and campaign-specific image styles.
- MyRPG canon rules support from
myrpg.ronhelwig.com. - Open-license game system variants and GM-authored homebrew derivatives.
- Wiki-like campaign settings with structured rules, lore, versioning, cloning, attribution, public links, and an approval-based AI editing assistant.
- Privacy-safe public campaigns that substitute anonymous placeholders for non-public player characters.
- Future book, play, and screenplay drafts derived from canonical campaign histories without rewriting the history itself.
- Import/export support for portable data.
- Future printable cards, sheets, and PDFs.
Relationship To rpg-character-cards
rpg-character-cards is a local Python PDF/card generator. This project is a hosted web platform.
Possible future integrations:
- Import existing
.rpgdatacharacters. - Import
.rpgcardcard definitions. - Reuse or translate card/theme content.
- Reuse character sheet, backstory page, and card display patterns.
- Export printable PDFs or cards using a newer renderer.
- Preserve local file portability where practical.