Irrepressible list-making meets the AI-driven era of personal apps
October 7, 2026 · 7 min read
Paying for Claude Code is a non-starter if I don’t use it, but sometimes I’m between major technical projects and struggling to use tokens in an actually useful way.
After more or less finishing deluge.quest recently, looking for token-hungry projects is the state I’ve been in. I found out about the Remotion framework recently, and I felt like taking it for a spin.
I’ve been keeping a list of books I’ve read for years now, but it was in fairly rough shape:
- Plenty of misspellings in my manually filled database
- The only genres tracked were either fiction or non-fiction
- No ratings
- No images
- Older year estimates were in bands rather than specific (12 and younger, 13-16, etc.)
I’ve read/listened to nearly 300 books in the last couple years, and I figured a video on books I read could be interesting (to me, at least), but it needed some opinions.
Genre and Rating Backfill
I keep my books list in Notion. I’ve had some API integrations for years now to support iOS and CLI shortcuts, so I onboarded Claude Opus 5.5 to my existing tools, then put it to work on collecting genres for each book.
While it worked, I ranked all the books I’ve ever read. I defaulted to 3 stars for most books, especially the ones where my memory of details is fuzzy. If I remember being bored or confused, that was generally a 2-star rating. If I hated it or didn’t finish it, that was (mostly) a 1-star rating, unless there was something redeemable to salvage a second star. On the positive end, books that I remember really loving got 4 stars, and it’s hard to forget all-time favorites, which got 5 stars (reserved for less than 5% of ranked books).
Ratings complete, I took a look at what Claude was suggesting for genres. I quibbled and had it change some things, collapse a few into each other, and generally set up a system I liked. I had it push the changes up to Notion (backing up in multiple ways first). Then I filtered on each category and reviewed each book, changing where appropriate.
I’ve got to say I never would have done this exercise manually. I would have lived forever with a fiction/non-fiction split. This is where LLMs really thrive: in enhancing something one wants to do but won’t, mainly due to time or motivation constraints.
$ npm run genres
> shelf-life@1.0.0 genres
> node scripts/report-genres.ts
126 Fantasy 50 Children's, 5 Young adult
113 Mystery & thriller 15 Children's
74 Literary fiction 7 Children's, 3 Young adult
67 Science fiction 2 Children's, 10 Young adult
49 Biography & memoir
41 Historical fiction 8 Children's, 3 Young adult
32 Sports 1 Children's
27 Music
27 Religion 1 Children's
23 Self-help & psychology
18 Plays & scripts 4 Children's, 1 Young adult
16 Business & money
15 Horror 2 Young adult
12 Humor 4 Children's
11 History
11 Technology
9 Politics & society
6 Science & math
4 Philosophy
3 Romance
3 Reference
0 (none)
687 total
Image Retrieval and Cover Picking
The video would be pretty pointless without book images, so again I put Claude to work on pulling these down, first for just the books I’ve read in the last two years, but eventually for my lifetime list of books. It used a combo of the Open Library and Apple Books APIs to gather this data. I haven’t worked around books on past software projects, so these are new to me, but I’m glad to incorporate them into my utility belt for future projects. I suspect this won’t be the last time I work on something book-related.
Image collection complete, I set up a basic gallery to just view them all in order. I was a bit disgusted with what I saw. Hundreds of books, with covers unrecognizable to me. I think most book lovers will agree that they associate a particular cover image with most books they’ve read, and alternate images are mostly uncomfortable or outright offputting.
I asked Claude to build me an image picker, and boy, did it overperform:

Some books still didn’t have an acceptable cover, so for the ones that really mattered (i.e., my 4- and 5-star books), I added an input box to paste an image directly in instead. At this point it was a lot of manual work off of memory to find the “correct” cover for my virtual bookshelf.
API Goodies for iOS Shortcut
At this point, I had to step away from data cleanup and think of the future. Asking AI to annotate my data on an ongoing basis is unacceptable to me, and I’m certainly not going to collect images and other metadata by hand for every book.
My existing iOS Shortcut, that I’ve been using since well before LLMs came on the scene, was pretty brute force: it asked for title, author, notes, and date read, then sent all the collected info to Notion via a raw API request.
Now knowing about these two book APIs, I instead built a Flask app that asks for a book title, calls one or both APIs (fallback on fail) to find suggestions, then returns those to me. Once selected, all metadata is filled and it’s just on me to add notes and a rating. Even the image is looked up and uploaded to Notion (although I probably need a cover picker integrated into the iOS shortcut long-term, which I haven’t done yet).
I deployed this app and tested it, and the last two books I added worked near-flawlessly. (I did adjust the genre for one of them.)
Fixing The Timeline
At this point, I wanted to build a virtual gallery of books by year, but that meant attributing one or more years to a book, rather than catchall 12 and younger, 13-16, and 17-19 categories.
I did a first pass. Some were so easy – I remember where I was, what I was doing, a school classroom or workplace or vacation, etc. while I was reading – to where it was pretty easy to assign a year with 99% certainty. Others were more of a guess.
After this first pass, I asked Claude to sanity check my values. It called out a number of books I estimated to have read before their release date, and I adjusted those accordingly.
The hardest ones were my earliest books when I was in early grade school. I called my mom to help me figure out a rough timeline and order of these. She was both a teacher and my biggest supplier of books for a long time, so her help was invaluable to laying out a timeline on these old ones. Thanks, Mom!
Results
Now I have a new Easter Egg on my site: a virtual bookshelf that works just the way I want it to. And if I want it to work differently later, I can just change it! How great.
One other thing: I threw together a short song on my Synthstrom Deluge as backing music – who wants a silent video?
I’m no Spielberg, but I feel like this was a pretty decent first effort using Remotion. Enjoy!