Hello, world

Welcome. This blog lives on the same Astro site as my CV — posts are plain markdown files rendered to static HTML at build time, so there’s no CMS and no client-side JavaScript involved.

How a post is made

Each post is a .md file in src/content/blog/ with a bit of frontmatter:

---
title: 'Hello, world'
description: 'First post on this blog.'
pubDate: 2026-07-05
draft: false
---

Setting draft: true keeps a post visible in dev but out of the production build. Code blocks are highlighted at build time with Shiki:

import { getCollection } from 'astro:content';

export async function getPosts() {
	const posts = await getCollection('blog', ({ data }) =>
		import.meta.env.PROD ? !data.draft : true,
	);
	return posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
}

That’s the entire pipeline. More posts to follow.