My Website

Category: Development

Tags: astro, typescript


I wanted a digital home that wasn’t a timeline on someone else’s platform — a slow, owned place for blog posts, notes, links, and photos. This site is that place.

It’s built with Astro on a Node.js standalone adapter, TypeScript throughout. Most routes are statically prerendered; a handful of pages opt into server-side rendering where they need it. Content runs through Astro’s content collections with Zod schemas, which means frontmatter is type-checked at build time — a typo in a pubDate fails the build rather than producing a broken page.

The site leans into IndieWeb principles: posts get syndicated to Mastodon via a custom POSSE script, incoming webmentions are fetched at build time from webmention.io and rendered on the post they reference, and microformats2 markup runs end-to-end for anyone parsing the HTML.

Photos live as JPG files with JSON sidecars, organised into nested collections with breadcrumb navigation — no database, no image CDN, just files on disk. RSS feeds exist for every content type.