live

abominationvaults

Worlds
Preview unavailable The details below still apply. Force-directed relationship graph of the campaign with ~170 colour-coded character, faction, and location nodes.
Relationship graph

Searchable memory for a long-running tabletop campaign.

Product and tooling · 2026

Campaign memory for a long-running Pathfinder campaign. It reads in session logs and turns them into a force-directed relationship graph, a "catch-up" recap generator, a filterable timeline, a stats dashboard, an open-loop thread board, and full-text search.

A personal, non-commercial fan tool for a published Pathfinder adventure (an independent Paizo product). The public showcase shows only the tool’s own interface and data, and the adventure’s copyrighted art and maps stay off it. The in-app campaign Q&A stays behind a password.

Read case study brief · what i owned · key decisions · what shipped · evidence · result · implementation

The problem

After dozens of sessions, chronological notes stop being enough. Returning players need to find relationships, unresolved threads, recent context, and the source behind an answer, and none of that can expose the private capture material.

What I owned

  • I did the product design and tooling for the public campaign-memory interface. DungeonNotes stays behind it as the private capture side.

Key decisions

  • Model people, places, factions, sessions, and open threads as connected memory, not one long recap document.
  • Keep citations and searchable session context next to each generated recap, so the tool can show where an answer came from.
  • Keep the public interface and redacted data apart from private transcripts, table audio, player-only context, and licensed adventure art.

What shipped

  • A force-directed relationship graph of about 170 PCs, NPCs, factions, and locations.
  • Personalised "catch-up" recaps, a per-session timeline, and an open-loop board for unresolved threads.
  • A "campaign wrapped" stats dashboard with cited, searchable session memory.

Evidence

  • The live public site has the relationship graph, catch-up workflow, timeline, wrapped statistics, open-loop board, and search, and none of it needs access to the private capture material.
  • Interface captures show the graph, timeline, wrapped, and open-loop workflows.

Result

  • A campaign of 60-plus sessions is now something you can browse, and the capture and sensitive table context underneath it stay private.

Implementation

  • Python
  • Campaign Memory
  • Search
  • Data Viz