We kept buying books we already owned
My husband and I are serious book people. Over the years, we built a library of 1,000+ books — and with it, a surprisingly frustrating problem. We'd be at a used bookstore, spot something on our radar, and completely blank on whether we already owned it. Did we buy this last year? Is it on the shelf at home? We had no idea.
Scanning barcodes, one book at a time
We downloaded Libib, a solid library cataloguing app, and started scanning. Each book, one by one. It was going to be great. We made it to book fifty before we quietly gave up and never opened the app again.
Slow and tedious for a large collection. The effort to get 1,000 books in was too high to ever finish.
AI + a spreadsheet: fast to create, hard to use
We leveled up. Using ChatGPT's image processing, we photographed our shelves and pulled book titles and authors straight into a spreadsheet. Getting the data in was actually easy — 1,000 rows, done.
But a spreadsheet with 1,000 rows is not something either of us wanted to open on a Saturday afternoon at a used bookstore. The data existed. We never looked at it.
Fast to build but not accessible in the moment. The solution didn't fit how we actually behave.
What we needed
Two failed attempts. Same root cause: the solution didn't fit our actual lives. Instead of finding an app that was good enough, I decided to build exactly what we needed. No compromises, no workarounds — just our catalogue, designed around how we actually think and behave.
Low-effort bulk entry
Getting 1,000 books in without losing our minds — using image processing to import the existing collection fast.
Search and filter from anywhere
A clean, fast interface we'd actually open mid-bookstore. Not a spreadsheet, not a slow app — something that fits in your hand.
Easy way to add new books
After the initial import, adding a single book should take seconds — no barcode scanner required.
Per-person read/unread status
We read very differently — one of us tears through books, the other re-reads slowly. Tracking status per person is something no off-the-shelf app bothered with. We could build it in.
From HTML prototype to a live, deployed app
This is where everything changed. Instead of searching for something close enough, I built it.
HTML prototype with random books
Started with a working proof of concept — search, filter, a book grid. Enough to know the idea was right.
React app with real features
Turned the prototype into a proper React app. Added bulk editing to mark books as read, and wired up the Open Library API so adding a new book feels instant — no manual metadata.
Visual language and layout
Designed the layout and look properly before bringing it into code — the part that made it feel like an app we'd actually want to open.
Database, auth, and deployment
Set up a real database, added authentication, and deployed. Household members share the same book list; each person tracks their own read/unread status. The part that would have stopped me cold before vibe-coding made it approachable.