Continue reading on Unthread
dad (aka miguel)
March 4, 2026
Unthread
I built a TwitLonger for Bluesky. Write as much as you want, it saves to your repo as a site.standard.document record, then posts a teaser to your feed with a link back.
Why
The 300 character limit is fine most of the time. Sometimes it's not. I didn't want to make a thread. Hence the name.
The nerdy bit
I'm a Laravel dev, so naturally I overthought this. Instead of a normal backend that stores your OAuth tokens and posts on your behalf, I went a different route:
OAuth starts on the server (AT Protocol requires a confidential client), but after the callback, everything goes to the frontend. The backend stores nothing.
All XRPC calls go through your PDS using service proxying. Your PDS verifies you, signs a JWT, and forwards it to Unthread. The backend just checks that JWT, no tokens, no sessions.
Records get created client-side directly to your PDS.
Basically the backend is a stateless bridge. Your tokens stay in your browser, your content stays in your repo.
Standard.site
Unthread uses Standard.site's site.standard.document lexicon: the growing standard for long-form content on AT Protocol. Other apps like Offprint, pckt.blog, and Leaflet can read your posts too.
One detail: Unthread creates "loose documents" without a publication record. This is valid per the spec, the site field accepts a URL, not just an AT-URI.
This being an MVP, we haven't implemented the validation portion of the Standard.site spec, nor have we created our content lexicon yet.
Try it
Still early. Minimal markdown editor with @mention autocomplete, multi-account support, drafts. Let me know what's broken or missing.
@aka.dad
Discussion in the ATmosphere