notes
1 min read

Building this site with Astro, slowly

A static site, a handful of small scripts, and no framework runtime. Notes on the stack behind these pages.

  • Astro
  • Engineering

This site is deliberately boring underneath. It’s a collection of Markdown files, a few Astro components, and a couple of small scripts that add motion where it helps. No client-side framework, no database, no CMS. The whole thing builds to static files.

That’s not a moral position. It’s just the smallest stack that does what I need.

Content as files

Every post lives in src/content/posts as a Markdown file with a little frontmatter. Astro turns that into typed content and generates the pages at build time.

---
title: A post about something
description: One sentence that earns the click.
date: 2026-08-28
tags: [Design, Web]
---

Because the content is just text, it works with any editor, any backup tool, and any future version of me. There’s no lock-in to negotiate. If I want to move it somewhere else, I copy a folder.

Motion as a thin layer

The scroll animations are intentionally small. There’s a custom element that splits a heading into lines, wraps each line in a mask, and animates them in with the Web Animations API. There’s Lenis for smooth scrolling. Together they’re a few kilobytes, and they fail gracefully if JavaScript never arrives.

The rule I kept coming back to: the page should be fully readable before any of it runs. Motion should be an enhancement, not a prerequisite.

Deploying to the edge

Static output means deployment is about as simple as it gets. Build the site, upload the dist folder, and let the CDN handle the rest. No servers to patch, no cold starts to tune.

The trade-off is that anything dynamic — comments, search, analytics — has to be bolted on deliberately. So far, I haven’t needed any of it. The pages are fast, the feed works, and the whole site fits in my head.

There’s a particular calm in shipping something you fully understand.