New project alert: I spent a few days building an online archive of books I’ve read and remember. (Click books in the navigation bar).
I created this project as a personal reading catalogue to share with friends and the world at large. It is a non-exhaustive record of ~700 books.
I ran out of steam uploading the back catalogue (my Reading List app was a godsend, but the manual .csv file entries were tedious as hell).
I plan to update it periodically, both with recent reads and those that return to my memory.
The problem with existing solutions
Is there one? I don’t know.
Goodreads is the obvious choice, but it’s clunky, ad-ridden, and owned by Amazon. I didn’t want social features, reviews, or recommendations from algorithms. I just wanted a clean, fast, browsable catalog that I controlled.
The stack
- Database: SQLite—a single file, no server, easy to back up and query
- Scripts: Python—for importing books, enriching metadata, and exporting to JSON
- Static site: Eleventy—fast, flexible, no framework overhead
- Interactivity: Alpine.js—lightweight filtering and search without a build step
- Metadata: OpenLibrary and Google Books APIs—for covers, page counts, and descriptions
- Hosting: Netlify—free tier, auto-deploys from GitHub
Total cost: $0/year (excluding the domain I already owned).
How it works
Books live in a SQLite database. Each book has a title, author, ISBN, themes, and—where warranted—a ‘recommended’ flag. Python scripts handle the grunt work:
cli.py— add, edit, delete, list booksenrich.py— fetch covers and metadata from OpenLibrary/Google Booksexport.py— dump the database to JSON for the static site
Eleventy consumes the JSON and generates a static HTML page for each book, plus the main browse page.
Alpine.js handles client-side filtering by theme and search by title/author—no page reloads, no backend.
What I learned
- ISBN matters. Title/author searches against book APIs return wrong editions constantly. ISBNs are the only reliable way to get the right metadata. (And even then, gremlins emerge!)
- Don’t trust Excel with ISBNs. It converts them to scientific notation and corrupts them. Edit CSVs in VS Code.
- Metadata is messy. Some books returned German or Dutch descriptions. Some returned covers for completely different books. Manual cleanup is unavoidable.
- Static sites are underrated. No database to secure, no server to maintain, instant page loads, free hosting. For read-heavy, write-rarely projects like this, it’s awesome.
What’s next
Maybe a /stats page with reading trends over time. Maybe sorting by author last name. Maybe not. It does what I need, and I think I’d rather build a ‘scrollytelling’ site next …
The code is on GitHub if you want to build something similar.