On writing
Most of what you read on my blog has been sitting in source control for weeks. Some pieces for months. By the time you see them, they’ve been re-read by half a dozen people, argued with by two or three, and rewritten more times than I’d like to count.
Here’s how a post actually gets made.
Wrestling the draft
It starts with a thought I can’t let go of. I roll it around for a few days. At the gym, on the train, in the shower. Eventually it coheres into something with edges. Then I write it down on paper. Bullet points, half-sentences, arrows between ideas. Nothing fit for human consumption.
Once there’s a shape, I take it to Claude. Not to write the thing for me. That produces fluent slop I can spot from a hundred feet. I take it there to argue. I lay out the thesis and ask for the counter-argument I haven’t thought of. The strongest version of the position I’m critiquing. The piece of context I’m probably missing because I’ve been thinking about this for thirty hours and the reader has thirty seconds.
Then I research. Sometimes I’ve already read the material I’m responding to and I’m just relocating it. Sometimes I haven’t, and the research bends the draft out of shape. The post I sit down to write is rarely the post I publish.
Where attention snags
Before a post goes out, I send the draft to people I trust. Friends, colleagues, the occasional stranger who’s earned a reading. The site has a quiet commenting layer built into it. Anyone with the link can click on a sentence and leave a note attached to that exact line.
Per-sentence is the trick. I don’t want the third paragraph confused me. I want this specific sentence is the one I had to re-read. The point at which someone felt the need to comment is more useful than the comment itself. It tells me where their attention snagged, and where they were in the argument when it happened. I’m not sure anyone else writes like this. I find it useful.
For this post, I’ve left the commenting layer open to the public. Click any sentence. Leave whatever you want. The comments go straight into the void on submit. I’m not collecting anything. This post has already been through the proper flow. But the workflow is identical to the one I use with reviewers. Try it. The interesting thing isn’t what you write. It’s noticing which sentence you stopped at.
Why bother
I write for myself first. Articulating a thought is the only way I know how to find out whether I actually have one. The posts that read most fluently are usually the ones I had to fight hardest with. The fight is where the position got hammered into a shape I could actually defend.
In high school I’d resent being asked to write 1,200 words on something I had no opinions about. Now I write 1,200 words a week on things nobody asked me to. The trick, it turns out, was choosing the question.
I don’t expect many people to read this site. Apparently more of you do than I’d guess, which is humbling and slightly disorienting. But the deal I have with myself is that if readership went to zero tomorrow, I’d still post. The writing is the point. Finding readers is the bonus.
The other thing writing does is force me to hold a position long enough to find out where it’s wrong. If I never changed my mind I’d be a rigid, exhausting person to work with. We form each other’s opinions through conversation, and the post is just the opening move. The real movement happens afterwards, in the DMs, when somebody walks me through the part I got wrong.
Boring by design
Because the writing itself is the heavy lift, I want the mechanics of publishing to get out of the way. Mechanically, this site is boring on purpose.
I write in markdown, set a vague release date, and mark the post as a draft. If it’s still a draft when that date comes around, nothing happens. I keep working on it. Otherwise, a GitHub Action notices, builds the site, and pushes the static artifacts up to my Bunny CDN.
That’s the whole editorial system. Markdown, git, a small Action, and a CDN. No CMS. No Notion-to-MDX pipeline. No AI quietly auto-publishing my hot takes while I sleep.
The things I do let into the markdown have to earn their place. If a post leans on data, I drop a JSON block in line and a build-time component renders the chart. Code blocks get proper syntax highlighting. The palettes are colour-blind safe — a few friends are red-green colour blind, and I’d rather not lose them on the first scatter plot. Anything that genuinely improves how a post reads, I’ll add.
I also use footnotes. I was taught Oxford referencing in school, but I found it slippery — by the time you’re trying to attribute a half-remembered claim back to a vague bibliography entry, the thread is gone. Footnotes can drop you directly onto the source I’m pointing at, and where I can, I’ll link you to the exact paragraph inside it. The faintly absurd consequence is that people now occasionally cite me citing someone else. I can live with that.
The hard rule under all of it: the server render is gospel. You came here to read a post. You shouldn’t have to load megabytes of garbage to do it. That’s the reason for Astro. By the time the page hits your browser, the work is done. You want it now, and now is what you get.
Who reads this
I run my own analytics with Umami, self-hosted. It tells me roughly where people are reading from, what they came in on, and which posts they stayed on. I don’t check it often. Every few months I’ll have a look and see what landed.
The recent surprise has been Kagi. A lot of the inbound right now is small-web folks finding the site through there. That’s exactly the pocket of the internet I’d hoped to be findable from. ahrefs catches the rest. The odd link from a forum. The occasional Hacker News thread I posted to years ago and forgot about. The slow trickle of someone quoting a sentence somewhere I’ve never heard of.
Out loud
Before you go: leave a comment on a sentence. I won’t see it. The box is there for the workflow, not the data. But stopping at a sentence, deciding this is the one, and putting words next to it might tell you something about how you read.
The next thing I want to do with all of this is speak. There are posts sitting unpublished in this folder. A few that probably won’t be, because they’re better as a forty-minute conversation than a 1,500-word essay. At some point I’ll show up at something and try the spoken version, and find out whether the same instinct works out loud.