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.