swiss-cow

Building swiss-cow

I wanted a simple personal website. Not a SaaS product, not a custom CMS, not a Notion-backed blog. Just a folder of markdown files rendered into HTML.

Here's what I ended up with.

Tech stack

  • Next.js 15 with the App Router
  • TypeScript everywhere
  • Tailwind CSS for styling
  • MDX for blog posts — markdown with the option to embed React components

Why MDX over a CMS

The blog post files live in the repository. To write a new post, I create a .mdx file in content/blog/. To publish, I push to main.

This is the simplest possible setup. No login, no admin panel, no API keys. Version control is the "CMS".

Design decisions

The design is intentionally minimal. I was going for the aesthetic of sites that get shared on Hacker News — sites like overreacted.io or danluu.com. Content first, decoration second.

Max content width of 672px (Tailwind's max-w-2xl). Inter font. Black text on white background.

What's missing

  • RSS feed (coming soon)
  • Search (probably never)
  • Comments (definitely never)

The simplest thing that could possibly work.