This blog is a folder of .mdx files in content/blog/, read straight off
disk at build time. There's no /admin route, no login screen, and nothing
new exposed to the internet — publishing a post means adding a file and
running a normal deploy, the same as shipping any other change to this site.
A post is just frontmatter plus content:
---
title: "Post title"
date: "2026-07-11"
excerpt: "One sentence for the listing page."
tags: ["backend"]
---
Regular Markdown from here down.
Drop a new file in content/blog/, fill in the frontmatter, write the post,
commit, push. lib/blog.ts picks it up automatically — the homepage teaser
and the /blog index both regenerate from whatever's on disk, sorted by
date. Code blocks get highlighted with sugar-high:
function publish(post: string) {
return fs.writeFileSync(`content/blog/${slugify(post)}.mdx`, post);
}
That's the whole publishing pipeline.