live
abominationvaults
Searchable memory for a long-running tabletop campaign.
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
Captures