Building a Blog That Just Works
I decided to start a blog. I wanted something simple: a static site I control that loads fast and is easy to write for.
The requirements were straightforward. Fast, simple, pleasant workflow. No JavaScript frameworks, no heavyweight CMS. Just markdown files that become HTML pages.
This is what I built.
What I Wanted
The goals were simple:
- Fast. No JavaScript bloat, no client-side rendering, no framework overhead. Static HTML that loads instantly.
- Simple. Write markdown, get HTML. No database, no admin panel, no plugin ecosystem to maintain.
- Pleasant workflow. Draft a post, see it live with hot reload, deploy with a git push.
- Good defaults. SEO files (sitemap, robots.txt), RSS feed, and responsive design should just work.
That's it. No analytics tracking, no comment systems, no newsletter signups. Just fast pages with words on them.
The Stack
I built a custom static site generator in Go. The stack:
- Go - Fast builds, single binary, stdlib has everything I need
- Goldmark - Markdown parser with frontmatter support
- Pico CSS - Classless CSS framework (semantic HTML, zero classes)
- GitHub Pages - Free hosting with auto-deploy via GitHub Actions
The build tool has three commands: build, serve, and new.
How It Works
The build process is straightforward. Parse markdown files with frontmatter, convert to HTML, optimize assets, write everything to a dist/ folder.
Posts are markdown files with frontmatter:
---
title: "My Post Title"
date: 2026-01-31
summary: "A brief description"
draft: false
---
Post content here...
The build pipeline:
- Parse posts - Goldmark converts markdown to HTML, extracts frontmatter
- Optimize images - Resize to max 1200px width, compress JPEGs at 85% quality
- Minify assets - CSS and HTML get minified for production
- Generate SEO files - Auto-create
sitemap.xml,robots.txt, andfeed.xml(RSS) - Render templates - Go templates for the homepage and post pages
Pico CSS handles all the styling with zero custom classes. It's a classless framework, so semantic HTML just works. An <article> becomes a card, a <header> inside it gets a darker background. No class names needed.
The Workflow
Writing a post:
# Create a new post
go run . new "Post Title"
# Edit the generated markdown file in content/posts/
# Start dev server with live reload
go run . serve
# Build for production
go run . build
The dev server watches for file changes and auto-reloads the browser. Edit markdown, save, see the result instantly.
Deployment is just git push. GitHub Actions runs the build and publishes to GitHub Pages. No manual steps, no deployment configuration. Write, commit, push, done.
The Results
The site performs well.
Lighthouse scores: 100/100 across Performance, Accessibility, Best Practices, and SEO.
No JavaScript means no bundle to download, parse, or execute. Pages load quickly, even on slow connections.
Pico CSS adds minimal overhead, and the semantic HTML means good accessibility by default. The auto-generated sitemap and RSS feed handle SEO and discoverability.
It's exactly what I wanted: fast, simple, and it just works.
How I Built It
I used AI-assisted development for this project. Started with Gemini to devise the original plan (tech stack, requirements, big picture architecture). Then Claude with Superpowers for detailed design and planning. Codex handled the implementation.
The workflow: brainstorm with Gemini, plan with Claude, implement with Codex.
Closing
That's the site. No frameworks, no databases, no complexity. Just markdown files that become fast HTML pages.
It's exactly what a dev blog should be: simple, fast, and mine.