Case study · personal software

media tracker

One log for everything I play, read and watch. It replaced my use of Letterboxd, Goodreads and BoardGameGeek with a single private site that looks like a printed journal, fed by my personal AI agent. The real design problem: making logging so effortless that I keep doing it, week after week, across a dozen media types. The entries below are real; the live site stays private, and this board is the tour.

01

Three sites, one log

Films on Letterboxd, books on Goodreads, plays on BGG: three accounts, three feeds, three ideas of a rating. The tracker collapses all of it into one place, and a new kind of thing costs nothing to add. Board game night, a new campaign, a restaurant worth remembering: same log.

letterboxd goodreads boardgamegeek one log

20 entry types, and adding a new one is trivial

03

The diary feed

The real feed component with real entries. Filter by type, or flip between the reading view and the index view: browsing and finding.

Diary 9 ENTRIES
02

Designed to be actually used

The hard part was never storage. It was designing a product I would still be logging into a year later.

04

Shelves: the collection view

Every hobby gets a shelf. Covers are fetched automatically when an entry is created; ratings sit in the corner. Slices of two shelves:

Board games

RPG systems

05

On the table right now

The book on the nightstand and the mid-campaign RPGs surface above the log. Opening the site answers "where was I?" in one glance.

This year 31 entries logged
JAN–AUG
06

Every thing gets a page

Facts, my play history and comments on one page. Guests can leave a comment; I approve it before it appears.

Board Game

War of the Ring: Second Edition

R. Di Meglio · M. Maggi · F. Nepitello · 2011

My rating9/10
Players2–4
Playtime240 min
PublisherAres Games

No comments yet. Were you at this table?

Leave a comment…

Andreas reads it first; it appears once approved.

07

Ask it anything

Free-text questions become SQL: one model call drafts a query against the schema, a second validates and repairs it, and the result renders as an answer with its table. Guests get this too, with one boundary: their questions run against a scrubbed public copy of the database, never the live one.

Which RPG system did we play most this year?

Generated + validated SQL

SELECT system, COUNT(*) AS sessions FROM entries WHERE type = 'rpg_session' AND finished_at >= '2026-01-01' GROUP BY system ORDER BY sessions DESC;

Answer

A tie: Call of Cthulhu 7e and Mothership 1e, five sessions each.

SystemSessions
Call of Cthulhu 7e5
Mothership 1e5
Starfinder 2e4
08

Logging is a chat message

This is the usability insight the whole system rests on. If logging means meticulously filling fields on three different sites, it stops happening. So the main entrance is a conversation: I paste rough notes and a couple of photos from the table into a chat with my agent, and it structures everything into the right fields, which render in the log immediately. The site has a full editor too, but the point is that the lazy path is also the good path.

1 · Dump it in chat

starfinder session tonight, we finally cleared the tunnels. rough notes below, plus two pics from the table
2 PHOTOS

2 · The agent structures it

type: rpg_session title: Digital afternoon session system: Starfinder 2e finished_at: 2026-04-25 photos: 2 attached notes: cleaned-up recap

3 · Rendered in the log

25 APR RPG Session Digital afternoon session (Starfinder 2e) Cleared the tunnels at last
09

The look is part of the habit

It reads like a printed journal, not a dashboard: warm paper, near-black ink, one accent, and a type system where every label, weight and rule was a deliberate choice. There is a full dark theme; these plates follow it.

War of the Ring: Second Edition

Fraunces sets titles and numbers. Instrument Sans carries reviews, notes and running text.

JetBrains Mono labels everything else

Under the hood: SQLite + Datasette with custom templates, largely built with Claude Code. The product thinking, design system and usability decisions are the human part.