Every few years I get the itch to build my own site again. There are plenty of good blog platforms — Medium, Substack, Ghost, Bear — but they all come with tradeoffs: lock-in, weird editorial choices, paywalls, or just a look that isn't quite mine.
The stack#
The whole thing is intentionally simple:
- Next.js for the framework
- MDX for the posts (Markdown with React components mixed in)
- Tailwind CSS for styling
- Shiki for syntax highlighting
- Statically exported, served by nginx on a small VPS
No database. No CMS. No build queue. Just .mdx files in a git repo. When I push, GitHub Actions builds the site and rsyncs it to the server.
Why static#
A blog has roughly two operations: write and read. Both are best-served by plain HTML. Static export means:
- The site is just files. No process to babysit.
- It's basically free to host.
- It's fast — first paint usually finishes before you can blink.
- I can serve it from any random web server, including the one in my closet.
That's the whole pitch.