Hello Atmosphere

First post on the Atmosphere

February 8, 2026

Hello from the Atmosphere. This post is served directly from my personal AT Protocol PDS.

Cirrus

The PDS is self-hosted on Cloudflare using Cirrus, a lightweight AT Protocol PDS implementation that runs on Cloudflare Workers with D1 and R2 for storage. It lets you own your data on the ATmosphere without running a full server. Just deploy to Cloudflare and you have your own PDS at your domain.

The site.standard schema

Posts are stored as site.standard.document records. This is a standard Lexicon schema for publishing documents on the ATmosphere. Each record holds a title, description, textContent (HTML), tags, publishedAt, and a path that maps to the URL on the site. Because it's a standard schema, any app on the network can read and display these posts, not just this website.

Authoring

I like writing my posts in my editor. The content lives as plain markdown files with YAML frontmatter in src/content/posts/, versioned in git like any other code.

When it's time to publish, a push script (scripts/pds-push.ts) takes care of syncing to the PDS. It reads each markdown file, parses the frontmatter, converts the body to HTML with marked, and calls com.atproto.repo.putRecord to upsert the record on the PDS. It also handles cleanup. Any record on the PDS that no longer has a matching local file gets deleted. You can push a single file or run it with no arguments to sync everything.

On the website side, Astro fetches the posts at build time using a custom content loader. The loader calls com.atproto.repo.listRecords against the PDS, parses each record into Astro's content collection format, and the posts become available like any other collection, queryable with getCollection('posts'), validated with Zod schemas, and rendered as pages. The PDS is the source of truth, and the site is just one view of it.