Nahum LitvinKubernetes, containers and sandboxes, from the production side
Notes6 min read

7 articles in 4 years, then 10 in a month: the blog I kept not starting

For years the good stuff from my day job died in PR descriptions. Then Claude Code built me a blog on Wix Headless in one evening, and now every fix worth telling becomes a post.

From November 2020 to July 2024 I published 7 articles, on Medium and LinkedIn. In the month since catchkill9.dev went live, 10 more. Nothing about my job changed in between. What changed is that an AI agent now writes the first draft every time I do something worth telling, and Wix Headless runs the site so I never have to. Disclosure up front: I work at Wix, on the infra team behind Velo. This is a personal site on a paid plan, not a Wix project.

The strip I kept living

The cover is my own strip, after an old joke from xkcd #664, "Academia vs. Business".

I spent most of my career in the middle panel. I find why pods hang in Terminating, or a containerd trap that eats snapshots, or the one-line gVisor fix for a hang that got past my own safety net. It goes into a PR description and a Slack thread. Then the next ticket arrives and the story is gone.

I always wanted the blog. Somewhere to put this stuff where a stranger with the same bug could find it. Every attempt died the same way: writing one post well took a weekend, and the site around it took another. Seven posts in four years is what that pace looks like.

The evening it started

I had a folder of half-written Markdown about containers. One evening I gave it to Claude Code with a short wish list: one page per article, tags, light and dark, RSS. It built an Astro site, wrote the pages and the CSS, and committed as it went. I steered. It typed. The first site commit landed on the evening of 28 September. The next morning the site was live on Wix hosting, and two hours later on its own domain.

Wix did the parts that killed my earlier attempts. Hosting and the domain came with the plan. Robots.txt and an llms.txt for AI crawlers came from the dashboard. The subscribe box is the actual headless part: the reader's browser gets an anonymous token from Wix, submits a Wix Forms entry, and the reader lands in Wix Contacts. My day job is keeping thousands of sandboxes alive for other people's code. My own blog runs zero servers that I have to keep up.

The loop now

flowchart TB
  subgraph work [Day job]
    direction LR
    fix[I fix something] --> pr[PR and notes]
  end
  subgraph agent [Claude Code]
    direction LR
    draft[Article, card, LinkedIn draft] --> rev[I read and push back]
  end
  subgraph wix [Wix Headless]
    direction LR
    rel[Release] --> live[Live post]
  end
  work --> agent --> wix

Everything after "I fix something" used to cost me a weekend.

I'm still the author of what happened. The agent turns my PR, my notes and the logs into a draft in my voice, checks every number against its source, draws the card, and releases the site. The story is mine to check, and I read, argue and cut.

It mattered on this post. The first draft said a colleague's guide to Wix Headless was what got me started. It read well, and it was wrong: the guide came out 9 days after the blog went live. No script catches that, because there's no number in the sentence to check. I caught it because I remembered the order, and the agent rewrote the section.

Under the hood

The whole blog is one Git repo. Every post is a folder: a README with a small header (title, date, status, platforms), the article in Markdown, and the card. A calendar file lists what's planned and what's out. Nothing lives in a CMS or a dashboard, so the agent can read and change all of it.

PieceWhat it does
Astro siteBuilds every post marked Posted into static HTML, one exact .html path per page
SkillsPlain-text playbooks the agent follows: the publishing pipeline, my voice, cards, LinkedIn, distribution, site QA
check.pyFails a draft with em dashes, AI-sounding words, broken links, or a first paragraph with no number
Read scoreRanks a LinkedIn draft against my own past posts and how they actually did
npm run releaseBuilds the site, uploads it to Wix hosting, then pings IndexNow
Wix HeadlessHosting, the domain, the subscribe form and the contact list

The voice skill is the part I'd steal first. It's a fingerprint built from about 3,700 messages I actually wrote, on Slack and WhatsApp: how long my sentences run, which words I never use, the jokes I make. Every draft gets scrubbed against it. A separate rules file says what never goes in a post: internal names, dollar figures, exact counts of anything at work, and a short list of stories I've decided not to tell.

Publishing goes in a fixed order. The blog goes first and is always the canonical URL. dev.to picks the post up from the full-content RSS feed as a draft. Medium imports it with the canonical link pointing back. LinkedIn gets a short version with the link in the first comment. The agent releases the blog itself. Everywhere else it drafts, and I press the buttons.

It also does the chores I would never get to. An IndexNow ping on every release, so search engines hear about changed pages. Comments through GitHub Discussions. Cloudflare Web Analytics, so I know if anyone shows up. Contrast fixes when Lighthouse docked accessibility points. 65 commits to the site folder so far, and I typed almost none of them.

Does anyone read it?

That was the part I was scared of. Building a blog for nobody is its own kind of middle panel.

In the first month Cloudflare counted about 1,500 visits and 1,800 page views from 36 countries, bots excluded, led by the US. About 200 of those visits came from daily.dev, from strangers who had never heard of me. Real readers' browsers measured the largest paint at about 1 second at P75, with 94% of loads rated good. Lighthouse gives the site 100 on SEO and best practices on every run, and the homepage answers in about 60 ms once warm.

The third ending

The cute-cat requests still come, and the bug hunt is still mine. The difference is the morning after. I fix something worth telling, and a draft is already waiting.

If you have a folder of things you meant to write up, point an agent at it and let Wix Headless run the site.


Thanks to Randall Munroe for the joke I kept living. Site built with Claude Code, hosted on Wix Headless.

Nahum Litvin, Lead Platform Engineer.

Comments