Back to Projects
Case Study

The Visible Shelf

A visual book library. 99 books photographed, categorised by vibe, and turned into a browsable gallery with social cards. Your shelf is autobiography.

Visit thevisibleshelf.com
thevisibleshelf.com
The Visible Shelf website screenshot

Your shelf is autobiography

I have this theory that you can learn more about someone from their bookshelf than from their CV. Not what they say they've read, not their Goodreads profile curated for public consumption, but the actual physical books sitting on their shelves. The dog-eared ones. The ones they bought twice because they forgot they already owned it. The one they've never finished but can't bring themselves to get rid of. Your shelf tells the story of who you were, who you are, and who you're trying to become. I wanted to make mine visible.

The Visible Shelf started as one of those ideas that had been sitting in my notes for months. Photograph all my books, build a visual library, maybe create some social posts about the covers. What it became was something more interesting: a vibe-based gallery where 99 books are organised not by author or genre, but by how they feel. Strategy books next to design monographs next to cultural criticism. Because that's how they actually sit on my shelf, and that's how I actually think about them.

Phone photos to gallery site

The pipeline is surprisingly simple. It starts with phone photos of each book: the cover, taken on whatever surface is nearby, no studio lighting, no fancy setup. Those photos go through a Python workflow that handles everything else. add-book.py is the master script that orchestrates the whole thing. process-photos.py cleans up the images: crops, resizes, and optimises them for the web. enrich-book.py pulls in metadata: title, author, description, and any other details worth knowing. Then generate-site.py takes all of that and builds the full gallery site with browsable categories, individual book pages, and shareable social cards for each title. Photo to published in minutes.

"Show me your bookshelf and I'll tell you who you are. Not the books you say you've read on LinkedIn. The actual, physical, coffee-stained, spine-cracked books you own. That's the real reading list."

Why it works the way it works

Phone photos, not stock images. I could have pulled clean cover images from Amazon or Google Books. Every book has a perfect hi-res cover image available somewhere. But that would have been someone else's version of my shelf. The whole point is that these are my copies, with my wear and tear, photographed in my flat. The slight imperfections are the point. A phone snap of a battered paperback says something a stock image never could.

Vibe-based, not alphabetical. Nobody browses their own shelf alphabetically. You don't think "I fancy something from the D section tonight." You think in vibes: something about strategy, something visual, something that'll change how I see things. The categories on The Visible Shelf reflect how I actually relate to these books, not how a librarian would file them. It's curation by feel, and it's the only honest way to organise a personal collection.

Static site, not a database app. This didn't need user accounts, search algorithms, or a backend. It's one person's book collection. A static site is fast, free to host, and perfectly suited to the job. The Python scripts generate everything at build time. No servers to maintain, no databases to manage. It's a gallery, not a platform, and it should feel like one.

Social cards for every book. Each book gets its own shareable card: a designed image with the cover, title, and a short take. Because the best book recommendation isn't a five-star rating on Amazon. It's your mate sending you a photo of a book and saying "read this." The social cards are built for that moment. They're designed to be shared in DMs, on stories, on feeds.

Lessons from building a library

The collector instinct is real. Once you start photographing your books, you can't stop. Every book becomes a small decision: include it or not? And those decisions reveal something about you. The books I left out are almost as interesting as the ones I put in. Curation is editing, and editing is identity. This project made that uncomfortably clear.

Imperfection is a design choice. The phone photos could be "better." The lighting varies, the backgrounds aren't consistent, some covers are creased. I tried cleaning everything up and it lost its soul. The imperfection is what makes it feel like a real shelf and not a bookshop catalogue. Sometimes the amateur quality is the quality.

Automation frees you for the interesting work. Writing the Python scripts to handle image processing, metadata enrichment, and site generation took time upfront. But once they worked, adding a new book takes seconds. The boring parts are automated. The interesting part: choosing what goes on the shelf, writing the descriptions, deciding the vibes: that's where the human work is. That's the bit that matters.

"99 books. Not my 99 favourites. Not the 99 smartest books I own. Just 99 books that, taken together, are a weirdly accurate portrait of who I am and how I think."

99 books catalogued Vibe-based categories Social cards per book Phone photo pipeline Automated site generation
Python HTML/CSS/JS Netlify Claude Code

Browse 99 books organised by vibe, not genre. Your shelf says more about you than your CV.

Visit The Visible Shelf
How This Was Built
The Visible Shelf
StackPython, HTML/CSS/JS, Netlify
PipelinePhoto → Process → Enrich → Generate → Deploy
Scriptsadd-book.py, process-photos.py, enrich-book.py, generate-site.py
HostingNetlify CDN
Build toolClaude Code
Books99 photographed and catalogued
OrganisationVibe-based categories, not genre or alphabetical
SocialShareable card generated for every book