← all writing tech

How this site is built (and why it's so boring)

Astro, a few hundred lines of CSS, and a deploy I never think about. The why matters more than the what.

You’re reading this on the thing it’s about. That’s the only clever part. Everything underneath is deliberately, almost aggressively dull, and that was the point.

I’ve built sites with more moving parts than this one has words. I didn’t want that here. I wanted a place I could open in a year, change one sentence, and close again without re-learning my own decisions. So I picked tools by a single question: how little will this ask of me later?

Astro, because most of this is just words

A personal site is mostly text. Articles, an about page, some links. There’s no reason to ship a runtime that boots a whole framework in your browser just to read a paragraph.

Astro builds everything to static HTML ahead of time and ships almost no JavaScript. Pages land fast, even on one bar of signal in a metal-roofed yard, which is the only benchmark I actually trust. The articles live as plain markdown files in a content collection, validated by a tiny schema. Writing a new post, like this one, is adding a file. No CMS, no database, no admin login I’d forget the password to.

The one trick: it loads the page before you ask

Here’s the single clever thing I allowed myself, and it isn’t even mine. It comes free in the box. The moment your pointer lands on a link, the page behind it starts downloading. Not when you click. When you hover. By the time your finger finishes the click, the next page is usually already sitting in the browser, ready, so the jump feels instant.

Astro calls this prefetching. I turned it on for every internal link, with the hover strategy, in about four lines of config. There’s no spinner to design and no loading state to build, because for most clicks there’s nothing left to wait for. The fast feeling isn’t a trick of animation. The work simply already happened, quietly, in the half second you spent deciding to click.

It does cost a little bandwidth on links you hover but never follow. On the connections I build for, that’s a trade I’ll take every time: a wasted hover is cheap, a slow page is not.

No framework for the paint

There’s no Tailwind here. No CSS-in-JS. Just a few hundred lines of plain CSS and a single file of design tokens that holds the whole “Bold Pop” look: the paper background, the hard shadows, the orange and blue and pink.

I know this is the unfashionable choice. But the styling is small enough that I can hold all of it in my head, every color and spacing step lives in one place, and nothing is generated by a tool I’d have to debug at 11pm. It’s scoped, it’s predictable, and it’s mine. For a site this size, a utility framework would have been a bigger mental model than the thing it was dressing.

Pick tools by how little they ask of you later, not by how exciting they look today.

The deploy I never think about

This is the part I’m quietly proud of, because there’s nothing to be proud of. I push to a branch. A GitHub Action builds the site and ships it to Cloudflare Pages with one command. That’s the whole pipeline.

The build does the unglamorous work for me. It generates a social preview image for every page, an RSS feed for anyone who still keeps a reader, a sitemap, and the structured data that tells search engines what each page is. All of it at build time, all of it committed to the same repo. There’s no dashboard I babysit and no service I pay monthly attention to. When something looks wrong, the cause is in the code, not in a console I have to go log into.

The fonts are the same idea. Two variable typefaces, served from the site itself instead of a CDN, so there’s no third party to slow down or go dark.

Boring on purpose

None of this is impressive. That’s the feature. Every choice here was made to push work toward the moment I write and away from every moment after.

It’s the same idea I keep landing on with bigger systems: pick the tool that makes the boring 90% of the work boring, and the exciting 10% takes care of itself. This site is just that idea pointed at itself. Quiet stack, calm deploys, small enough to fit in my head.

If you ever build your own corner of the internet, I’d tell you the same thing. Resist the urge to make the foundation interesting. Save interesting for what you put on top.

Email