This took roughly 10x the work of bridging Bluesky profiles into the fediverse. Some of that is because I already had the ActivityPub plumbing built, but much of it is due to AT Protocol’s architecture.
Webmention, ActivityPub, and Nostr are primarily messaging protocols: they dictate how you exchange information, eg activities, but not how you store them. AT Protocol is different: it specifies sophisticated internal data structures that you have to reproduce, notably a Merkle search tree and a signed repo chain. These are tricky to get right, and the other parts of Bluesky’s architecture, notably the BGS and AppView, refuse to ingest and accept them if you get anything wrong. (And there are many ways to do that!)
Nevertheless, profiles are now flowing. And since the hard internal ATProto work is now done, I hope to have posts, replies, etc flowing within the next couple weeks. Progress!
(None of this is usable or real by users until Bluesky turns on federation, of course. Hopefully soon, once they’ve shipped their v2 infra stack!)
A few interesting bits I hit over the last couple weeks: creating DNS records on the fly, creating CID-based blobs on the fly, serving redirects to XRPC calls, and substantially revising the id mapping between protocols. Phew.