Most reading trackers feel like spreadsheets dressed up in book covers. They tell you what you read and when, but they don't capture what a reading life actually looks like: the stacks of paperbacks colonizing the floor, the dedicated shelf for local authors, or the graveyard box of books abandoned halfway through.
For years, I’ve tracked my reading on BookWyrm - the federated, open-source antidote to Goodreads. Because it runs on ActivityPub, anyone on Mastodon can follow my shelves simply by searching for @drkprmbs@bookwyrm.social. It works really well, but visually it’s still just rows of sterile thumbnails.
I wanted something tactile and slightly unhinged. Enter the reading room.

It began as an idealized representation of physical shelves.
The main bookcase holds everything I’ve finished, sorted alphabetically by author.
The side table next to the armchair holds what I’m currently reading.
Floor stacks harbor the aspirational to-read pile. (the list I pick my next book from)
A cardboard box holds the books I gave up on, tucked away without guilt. Life is too short to read books you don't enjoy and there is always more to read than you will ever have time for.
I'm learning a lot about my home of choice through literature. The dedicated Canadiana shelf shows this group separately.
Once I got the foundational layout I started paying attention to details. Thick books occupy actual shelf real estate, and each spine derives its palette directly from the cover art. Hovering over a book brings up my rating and review; clicking opens a card with the description and page count. That way this page becomes a real interface to my bookwyrm profile, not just a pretty illustration.
The aesthetic owes everything to an old computing trope: 90s screensavers. Back when CRT monitors needed constant motion to avoid burn-in, utilities like Johnny Castaway kept us entertained with tiny, ambient dramas on an island or at a bus stop. You didn't control them. You just walked away, and occasionally something small happened.
I wanted the room to feel alive in that exact, low-stakes way.
The window behind the armchair is tied live to Environment Canada. If Toronto is blanketed in rain, fog, or snow, the window matches. When the sun sets over the CN Tower, the room dims and the floor lamp switches on. The calendar dictates the decor: right now there are carved pumpkins, a spiderweb, and fallen leaves on the floorboards. In December, an Advent wreath lights an additional candle every Sunday, and come June, the rug turns into a pride rainbow.
Almost everything is reactive. Click the cat and it startles awake, surveying the room with narrow-eyed suspicion before curling back up. Click the leaves and a draft scatters them across the floor. Click the CN Tower... well, just try it. If you leave the tab open long enough, wandering wildlife will pause on the window ledge - a cardinal in winter, a monarch butterfly in summer, or a moth on a humid night.
Navigation is built directly into the furniture. The door on the right leads to primbs.ca, while the typewriter on the lower table links back here to Unprompted.
Under the hood, a small Python script fetches my public BookWyrm profile and ActivityPub review feed, baking the entire state into a single static page. Once a day, a job checks for changes; whenever I finish a book, the room rebuilds and deploys automatically.
If you want to poke around without waiting for a Toronto blizzard or next season's holiday, Norbert - the jarred brain sitting quietly on the bottom shelf - knows how to open the backstage controls.
If you like to see how it is done, check out the source code.
Comments
Replies come from Mastodon and Bluesky. Reply on Mastodon or Bluesky to join in.