Using Claude Code to build an ActivityPub implementation for Indiekit, based on Fedify, was the easy part. (and it was a lot of fun 😊)
Building the UI to actually consume ActivityPub content, and layering a Mastodon-compatible API on top of it that works with existing apps and plays nicely with other AP implementations… that’s the real challenge.
Eating FEPs for dinner and reading how other implementations do things is how you realize just how much work is still ahead — and how many pain points are still unresolved.
Right now, my Indiekit blog has:
IndieWeb (Micropub, Microsub, Webmentions)
ActivityPub (server + reader)
If I wanted to self-host my own ATproto PDS, I’d also need to build an “AppView” to consume Bluesky content.
So I’d end up with:
one reader for RSS (my current Microsub)
one reader for ActivityPub (my native, still ugly AP reader)
one reader for ATproto
That’s a lot of readers for different data streams coming from different protocols.
At some point I thought: what if I just used my Microsub UI to consume everything — not just RSS/Atom/JSONFeed/h-feed?
Since Microsub already supports channels, I figured I could inject an AP timeline into a Microsub channel.
That idea fell apart pretty quickly.
RSS and h-feed from IndieWeb sites are straightforward. I know I can reply, like, repost, or bookmark because the other side supports the same interaction model.
But the moment I had to deal with ActivityPub — likes, boosts, replies — everything became different. The Microsub plugin would have needed so many protocol-specific features that my implementation would drift far from other Microsub implementations.
And I really didn’t like where that was heading.
Microsub turning into a universal ingestion layer for everything? That felt like a guaranteed mess.
So I drew a line: Microsub stays scoped to RSS/Atom/h-feed/JSONFeed. That’s it.
And yet… I’m still torn.
Because instead of one unified UI to consume RSS, ActivityPub, and ATproto, I’m now building three separate readers.
And that honestly feels like a huge waste.
So I’m dumping this conundrum here.
Maybe somewhere between the Fediverse and the Atmosphere, someone has already figured this out — or at least has a better idea.
Do you?

Comments
Sign in with your website to comment:
Loading comments...
No comments yet. Be the first to share your thoughts!