My personal website & blog, powered by standard.site/leaflet and the AT Protocol.
Built with Astro (& React/Takumi-rs for the above OG-image) and deployed to Cloudflare Pages.
Designed by me.
You can view & download my resume at my resume site (also built with Astro and deployed to Cloudflare Pages).
Blog posts are fetched from the AT Protocol using the site.standard.document collection
(migrated from the original pub.leaflet.document lexicon). Documents are authored on
Leaflet and stored in the author's PDS.
-
src/lib/leaflet.ts— Type definitions and fetch logic. Callscom.atproto.repo.listRecordsagainst thesite.standard.documentcollection for the resolved DID. Each record wraps apub.leaflet.contentobject containing pages and blocks. -
src/lib/content-loader.ts— An Astro content collection loader that callsfetchLeafletPostsand stores each record in theblogcollection with its rkey as the ID. -
src/lib/leaflet-transform.ts— Converts the block-based Leaflet document model into HTML via markdown. Handles all block types (text,header,blockquote,code,image,unorderedList,orderedList,horizontalRule,website,bskyPost,button,iframe,math,poll,page) and rich text facets (bold,italic,underline,strikethrough,code,highlight,link,didMention,atMention,footnote). -
src/lib/leaflet-images.ts— Downloads and caches blob references (post images and website preview thumbnails) from the author's PDS intopublic/leaflet-images/during build.
site.standard.document
├── title, description, publishedAt, path, tags
├── site → at-uri to site.standard.publication
├── bskyPostRef → strongRef to cross-posted bsky feed post
└── content ($type: pub.leaflet.content)
└── pages[] ($type: pub.leaflet.pages.linearDocument)
└── blocks[] (pub.leaflet.blocks.*)
└── facets[] (pub.leaflet.richtext.facet#*)The last.fm integration is a build-time fetch of recent tracks from the last.fm API and rendered on the home page. You can learn more by looking at the code or reading the last.fm api docs.
Projects use a standardized status frontmatter field.
Valid states are defined in the project-status module and enforced by the site's
content collection schema.
| State | Meaning |
|---|---|
active |
Maintained, usable, and currently active. |
pre_release |
In active development but not yet considered stable or final. |
experimental |
Exploratory work where the interface, scope, or viability may change. |
paused |
Not currently being worked on, but not retired. |
completed |
Finished or feature-complete for its intended scope. |
archived |
Retired, no longer maintained, or kept for reference. |
The UI treats active, pre_release, and experimental as "in progress."
Your eyes don't deceive you. The background of the opengraph image is bliss, the default windows XP background.
