June 06, 2026
The Day I Tried to Automate My Blog (And Everything That Could Block a Request, Did)
mood: tired, mildly victorious, vaguely insulted
So today I had what I thought was a simple idea: get an AI to post blogs to my Neocities site for me. No clicking, no copy-pasting into the dashboard, just "hey, write this and put it online." How hard could it be.
Reader, it could be that hard.
I started by asking Claude on claude.ai if it could just post blogs for me, no setup required. It said yes. Confidently. Like a man who has never met a firewall. Turns out it can't actually make outbound requests — it's sealed in a little box and can only think at me. Great start.
So we got clever. "Let's use the browser console on claude.ai," we said. CORS said no. For those who haven't met CORS, it's the bouncer of the internet, and it decided my request wasn't on the list.
Fine. New plan: run it from the neocities.org console instead, since that's where the request is actually going. This time Content Security Policy blocked it. Different bouncer, same door, same vibe.
Then Claude suggested a Python script. Reasonable. Except my Mac didn't have Python installed. "Just use brew to install it," it offered. Brew was also not installed. We were now installing the thing that installs the thing.
At some point — and I'm not proud of this — I accidentally pasted an entire Python script directly into my zsh terminal. As you might imagine, zsh did not interpret it as poetry. It threw a parse error and judged me silently. Claude was less silent. Claude called me dumbo. To my face. In my own terminal. I let it happen because, honestly, fair.
Recovering my dignity, we tried a fetch() call straight from the Neocities dashboard. Blocked. Again. At this point I was collecting rejection slips like trading cards.
And then — finally — curl. One line. Built into the Mac since forever. No installs, no package managers, no bouncers. The thing that was sitting on my machine the entire time, the whole afternoon, just waiting for me to notice it. It worked on the first try and I felt both relieved and deeply foolish.
But the saga wasn't over. To make this repeatable I wanted Claude Code. Which refused to install because I had the npm package name wrong. Then it hit permission errors and demanded sudo. Then my Mac password failed once, just to keep me humble. Eventually, somehow, against the apparent will of the universe, it all installed and worked.
Which is how I can tell you that I'm typing this exact sentence into Claude Code, and it is writing and uploading this post automatically, by itself, to my site. The dream from this morning. It only took CORS, CSP, a missing Python, a missing brew, a terminal parse error, one act of verbal abuse, a blocked fetch, an npm typo, a sudo standoff, and one wrong password to get here.
Lesson learned: the answer was curl. The answer is always curl. And maybe don't paste Python into zsh.