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?




