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.