Atproto Gave Me Superpowers to Fix My Bookhive Data
Yesterday I imported my StoryGraph (a famous Goodreads alternative) data into BookHive (a much less famous Goodreads alternative built on atproto).1
The migration went only partially okay. It imported 50% of my history, and the entries that were imported had wrong or missing data, in particular the dates I started reading them.
Matching books is HARD, so I am not criticizing BookHive. Still, I had to fix all the values, and the task was boring and overwhelming.
Then I realized that BookHive data is hosted on my PDS2. So I thought, “What if I give Claude a temporary password and unleash it to fix my data?”
After all, I keep extensive notes on all the books I read (and more) in my Obsidian vault. Each book has start/read dates, scores, ratings, and all the data it needs.
So I asked it. In two minutes, I got this answer:
I logged into your PDS setup (handle davideaversa.it on eurosky.social) read-only (no auth needed for listing) and compared your Bookhive library against the vault. Here’s what I found:
Bookhive already has 229 book records (171 finished, 57 want-to-read, 1 reading) — looks like it was populated recently, likely via a Goodreads import.
Vault has 177 books with a read_on date. Comparing them:
83 matched an existing Bookhive record — of those, 2 are marked wantToRead in Bookhive despite being finished in the vault (On the Calculation of Volume I, Self Editing for Fiction Writers). ~75 have no Bookhive record at all — notably the Steven Saylor Roma Sub Rosa series, Blackwater series, several Star Trek novels, Stephen King titles, the Cixin Liu trilogy, and a batch of Italian-language books (these are likely missing from Bookhive’s catalog/Goodreads matching, or just weren’t in the import). Adding a missing book to Bookhive isn’t a single write — for each one I’d need to search Bookhive’s catalog for a matching hiveId (their internal book-catalog ID), then write a record to your PDS repo referencing it. That’s ~75 catalog lookups plus writes, and some (Italian titles, small press) may not exist in their catalog at all and would need to be skipped or reported.
It was promising. I did a couple of manual checks and then I gave it the green light. Ten minutes later, all my books’ data were synchronized and fixed.
It was a revealing experience. Note that I didn’t have to specify anything: no BookHive API, no structure of BookHive’s lexicon, nothing. The full prompt was:
Can you log in to my PDS (did:plc:w2wvugwwbehm7v774fkgagfl) and update the read book of Bookhive according to my Obsidian book vault?
That’s it. In an era of powerful agents, atproto applications give me a universal API to interact with my data. I think we are only scratching the surface of how awesome this is.
I am not migrating away from StoryGraph. I just wanted to participate in BookHive as a “mirror” of my data in the ATmosphere. ↩︎
The Personal Data Server, that is, where the data of
atprotoapplications is stored. In my case, on EuroSky. ↩︎
A Skill for Getting Letterboxd Reviews into Obsidian
Going local-first. But with no friction.

For years I manually copied my Letterboxd reviews into Obsidian like a primitive. Then I realized that automating tasks has never been easier, so I made a skill and turned this process into one click.
Review your week like a chess game
My chess-inspired system for reviewing my life

For the last year, I’ve been using a chess-inspired system to review time periods in my life. It is a stupidly simple system, but effective (in my expirience). So, I thought I could share it with you.
Movie Posters Grid in Obsidian With Dataview
With the upcoming Bases update in Obsidian, this may become obsolete, but for the time being I am still quite happy using Dataview to embed little graphical elements in my notes.
For example, I have a note summarizing all the movies I watched each month. For that I use a combination of CSS and a Dataview query to generate a grid of movie posters. Until recently I used a very simple Dataview query, but I had a problem: if I watched a movie twice in a month, I got only one entry in my poster grid. This is not what I wanted, so I had to do something more complicated.
| |
So in short, I have a Watched property on my movie notes that can take multiple values, and for each date in the property I add a “poster” entry to the results array. Finally, I sort the results by date descending and display the posters.
Problem solved.
(Btw, let me know if you want the CSS for the grid.)

Why I don't do Time Tracking
I tried multiple times but, in the end, it made things worse.
Time tracking is a popular productivity technique. Many people swear by it as the most effective intentionality tool. However, it never worked for me. It made things worse. Here, I explain the three reasons why it failed me.
Use Obsidian's Plugin Responsibly

This is just a reminder for an undesirable side effect of some Obsidian’s Plugin: they make your notes Obsidian-dependent. Here I will describe what is the problem and how can you easily avoid it to keep your note really futureproof.
Overwhelmed by your workflow? Reset it.

Productivity and organization workflows can quickly become addictive. If you like apps and all that comes with them, your workflows can snowball out of control. I run into this problem every couple of years, and until I become aware of that, I feel very frustrated. I feel like I am moving around a lot of stuff and spending many hours of my awake time producing nothing more than heat and entropy. Luckily the solution is easy: do a total reset.
How to Export your Kindle Highlights

This is a quick article to share a very surprising and beautiful thing I discovered today: it is possible to request a PDF with all your Kindle’s highlights directly from the Kindle interface. How it is possible nobody told me this before!!??