Building a Self-Hosted Wiki for My Advanced Dungeons & Dragons Campaign

As a long-time Dungeon Master, I’ve accumulated years of campaign notes, character histories, world lore, and session recaps scattered across notebooks, Google Docs, and hastily scribbled index cards. I finally decided it was time to consolidate everything into a proper wiki—one that I could control, customise, and access from anywhere.

Why Self-Host?

There are plenty of hosted wiki solutions out there, but I wanted full control over my data and the flexibility to tinker with the setup. Self-hosting means my campaign lore isn’t subject to someone else’s terms of service, and I can back up everything on my own schedule. Plus, there’s something satisfying about running your own server.

The Technical Stack

Windows Server and IIS

I’m running the wiki on a Windows machine using Internet Information Services (IIS) as the web server. While many people opt for Linux and Apache or Nginx for this sort of thing, I was already comfortable with Windows Server administration, and IIS handles PHP applications perfectly well once you’ve got the configuration sorted.

Setting up IIS involved enabling the Web Server role, installing PHP via the Web Platform Installer, and configuring the appropriate handler mappings. The trickiest part was ensuring the correct permissions were set on the wiki directories so that the web server could read and write files as needed.

Cloudflare Tunnel for Security

Exposing a home server directly to the internet is asking for trouble. Instead of opening ports on my router and dealing with dynamic DNS, I set up a Cloudflare Tunnel. This creates a secure, outbound-only connection from my server to Cloudflare’s network, meaning:

  • My home IP address stays hidden
  • No ports need to be opened on my firewall
  • I get Cloudflare’s DDoS protection and SSL certificates for free
  • I can add access policies to restrict who can reach certain pages

The setup was straightforward: install the cloudflared daemon, authenticate with my Cloudflare account, and create a tunnel configuration pointing to my local IIS server. Within minutes, my wiki was accessible at a proper domain without any of the usual security headaches.

Enter Claude: AI-Assisted World Building

Here’s where things get interesting. I’ve been using Claude, Anthropic’s AI assistant, to help create and edit content on the wiki. Using Claude Code, I can ask Claude to:

  • Generate detailed NPC backgrounds based on a few bullet points
  • Flesh out location descriptions with atmospheric details
  • Create consistent formatting across wiki pages
  • Write up session recaps from my rough notes
  • Develop interconnected lore that references existing wiki content

Claude can directly read and edit the wiki files, which means I can have a conversation about what I want to add to the campaign world, and watch as the pages update in real-time. It’s like having a collaborative writing partner who never gets tired and has read every fantasy novel ever written.

The workflow typically looks like this: I’ll describe a concept I have in mind—perhaps a new faction or a mysterious location the party might discover—and Claude helps me develop it into fully-formed wiki content, complete with cross-references to existing lore and hooks for future adventures.

Check It Out

If you’re curious to see the result, the wiki is live at adnd.timallan.uk. It’s a work in progress—much like any good D&D campaign—but it’s already become an invaluable resource for keeping track of the sprawling narrative we’ve built over countless sessions.

For fellow DMs considering a similar setup, I’d encourage you to give self-hosting a try. The combination of full control over your data, modern security through services like Cloudflare, and AI assistance for content creation makes for a powerful toolkit. Your players might even appreciate having a proper reference for all those NPCs whose names they’ve definitely, absolutely remembered.


Leave a Reply

Your email address will not be published. Required fields are marked *