← All projects
Live & explorable

Bookshelf

A public, browsable bookshelf that layers a hand-built semantic index — themes, tags, and book-to-book connections — over a 300+ book reading history.

Livereal & public
Soloone knowledge graph
$0/moinfrastructure
Data flow

How a decade of reading becomes a live, connected shelf — Notion → Worker → GitHub → Pages.

Why it exists

Personal tool first, public utility second. Goodreads is a competent system of record but a poor thinking surface — it can tell you what you read and when, but nothing about how the books relate to each other. Bookshelf adds the layer Goodreads can't: a curated knowledge graph of themes, canonical tags, and cross-book connections that makes a decade of reading queryable and visually navigable. The library itself lives in Notion, where each book can carry private notes and reflections that stay with me and never surface on the public shelf — the public site renders only the slice I choose to publish.

What it is

A single-page site that renders a 300+ book library as a searchable, filterable, visually rich shelf. Each book carries enrichment a reading log doesn't hold — theme assignments, canonical tags, one-line summaries, core ideas, and explicit connections to other books, rendered as a connection graph. The whole library lives in Notion as the editing surface, but only allowlisted, published fields ever reach the public site. A stateless Cloudflare Worker reads the published books out of Notion, rebuilds the data layer, and commits it to GitHub, which deploys the live shelf via Cloudflare Pages.

The hard part

The genuinely hard part wasn't the code — it was the data organization. Pulling a decade of reading into one coherent, queryable structure meant designing a controlled vocabulary of themes and tags from scratch, deciding what enrichment each book should carry, and wiring up a connection graph where books point at each other meaningfully rather than at random. Getting all of that organized, consistent, and clean — so the shelf reads as a real knowledge graph and not a tag soup — was the real work.

Worth highlighting

Self-hosted book covers

The cover images are their own small build. A script finds the right cover for each book, downloads it, and uploads it into GitHub so the images are hosted alongside the site — no third-party image service, no hotlinking. The harder-to-find titles I rounded out by hand, leaving a complete, self-hosted cover set with a clean fallback chain.

Private notes, in Notion

Because the library lives in Notion, every book is also a page I can write on. Notes, highlights, why a book mattered — all of it lives in the Notion page body and never syncs to the public site. The public shelf is the curated face; Notion is the private workshop behind it. One source, two audiences, with a hard line between them.

vibe-coded with ClaudeA personal librarian's knowledge graph, built solo — and the hardest part wasn't the code, it was organizing a decade of reading into something that actually connects.

More projects

← Back to all projects