Chronicle: TTRPG Campaign Notes App, Built with Lovable by Andrés Sepulveda MoralesChronicle: TTRPG Campaign Notes App, Built with Lovable by Andrés Sepulveda Morales
Built with BuildShip

Chronicle: TTRPG Campaign Notes App, Built with Lovable

Andrés Sepulveda Morales

Andrés Sepulveda Morales

Chronicle is the note-taking app I built for my own tabletop campaigns. I've run games for years, and campaign notes always end up the same way: one doc for lore, another for NPCs, a third for that one player's backstory. I wanted something I could type into mid-session without breaking the moment, that worked without a connection, and that sorted itself out later. Click through a demo campaign at dice-notes.lovable.app, no account needed; the code is public on GitHub.
Building with an AI app builder and want it to hold together? I set up the rules, the design system and the release log that keep the builder consistent, then build with it. Book a call at cal.com/andres-sepulveda-morales or email andres@redmage.cc.

Capture first, sort later

Kanka inspired the structure: every campaign gets its characters, places, items and organisations, all linked. Kanka is a great campaign wiki. At the table I needed speed more than a wiki, so Chronicle puts one action at the centre: write a "thought".
A thought is a short note tagged with the entities it mentions. Ctrl+Enter saves it, default tags carry over between notes, and an in-game date can go on it. Sorting happens between sessions.
Kanka's campaign structure, the model I started from. Go support it!
Kanka's campaign structure, the model I started from. Go support it!
The core screen: recording a thought.
The core screen: recording a thought.
Entities, with their links and how often they come up.
Entities, with their links and how often they come up.

Three files that keep the builder honest

I had about 400 Lovable credits left over, so I built Chronicle in Lovable. An AI builder will happily make a third button style or skip the release notes. Three files gave it the same memory every time.
Development Rules. A rules file in the repo, mirrored in Lovable's knowledge tab so it stays under version control. Six rules: check the design system before making a component; update the changelog on every change; clean-code conventions for hooks, types and error states; testing standards; a step-by-step checklist for data migrations; and how entity attributes work. One line tells the builder to look up today's date instead of guessing it.
Design System page. A live page inside the app with every shared piece: type, colours per entity type, buttons, forms, cards, loading and empty states. A new component goes on the page before it goes in a feature, so the builder reuses it.
Changelog page. A live page grouped by Conventional Commits type, with a version number the footer repeats. It holds 49 releases, through 1.6.20.
The Development Rules file in the GitHub repo.
The Development Rules file in the GitHub repo.
The Design System page, the first stop before any new component.
The Design System page, the first stop before any new component.
The Changelog page, following Conventional Commits.
The Changelog page, following Conventional Commits.

Offline first, synced by hand

Games happen in basements and on trains. Notes save to the device first, and a banner counts pending changes until I choose to sync.
Sync goes through BuildShip to MongoDB, whose flexible documents suit messy campaign notes, and Supabase handles accounts. Because notes live on the device, a change to the data shape needs a migration that runs on each device, which is why the rules carry a migration checklist and a registry of schema versions with tests.
How Chronicle fits together. The data lives in MongoDB as documents.
How Chronicle fits together. The data lives in MongoDB as documents.
The Create Document flow: Chronicle to BuildShip to MongoDB.
The Create Document flow: Chronicle to BuildShip to MongoDB.

The graph view

Later I added a graph of the campaign: every entity as a node, coloured by type, with arrows from child to parent and a click through to the entity's page. The first graph library crashed on hover. The changelog made each attempt easy to follow, and the view moved to react-force-graph, with a control panel for filters, legend and options.

Where it stands

Chronicle is the tool I use for my own table, in alpha, with sign-up by invite. The repo holds 198 commits and 14 test files.
Want your app to stay coherent past the first weekend? I'll set up the rules, design system and changelog for your Lovable project, or build it with you. Book a call at cal.com/andres-sepulveda-morales or email andres@redmage.cc.
Like this project

Posted Oct 12, 2026

A web app for tabletop campaign notes: quick thought capture, linked entities, offline-first sync. Built in Lovable.