I’ve been meaning to rebuild my personal site for a while. Most portfolio templates feel too corporate — too many gradients, too many cards, not enough writing. What I wanted was something closer to a personal notebook that happens to live on the internet.

Why Astro

Astro ships zero JavaScript by default. That’s the whole pitch for a site like this. I don’t need a virtual DOM to render a list of links and some markdown.

The content collections API is also genuinely nice:

const notes = await getCollection('notes');
const sorted = notes.sort(
  (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
);

Type-safe frontmatter, Zod validation, automatic slug generation. It just works.

Typography choices

I went with Source Serif 4 for body text. Serif fonts have better readability for long-form content — there’s a reason books still use them. JetBrains Mono handles code and metadata, providing clear visual separation between prose and technical bits.

What I skipped

  • React or any client-side framework
  • Tailwind (vanilla CSS is fine for ~200 lines)
  • Dark mode toggle (dark by default, no toggle needed)
  • Analytics (I don’t need to know)
  • Comments (email me)

The result is a site that loads in under a second and feels like mine.