Chapel is where I keep the things that moved me — books, poems, paintings, songs, films, quotes — and let them talk to each other.
Most reading apps end at the list. You log a book, it sits in a row, and that's it. Chapel begins where the list ends. You light a node for each work that stayed with you, and the app weaves those nodes into a graph of shared themes, shapes, lineages, and time.
The same library can be rendered eight different ways. A force-directed map of your whole collection. A daily "window" built from a single seed word. A jigsaw of works that interlock around a theme. An ancestry tree of who influenced what. A timeline that spans centuries. Or a "living essay" you write with @-mentions of your own collection.
Underneath, Claude does the connective tissue: it reads sparse entries and fleshes them out with author, year, cover art, movement, and themes; it identifies a painting from a photo; and it composes each visualization as structured data the app renders directly — no chatbot, no chat window, just compositions.
Built for a single curator, open for anyone to wander. Anyone can sign in and browse; only an allowlist can write. The whole thing lives on Firebase and costs almost nothing to run.
A new window opens each day. Each one casts your constellation differently — and arrives by email at 9am.
Every mode is just a different render of the same nodes. Each colour below is one of Chapel's eight work-types.
Chapel is a React + Vite single-page app on the front, and a single Express server deployed as one Firebase Cloud Function on the back. Firestore is the source of truth; Cloud Storage holds uploaded covers and artwork photos. There's no database I babysit and no server I keep warm.
The key design idea: Claude never returns prose to paste into a chat bubble. Every model call returns structured JSON — a visualization spec, a lineage tree, a jigsaw layout — and the frontend renders it directly. Adding a new way to see the collection is mostly a new page plus a new endpoint that returns its own spec.
Capture is the unglamorous half that makes the rest work. You can add a work by title, by URL, by dragging in an image, or in bulk from a spreadsheet. Claude + the metadata services then flesh out the sparse entry — author, year, cover, medium, movement, tags — so the graph has something real to connect. Point your camera at a painting and Claude Vision returns title, artist, year, and movement.
Security is boring on purpose. Reads are open; writes are gated by an email allowlist enforced both client-side and in server middleware, on top of Firestore security rules. The Firebase web config is public by design — it ships to every browser — and the real keys live only in server-side environment variables, never in the repo.
Drop this into Claude (or your coding agent of choice) to scaffold your own Chapel. Tweak the work-types and the views to taste.
This is the shape of Chapel, not a copy of my code. The actual source — every view, the Claude prompts, the metadata plumbing — is open on GitHub if you'd rather read the real thing.
I recorded myself building Chapel — working through the ideas, the dead ends, and the moments it clicked. Click any frame to play.