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.