Skip to content
All posts
1 min read

Rebuilding this site, quietly

Why I replaced a terminal-themed portfolio with something plain, and started writing.

This site used to look like a terminal. Every section sat inside fake window chrome, the background had scanlines, and there was a whole tiling window manager hidden behind a [ tty ] button in the corner.

It was fun to build. It was also the wrong shape for the thing I actually wanted, which was somewhere to write.

What changed

  • The terminal aesthetic is gone, along with about 1,400 lines of desktop island code.
  • There are light and dark themes now, and they follow your system until you say otherwise.
  • Posts are Markdown files in this repo. No database, no CMS, no admin panel.

How posts work

A post is one file in src/content/blog/. Astro reads the frontmatter against a schema at build time, so a typo in a field name fails the build instead of rendering an empty page:

const blog = defineCollection({
  loader: glob({ pattern: '**/*.md', base: './src/content/blog' }),
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),
  }),
});

The whole publishing pipeline is git commit. That is the entire point.

More soon — including notes on the Model Context Protocol server I have been building.