Building This Site

astro web meta

After years of meaning to build a personal site, I finally sat down and did it. No grand redesign cycle, no agonizing over frameworks for weeks. Just a weekend of focused work.

Why Astro?

I wanted something that ships zero JavaScript by default. Most personal sites don’t need a client-side framework. They need fast page loads and content that’s easy to write and maintain.

Astro checks all of those boxes. It supports Markdown out of the box with a great content layer API for type-safe frontmatter. The file-based routing makes the project structure intuitive too.

The Stack

  • Astro v5 for the framework
  • Tailwind CSS v4 for styling
  • Markdown for blog content
  • Vercel for hosting

Design Decisions

I went with a warm, personal aesthetic. Serif headings (Lora), clean sans-serif body text (Inter), and a soft colour palette. The goal was to feel more like a well-typeset document than a SaaS landing page.

// Type-safe content collections in Astro v5
const blog = defineCollection({
  loader: glob({ pattern: '**/*.md', base: './src/data/blog' }),
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),
  }),
});

What’s Next

This is just the beginning. I plan to write about what I’m learning and the occasional opinion about software engineering. If you’re reading this, thanks for stopping by.