A personal D&D campaign management tool for Dungeon Masters
DM Hero helps Dungeon Masters organize their D&D campaigns by solving the problem of scattered information across multiple documents. Quickly find NPCs, locations, items, and track relationships between entities with powerful fuzzy search.
- 🔍 Universal Fuzzy Search - Find entities even with typos using FTS5 + Levenshtein distance
- 🗺️ Entity Management - NPCs, Locations, Items, Factions, Quests, Sessions
- 🔗 Relationship Tracking - Link entities with typed relationships (e.g., "lives in", "works for")
- 📝 Session Logs - Track campaign timeline with entity mentions
- 🖼️ Image Galleries - Multiple images per entity with primary image selection
- 📄 Markdown Documents - Rich documentation with live preview
- 🌐 i18n Support - German and English localization
- 🎨 Themed UI - Dark (Midnight Tavern) and Light (Aged Parchment) themes
- Framework: Nuxt 4
- UI: Vuetify 3
- Database: SQLite with better-sqlite3
- Search: FTS5 (Full-Text Search) + fastest-levenshtein
- i18n: @nuxtjs/i18n
- State: Pinia
# Prerequisites: Node.js 22.20+
nvm use
# Install dependencies
pnpm install
# Approve better-sqlite3 native build (pnpm security)
pnpm approve-builds
# Start dev server
pnpm devVisit http://localhost:3000
# Using docker-compose
docker-compose up -d
# Or pull from GHCR
docker pull ghcr.io/flo0806/dm-hero:latest
docker run -d -p 4444:3000 -v ./data:/app/data ghcr.io/flo0806/dm-hero:latestSee DEPLOYMENT.md for detailed deployment instructions.
dm-hero/
├── app/ # Nuxt 4 application code
│ ├── pages/ # Route pages (campaigns, npcs, locations, etc.)
│ ├── components/ # Vue components
│ ├── composables/ # Reusable composition functions
│ └── plugins/ # Vuetify and other plugins
├── server/ # Nitro server
│ ├── api/ # API routes
│ ├── utils/ # Database & migrations
│ └── plugins/ # Server plugins
├── i18n/locales/ # German/English translations
└── data/ # SQLite database (gitignored)
- SQLite with 13 migrations (auto-run on startup)
- FTS5 for full-text search with Unicode normalization
- Soft-delete everywhere (deleted_at timestamps)
- Auto-backup before each migration
This is a personal project, but contributions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes (follow ESLint + Prettier rules)
- Run tests:
pnpm test - Submit a pull request
- Comments: English
- Commit messages: German or English
- Variables: English
- UI text: i18n (de/en)
Run linter before committing:
pnpm lint:fix
pnpm formatMIT © Florian Heuberger
- Built with Nuxt 4
- UI powered by Vuetify 3
- Search powered by SQLite FTS5
- Markdown editor: md-editor-v3