Content pipeline

Pages and posts are Markdown files now, with a CMS in front of them

Everything on this site except the homepage and the colophon is a Markdown file under content/, compiled into the site at build time. Frontmatter is validated during the build, so a missing title or a malformed date fails the build instead of publishing a broken page.

Code fences are highlighted while the site is built, which means a reader gets syntax colours without downloading a highlighter and without asking a CDN for a grammar:

const content = {
  pages: "/content/pages",
  posts: "/content/posts",
} satisfies Record<string, string>;

export function slug(file: string): string {
  return file.replace(/^content\/(pages|posts)\//, "").replace(/\.md$/, "");
}

And then sometime after the build, Komodo notices, pulls the new image, and swaps out the running image.


Of course, all of this doesn’t really mean much to anyone looking at my site. It’s just here.