DM Forge
Started as a tool for my own table. Got out of hand from there.
Intro
I was running my first D&D campaign and doing what every first-time DM does — drowning in browser tabs, scattered notes, a notebook I kept losing, and the creeping anxiety that I'd forgotten something important before every session.
So I built a small app to keep track of it all. Just for me. Nothing fancy.
Then my friends who DM'd wanted to use it. Then it needed proper multi-user support. Then someone asked about AI-generated session recaps. Then a monster compendium. Then a live combat tracker. That's more or less how DM Forge happened — not from a product brief, but from a group of nerds who kept asking "can it also do...?"
It's now a full campaign management platform with AI generation, a session builder, live combat tracking, and a world-state timeline.
The Challenge
The core challenge was scope-specific: that a Dungeon Master actually needs to run a campaign. It turns out the answer is: quite a lot.
A campaign isn't just a list of sessions. It's a world with factions, locations, NPCs, monsters, lore, and history. Sessions have scenes, encounters, branching decisions, puzzles, and loot. Encounters have initiative order, HP tracking, and stat blocks you need at the table in real time. All of it connects — an NPC from the world shows up in a session, gets involved in an encounter, survives, and now the world has changed.
Modelling that interconnection without making the UI feel like a database admin tool was the design problem I kept coming back to. It's still a work in progress.
The Process
Built on Laravel and the TALL stack, with LLM integration via API for the AI generation features. The AI side ended up being one of the most interesting parts — not because the integration is technically complex, but because prompting an LLM to generate a useful NPC (with personality, backstory, motivations and voice) versus a generic one is genuinely a craft problem. Getting the outputs to feel like they belong in your specific campaign world rather than a generic fantasy setting took a lot of iteration.
The session recap feature reads structured session logs — scene notes, decisions, combat outcomes — and generates a written narrative summary. The kind of thing a DM would write up after a session, but rarely does because it's Sunday night and you're tired. That one has been the most universally appreciated feature by people actually using it.
It's still in active development. I play D&D, so I have a naturally renewing supply of things I wish the tool could do.
Lessons Learned
Building something you personally use is a completely different experience from building for a client or a hypothetical user. The feedback loop is immediate and honest — if something is annoying to use at the table at 9 pm with five people waiting on you, you know about it.
The AI generation features also taught me something I didn't expect: the quality of AI output is mostly a prompting-and-context problem, not a model problem. Getting DM Forge to generate an NPC that feels specific and useful rather than generic and forgettable required thinking carefully about what context to pass in and what constraints to put on the output. That thinking transfers directly to how I approach LLM integration in other projects. Friends kept telling me to charge for it. I'm still thinking about it.