Writing
Blog
Notes on static sites, build pipelines, and the reasoning behind the decisions baked into SSG. Fewer release announcements, more of the thinking that does not fit in a changelog entry.
-
The Client Wants to Fix a Typo
1.8.60 is about the work an agency does between builds: letting a client fix their own headline, and a GTM install that was only ever half there.
-
The Paragraph You Clicked Is Not in the File
Click-to-edit is easy to build and hard to make safe. Here is the rule that decides which paragraph a click means, and why the editor sometimes refuses to guess.
-
What Breaks If I Change This?
We built an incremental build for 1.8.60. It made a five-thousand-page site five per cent faster. Here is why we shipped it anyway, and what it is actually for.
-
One Sitemap Per Site Does Not Scale to Forty Clients
An agency has a different relationship with sitemap.xml than a site owner. Split sitemaps answer 'is it indexed' per section, without forty dashboards.
-
The Build Was Green and the Site Was Wrong
Almost every fix in four releases came from one place: a third-party crawler, weeks after a build that reported success. What those failures had in common.
-
Every January, Every Footer Is Wrong
A generator that reads the clock cannot promise the same bytes twice. Which is why the copyright year in your footer is a harder problem than it looks.
-
Your AI Agent Shouldn't Read 5,000 Tokens to Change One CSS Value
Giving an agent access to your project is half the problem. If changing one CSS value means rewriting a whole file, its context goes on learning nothing.
-
Your Local Preview Should Not Lie to You
SSG's local preview applies generated redirects and headers, reloads them after builds, and keeps browser caching from hiding files while they are edited.
-
Migrating From WordPress Is Easy. Keeping Its URLs Is Not.
A WordPress migration must preserve more than posts: original URLs, category and date archives, menus, comments and language structure all affect old links.
-
Your MCP Server Can Edit Your Website. Who Is Allowed to Talk to It?
An MCP server that edits templates and opens pull requests is not just another dev endpoint. The moment it listens on HTTP, authentication is not optional.
-
Multilingual Without Losing Track of the Page
Translating the words is the easy half. The hard half is that /o-nas/ and /en/about/ are the same page, and nothing in a file tree says so.
-
Building a Planet: One Feed From Three Sites, Yours Included
Three feeds into one took a config block. The interesting part was the four decisions under it: whose format wins, what to drop, what a dark source means.
-
I Went Looking for CPU Tricks and Found a Quadratic Loop
The plan was SIMD and PGO. The profiler said two thirds of the build was syscalls from listing one directory per post. Fixing that made it 5.25x faster.
-
AI in Your Content, at Build Time — Not in the Browser
Ask an AI a question from inside a Markdown file and bake the answer into the page — once, at build time, cached. No key in the browser, no spinner.
-
Tell the Designer What You Want: the ssg mcp Development Server
ssg mcp turns your AI assistant into two coworkers: a designer that edits templates and a content manager for Markdown. Each knows what it may not touch.
-
Related Posts, From a Line of Template to Semantic Search
Five related articles is one template line, one config block, or a small pipeline — depending on whether you want keyword overlap or actual meaning.
-
SSG 1.8.16: Content That Thinks, Announces Itself, and Links Itself
1.8.16 is about the edges of publishing: build-time AI answers, announcements that never double-post, related articles, and an MCP development server.
-
How to Use the [ai …] Shortcode: A Practical Walkthrough
Step by step: configure a model, keep the key out of your repo, drop your first [ai …] into a post, and commit the cache so CI needs no key at all.
-
How to Announce Your Posts Without Ever Double-Posting
Announcing a post exactly once, from a build that runs a hundred times. Wiring a destination, gating it behind --notify, and letting the state file work.
-
The Build Got Parallel — and the Caches Nobody Told You About
Page rendering and WebP conversion now run in parallel, one worker per CPU — plus three speed features that were already working and never written down.
-
Legible to Machines: What Landed in SSG 1.8.14
1.8.14 is about the readers you never see: social scrapers, AI agents and your own tooling. Structured data, social images that work, build-time contracts.
-
One Site, Many Workers: What Landed in SSG 1.8.13
1.8.13 turns the single worker: hook into a workers: list, and ships three batteries-included ones: cookie consent, comments and a republish webhook.
-
Static Content, Edge Transactions: Cloudflare Functions, Redirects, and Stripe in SSG
How SSG 1.8.11 bridges static speed with edge execution: redirect flattening, Cloudflare Pages Functions, and an end-to-end Stripe Checkout integration.
-
Your hero image is your LCP score
Largest Contentful Paint is usually one photograph. A tour of the build-time image pipeline — srcset, crops, cache keys — and an honest note about AVIF.
-
SSG, and the case for boring websites
A static site generator written in Go: what it actually does, who it is for, and the three things it refuses to do.