Dungeon Church D&D Software Stack

Dungeon Church D&D Software Stack

The real monster that every Dungeons & Dragons group faces is the most diabolical: scheduling. As my little RPG game grew over the years from a few close friends playing through the Starter Set to a homebrew world where many heroes have sought adventure, organizing the game and keeping track of all my notes came to take up increasing amounts of my time as Dungeon Master. Organizing humans in real life is hard. Being a huge nerd and a cheapskate, I thought: how can I solve this with free software?

This post was inspired by a thread in r/selfhosted about using software tools to manage your hobbies.


With the recent Hasbro-Wizards controversies in mind, I've been wanting to move completely away from using D&D Beyond and other official products in our group. I also wanted to avoid signing up for more subscription services. We already use Discord for private chat and I set up Outline wiki years ago to track our setting, so how to bridge those to a method of communication and collaboration that we own?

The Software

  • Ghost - this public website, email newsletters and automated reminders
  • Outline - lore wiki for our homebrew setting
  • 5E Tools - Community compilation of D&D content and tools
  • Homebrewery - Convert Markdown (from Outline or 5ETools) to nice print pages
  • Discord - private group chat
    • Sesh.FYI - RSVP and calendar bot (not self hosted)
    • Red Bot - the self hosted, extensible Discord bot to rule them all
  • Node-Red - low code API magic to connect our services, syndicate to social, sync Discord roles to Ghost, etc.
  • FoundryVTT - VTT platform we used over lockdown
    • Plutonium - Import content from 5E Tools to FoundryVTT
    • DDB Proxy - If you are stuck in WotC subscription land, you can import your content with this

Discord is what we started using over lockdown for chat. One of the best things about Discord is the bot tools and integrations. I like the Sesh bot enough to pay for it, but you could easily roll your own RSVP workflow with Red.

Ghost is an amazing, modern blogging platform that natively supports newsletters. I use this function to schedule reminders to players based on their RSVP status in Discord.

Outline is by far my favorite wiki software. Beautiful user interface, Markdown based, integrates and embeds almost anything into your articles, supports real time collaborative editing, excellent template support, advanced permissions, works great on all devices, I could go on... everyone loves it.

5E Tools is what I use as Dungeon Master for reference and running games with the DM Screen tool. When we played online over pandemic, we used FoundryVTT with Plutonium to integrate the two and Discord for video chat.

Node-Red is the glue that holds all this together and handles API requests between these services.

Server & Deployment

I deploy all the self hosted aspects of this infrastructure on a free Oracle Cloud instance using Docker Compose. OCI is it's own special type of evil sorcery, fortunately the nice folks at Foundry wrote an excellent guide to setting up a OCI "Always Free" server.

If you failed your Constitution check reading that link, you might want to just use a provider like DigitalOcean instead. Even the cheapest droplet is enough to run the software I'm using here.

Use my DigitalOcean referral link to get $200 in free credit
My complete docker-compose.yaml and other files are here on Github

I've also included some sample flows for Node-Red, to hopefully give you some ideas. I am not a programmer, but with enough coffee and ChatGPT I was pretty easily able to hack together these services.

Node-Red flow to push Ghost posts to Discord announcements

Dungeon Mastering

So how do I actually put this stuff to work?

Scheduling a Game

We play at a regular date and time, so once I'm ready to put the next game on the calendar this is my workflow:

  1. Create an event using Sesh bot + Discord
  2. Schedule emails in Ghost - All Players get an email when the game is announced, Not RSVPed players get reminders at regular intervals, RSVPed Players get a reminder 48 hours before the game.
  3. Node-Red syncs the RSVP roles from Discord to the Ghost newsletter lists automatically. It also pushes the appropriate posts to Discord & social media.

This allows me to set up all the aspects of organizing all at once, schedule the emails, and sit back and let the bots handle the rest. That way I can focus on the fun parts of DMing - figuring out what monster I'm going to throw at the players and what kind of beer I'm bringing to the session.

Organizing the Lore

Outline is our source of truth for our homebrew setting. Whenever we play a game, I write up a session summary and create new entries for NPCs, Locations, homebrew Items, or anything else. Outline supports templates, which I use for common stuff like stat blocks. When new players to our group are onboarded, I link them to the player info pages in the wiki and ask them to contribute their character backstory and upload their character sheet.

Over the years our wiki has grown and expanded with our setting, and it's very satisfying to look back at all the people we met and places we went along the way.

Prepping & Running a Game

I set up a private collection for my own notes in Outline that players can't see, and I make extensive use of 5E Tools for referencing stat blocks and other info. Since Outline supports embedding tons of things this allows me drop my Youtube background music or Midjourney generated visual references straight into my notes.

When it's game time, I use the 5E Tools DM Screen to bring everything I need into one place. Usually, I split screen a view of my Outline notes with the Combat & Initiative Tracker. You can embed any content or rule from the D&D universe.

Outline notes embedded into 5E Tools DM Screen

Further Experiments

Just for fun, I've been able to do some cool stuff with this software stack.

Roll for Food

We seem to always have trouble choosing a restaurant for delivery, so I solicited ideas on a Google Sheet and made a /rollfood command to pick one at a random.

Lore in the Chat

Obviously, you want to be able to drop that dank lore from the wiki into the chat at a moment's notice. Rigging up a /lore command for Discord was fairly straight forward.

AI + CustomGPT

One great side effect of having a wiki that contains all your notes and setting information is that it's very easy to export it all in plaintext and throw it into the gaping maws of our AI overlords.

Using OpenAI's CustomGPT tool, I've uploaded the contents of my wiki, given it API access to Outline, and copies of the rulebooks. This has become an indispensable tool for game prep, saving me tons of time with the kinds of busy work DMs often get stuck with like generating stat blocks for NPCs, brainstorming plot points, or summarizing my scatterbrained notes.

One big tip for exploring this yourself, if you want your generated things to be rules accurate instead of hallucinations include this in the GPT prompt:

All character sheets, items, dice rolls, or any other request having to do with the rules and mechanics of the game should be done in Code Interpreter when applicable to ensure they are correct.

I know it's controversial in the RPG hobby, but I look forward to experimenting with these AI tools more.

Further Reading

Thanks for following this long journey, I hope it's given you some ideas on how you can better organize your friends or game to get off the internet and congregate over some dice & snacks in the real world.

If you'd like to follow my future adventures in DMing, add me on Bluesky, Twitch, or Reddit.If you're in the SF Bay area and like to play D&D, join us.