A complete digital toolkit for tabletop RPG players and game masters. Manage your characters, run campaigns, and play sessions - all from your browser or phone.
For Players: A digital character sheet that works offline, syncs across devices, and keeps your character safe in the cloud. No more lost paper sheets or forgetting your character at home.
For Game Masters: A complete campaign management system with session planning, encounter tracking, NPC management, and tools to share session summaries with your players.
Built for the Aedelore RPG system, but supports other systems like D&D 5e, Pathfinder 2e, and Storyteller.
| Main Site | aedelore.nu |
| Character Sheet | aedelore.nu/character-sheet |
| DM Session Tools | aedelore.nu/dm-session |
Character Management
- Full character creation with stats, skills, abilities, and inventory
- Lock system for campaign play (DM controls when choices are final)
- Quest items received from your DM appear automatically
- Auto-refresh keeps your sheet in sync during play
Works Everywhere
- Install as an app on mobile, tablet, or desktop
- Works offline - no internet required during sessions
- Cloud sync across all your devices
- Local backup to browser storage
Customization
- 12 visual themes (Aedelore, Midnight, Ember, Forest, Void, and more)
- Custom avatar (emoji or image upload)
- Multiple game system support
Tools
- Integrated dice roller with success levels
- Quick actions for Rest, Heal, Potions
- Export/import characters as JSON
- Print-friendly layout
Account Features
- Cloud save with automatic sync
- Password reset via email
- Trash bin with restore option
Campaign Management
- Create and manage multiple campaigns
- Invite players via shareable links
- Track all characters in your campaign
- Give XP and items directly to player inventories
Session Planning
- Day/time-based session timeline
- Places, encounters, NPCs, and items
- Read-aloud text sections
- Session prolog for recaps
During Play
- Live encounter tracking with HP management
- Mark NPCs as met, places as visited
- Give loot items to specific players
- Event log and turning points
AI Chat (Built-in)
- In-app AI chat for players and DMs
- Lore-aware responses grounded in Aedelore game data and rules
- Multiple model support (Anthropic Claude, OpenAI)
- Credit-based billing via Stripe
AI Assistant (MCP)
- Model Context Protocol server for direct AI integration
- 39 tools (24 DM + 15 player) and 12 prompt templates
- OAuth 2.0 with PKCE authentication
- DM tools: plan sessions, create NPCs/encounters, import content, manage campaigns
- Player tools: build characters, equip gear, track HP/inventory, run solo adventures
- AI updates the character sheet in real-time during play
- Works with Claude Desktop, Cursor, and other MCP-compatible clients
Player View
- Share session summaries with players
- Lock sessions to control what players see
- Players see their quest items, visited places, met NPCs
| Component | Technology |
|---|---|
| Frontend | Vanilla HTML/CSS/JavaScript (PWA) |
| Backend API | Node.js + Express |
| Database | PostgreSQL 16 |
| Web Server | nginx |
| MCP Server | Node.js + @modelcontextprotocol/sdk |
| AI Providers | Anthropic Claude, OpenAI |
| Payments | Stripe |
| Auth | OAuth 2.0 with PKCE, OIDC/Keycloak |
| Cache | Redis 7 |
| Nodemailer (SMTP) | |
| Container | Docker Compose |
- Docker and Docker Compose
- Clone the repository:
git clone https://github.com/TubalQ/aedelore-rpg-tools.git
cd aedelore-rpg-tools- Create and configure environment file:
cp .env.example .env- Edit
.envand set your values:
# Generate secure passwords with:
openssl rand -base64 32 | tr -d '/+=' | head -c 40
# Required:
POSTGRES_PASSWORD=your_secure_password
DATABASE_URL=postgres://aedelore:your_secure_password@aedelore-proffs-db:5432/aedelore
CORS_ORIGIN=http://localhost:9020 # Your domain in production
# For password reset (optional but recommended):
SMTP_HOST=smtp.your-provider.com
SMTP_PORT=587
SMTP_USER=your-email@example.com
SMTP_PASS=your-app-password
SMTP_FROM=YourApp <your-email@example.com>
APP_URL=http://localhost:9020 # Your domain in production- Start the services:
docker compose up -d- Access the app at
http://localhost:9020
| File | What to change |
|---|---|
.env |
Set CORS_ORIGIN and APP_URL to your domain |
.env |
Configure SMTP for password reset emails |
html/manifest.json |
Update name, short_name, and start_url |
html/robots.txt |
Update sitemap URL |
html/sitemap.xml |
Update all URLs to your domain |
nginx.conf |
Set set_real_ip_from to your reverse proxy IP |
The native Android app is currently under development. The android/ directory contains a Kotlin/Jetpack Compose application that will provide a native mobile experience for Aedelore character sheets and campaign tools. It is not yet ready for use.
aedelore-rpg-tools/
├── android/ # Native Android app (under development)
├── html/ # Frontend PWA
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript modules
│ ├── data/ # Game data (weapons, spells, etc.)
│ ├── character-sheet.html
│ ├── dm-session.html
│ ├── reset-password.html
│ ├── manifest.json # PWA manifest
│ └── service-worker.js # Offline support
├── api/ # Backend API
│ ├── server.js # Express server
│ ├── db.js # Database connection
│ └── email.js # Email sending (password reset)
├── docs/ # Documentation
├── compose.yml # Docker Compose config
├── nginx.conf # Web server config
└── .env.example # Environment template
| Endpoint | Method | Description |
|---|---|---|
/api/register |
POST | Create account (requires email) |
/api/login |
POST | Authenticate user |
/api/logout |
POST | End session |
/api/forgot-password |
POST | Request password reset email |
/api/reset-password |
POST | Reset password with token |
/api/account/email |
PUT | Update account email |
| Endpoint | Method | Description |
|---|---|---|
/api/characters |
GET | List user's characters |
/api/characters |
POST | Create character |
/api/characters/:id |
GET | Load character |
/api/characters/:id |
PUT | Update character |
/api/characters/:id |
DELETE | Soft delete character |
| Endpoint | Method | Description |
|---|---|---|
/api/campaigns |
GET/POST | List/create campaigns |
/api/campaigns/:id |
GET/PUT/DELETE | Manage campaign |
/api/campaigns/:id/sessions |
GET/POST | List/create sessions |
/api/sessions/:id |
GET/PUT/DELETE | Manage session |
| Endpoint | Method | Description |
|---|---|---|
/api/dm/characters/:id/give-xp |
POST | Award XP to player |
/api/dm/characters/:id/give-item |
POST | Give item to player |
/api/dm/characters/:id/unlock |
POST | Unlock character sections |
For detailed technical documentation including architecture, API endpoints, database schema, and development guides, see docs/DEVELOPER.md.
Want to see what we're currently working on? Check out the development repository for upcoming features, testing, and experimental changes.
This project is licensed under the PolyForm Noncommercial License 1.0.0.
You are free to view, clone, study, and modify the source code for personal, non-commercial use. Commercial use is not permitted without explicit permission from the author.
Created by TubalQ for the Aedelore RPG system.
- Website: https://aedelore.nu
- GitHub: @TubalQ

