⚠️ This repository has been archived.This project has been migrated to the dnd-platform monorepo:
- New repository: lexicone42/dnd-platform
- Chronicles app:
apps/chronicles/in the monorepo- Live site: chronicles.mawframe.ninja
All future development happens in the monorepo.
A template for creating beautiful static sites to preserve your TTRPG campaign's lore. Built with Claude Code, Astro, and AWS.
"Eleven sessions of adventure across Eberron—from Phandalin to Sharn to the wilds of Xen'Drik. Battles fought, friends lost, and a story worth remembering."
This repository serves two purposes:
- A living example - The complete chronicle of our D&D 5e campaign set in Eberron, featuring 11 sessions of adventure from Sharn's towers to the jungles of Xen'Drik
- A template you can fork - Use Claude Code to help you build your own campaign site with the same structure
| Content Type | Description |
|---|---|
| Sessions | Narrative recaps with automatic entity linking |
| Characters | Player characters and NPCs with full stat blocks |
| Enemies | Monsters and antagonists encountered |
| Locations | Cities, dungeons, taverns, and landmarks |
| Factions | Organizations and their relationships |
| Items | Magic items, artifacts, and loot |
| Spells | Custom or notable spells |
- Full-text search across all content (via Pagefind)
- Automatic entity linking in session narratives
- Interactive D&D 5e character sheets
- PWA support for offline reading
- Dark theme optimized for late-night session prep
- RSS feed for session updates
- Citation tools for the academically inclined
Browse sessions, explore the party, and dive into the world of Eberron as experienced by our group.
# Fork and clone the repo
gh repo fork lexicone42/dndblog --clone
cd dndblog
# Install dependencies
pnpm install
# Start the dev server
pnpm devThen open Claude Code and ask:
"Help me customize this campaign site for my own game. My campaign is set in [your setting] and features [your party]."
Claude Code can help you:
- Update the site branding and theme
- Create new character sheets from your party
- Add session recaps with automatic entity linking
- Define locations, factions, and items
- Deploy to your own domain
Campaign content lives in packages/site/src/content/campaign/:
campaign/
├── characters/ # Player characters and NPCs
├── enemies/ # Monsters and antagonists
├── locations/ # Places in your world
├── factions/ # Organizations and groups
├── items/ # Magic items and loot
└── spells/ # Custom or notable spells
Each entity is a YAML file with frontmatter defining its properties. Session posts in content/blog/ automatically link to entities mentioned in the text.
# Validate all entity cross-references
pnpm --filter content-pipeline validate
# Extract unlinked entity mentions from session posts
pnpm --filter content-pipeline extract
# Process content from external sources
pnpm --filter content-pipeline ingest ./my-content| Layer | Technology |
|---|---|
| Static Site | Astro with content collections |
| Styling | CSS with dark theme variables |
| Infrastructure | AWS CDK (S3 + CloudFront + Route53) |
| CI/CD | GitHub Actions with OIDC (no stored credentials) |
| Search | Pagefind for client-side full-text search |
See docs/DEPLOYMENT.md for detailed AWS deployment instructions.
# Deploy to AWS (requires credentials)
./scripts/deploy.sh --domain your-chronicles.example.com --zone example.com- Architecture - How the site is built and deployed
- Deployment - AWS setup and CI/CD guide
- Character Sheet - Character sheet component system
Apache-2.0 - See LICENSE for details.
Built by a party of adventurers who wanted to remember their story. May your campaigns be as memorable.