{
"path": "/blog/publishing-to-the-atmosphere",
"site": "at://did:plc:i2fgba5nignuw4nccml33wjp/site.standard.publication/3mfds4aqql323",
"tags": [
"Technology Integration",
"Knowledge Management"
],
"$type": "site.standard.document",
"title": "Publishing to the ATmosphere",
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreihlutot6iq22cyebt7i3xrp76qnlzc7fuenn6tfo5hu5m62kfrg4i"
},
"mimeType": "image/jpeg",
"size": 501358
},
"bskyPostRef": {
"cid": "bafyreic6qzkuc3guyweh2tpazwygusgg647ahkbry4savgvmjzr4zzlc5m",
"uri": "at://did:plc:i2fgba5nignuw4nccml33wjp/app.bsky.feed.post/3mffowkflwo2w"
},
"description": "How I used @sequoia.pub to publish my Next.js blog to the AT Protocol — Standard.site lexicons, Bluesky comments, and owning your content. #atproto #atdev",
"publishedAt": "2026-02-21T00:00:00.000Z",
"textContent": "This post lives in two places.\n\nYou’re reading it at smart-knowledge-systems.com — or encountering it through the AT Protocol, via Standard.site, a Bluesky client, or somewhere else in the ATmosphere. The content is identical either way.\n\nAnd it’s mine.\n\nNot rented from a platform. Not subject to algorithmic reach. Not hostage to anyone’s terms of service. Here’s exactly how I got there.\n\nBlog Content Has Always Been Trapped\n\nWordPress locks you in. Medium owns your distribution. Ghost is cleaner, but it’s still an island.\n\nEven a perfectly self-hosted blog — full markdown ownership, zero vendor lock-in — has a discovery problem: if no one subscribed to your RSS feed, you’re shouting into silence.\n\nThe AT Protocol changes the equation. Own your content _and_ reach people where they already are. Self-host _and_ distribute.\n\nThat’s the promise. I wanted to know if it was real.\n\nWhat I Added to the Stack\n\nI’m running Next.js with the App Router. Posts are markdown files. Here’s the three-piece addition:\n\nSequoia — CLI tool. You run sequoia publish, and your markdown posts become first-class atproto records: discoverable, federable, readable through any client that understands the site.standard.document lexicon.\n\nStandard.site lexicons — the schema layer. Sequoia is the tooling. Standard.site is the protocol — the agreed-upon definition of what a blog post _is_ on atproto.\n\nsequoia-comments — a web component that renders Bluesky replies for a given at:// URI. When Sequoia publishes a post, it auto-posts to Bluesky. That thread feeds back to the blog.\n\nThe pipeline:\n\nThe Setup\n\nOne config file, sequoia.json:\n\nAuthentication is your AT Protocol handle — same credentials as Bluesky. Sequoia handles the PDS interaction.\n\nThe .well-known/site.standard.publication file verifies domain ownership: a JSON blob Sequoia generates that proves smart-knowledge-systems.com is authorized to publish on behalf of your DID.\n\nThe mechanical magic is frontmatter. Start with this:\n\nRun sequoia publish. Sequoia creates the PDS record and writes the atUri back:\n\nThat URI is the post’s permanent address on the protocol. Every subsequent piece hooks to it.\n\nAn ignore list handles drafts — sequoia.ignore or ignoreFiles in the config. Everything outside the list publishes on the next run.\n\nWiring Up Comments\n\nWith atUri in frontmatter, comments are straightforward.\n\nA parseAtUriFromContent() utility reads the frontmatter and returns the URI. The blog post page passes it to the <sequoia-comments> web component.\n\nOne App Router wrinkle: web components need the DOM, so this can’t be server-rendered. Client-side import, intentionally lazy. I wrapped it in a CollapsibleComments component — expand/collapse with ResizeObserver for smooth height transitions:\n\nReaders reply on Bluesky. The conversation appears on the blog. The post page doesn’t reflow as comments load. That’s the whole feature.\n\nOne Sprint, With Claude Code\n\n62 files changed. 2,314 insertions. Less than 12 hours including a good night’s sleep.\n\nThe entire feat/add-bluesky-comments-and-cover-images branch — Sequoia integration, comments component, atproto URI parsing, cover image system, OpenGraph generation, Vitest tests, CollapsibleComments, ReadMoreContent — was shipped by one developer in a sprint. With Claude Code.\n\nI’ve written about this pattern before. The insight isn’t just speed — it’s what speed _changes_. When you can execute a feature branch in hours instead of days, you stop filtering ideas by implementation cost. You build the thing you actually want to build.\n\nFor this integration, the value was clear: the surface area was large but each piece was well-defined. Parsing frontmatter? Trivial. Wiring a web component into RSC architecture? One hydration gotcha, then solved. A ResizeObserver-based collapse animation? Mechanical. Claude Code handled the mechanical work. I kept my attention on the design.\n\nThis is what building on open protocols looks like in 2026. Sequoia is simple and opinionated. atproto is well-documented. AI-assisted development makes integration fast even for a solo builder.\n\nIf you’ve been thinking the ATmosphere is too much to figure out on a weekend — that estimate is too high.\n\nThe Larger Picture\n\nI consult on breaking down information silos in organizations. I’ve spent years watching platforms trap knowledge behind walls that serve the platform (I got off X/Twitter before its walls went up), not the people who created the content.\n\natproto isn’t just for social. It’s infrastructure for publishing. Standard.site, leaflet.pub, pckt.blog — these are early signals of a genuine alternative to the content-silo problem that’s been baked into the web for 30 years.\n\nOwnership and distribution used to be a tradeoff.\n\nThey don’t have to be.\n\nThe Code Is Open\n\nThe entire implementation is on GitHub:\n\ngithub.com/smart-knowledge-systems/smart-knowledge-systems.com\n\nSequoia integration, comments component, cover image system, OpenGraph generation — all of it. Fork it, read it, adapt it to your stack.\n\n@sequoia.pub built the tool. Go tell them what you made with it.\n\nWhat would you build on Standard.site?",
"canonicalUrl": "https://smart-knowledge-systems.com/blog/publishing-to-the-atmosphere"
}