Skip to content
Brad Johnson, home
All projectsSoftware / 18 of 20

cairhien

A static bookshelf built from my public Goodreads feed, with a spine strip for every year of reading.

Category
Software
Updated
2026-10-05
Status
Built, not deployed yet
Built with
Astro, TypeScript, sharp
The Read page: 2026 with 11 books and 6,442 pages, a strip of colored spines sized by page count, and covers for Sword of Truth, The Starship in the Stone, This Brutal Moon and Brut, above 2025's strip of 33 spines.
My real shelf as of the October 2 sync.

pnpm sync pages through my Goodreads RSS feed 100 books at a time until a page comes back empty. It reads the series from the (Series, #n) suffix on titles, drops duplicate editions shelved twice, applies a small overrides file and writes a JSON snapshot to the repo. The build only ever reads that snapshot, so a feed outage or a format change can’t break it.

There are three pages: what I’m reading now, what I’ve read grouped by the year I finished it, and what’s next. Two or more books from one series in the same group fold into one stacked tile. Under each year is a strip of spines, each as wide as the book is long on a scale shared by every year, colored from its cover. Covers are resized to WebP at build time, so the pages don’t hotlink Goodreads.

The last sync, on October 2, had 205 books: 194 read, 8 in progress and 3 to read, across 47 series.

Next project, 19Lean With It