GITHUBHOME
← BLOG

REBUILT


The old version of this site was four hand-written HTML files. Adding a post meant editing markup in three places, and the last time I did that I forgot to wrap the entries in anchor tags - so for a while the blog index listed posts that nothing could actually click.

That is fixed, structurally. Posts are files now.

How a post gets made

Every .mdx file under app/posts/ becomes a page. The filename is the URL. The frontmatter block at the top supplies everything else:

---
title: Rebuilt
date: 2026-08-24
excerpt: Shown on the index and in link previews.
keywords: meta,site,blog
draft: false
---

Nothing else needs touching. The index, the routing, and the per-page OG tags are all derived from the files at build time. Set draft: true and a post stays reachable at its URL but disappears from the index.

What it's built on

The structure follows nullpt.rs, with the parts that matter kept and the parts that didn't fit trimmed:

  • Kept - build-time post discovery, frontmatter, the table of contents, GitHub-flavoured markdown, syntax highlighting.
  • Changed - every route is prerendered to static HTML, so a page never waits on a server render.
  • Dropped - multi-author support, and the webfonts. The display type here is just Helvetica with scaleY(1.5), which is the entire trick behind the lettering.

Code

Highlighting happens during the build, so no highlighter ships to the browser:

export const postFilePaths: string[] = fg.sync('app/posts/**/*.mdx').sort();

Lists, quotes, and the rest of markdown work as expected.

The glow is a text-shadow in three graduated strengths. There is no image anywhere in the theme.

That's the whole system.