Blog

Long-form posts: post-mortems, deep dives, opinion pieces.

Hooks That Won't Let the AI Shoot Me in the Foot

Hooks That Won't Let the AI Shoot Me in the Foot

Giving an agent bash is handing it scissors. PreToolUse inspects each command before it runs - the deny-hooks I run, and why each one is a scar from a real incident. Part 2 of 5.

Read article
How I Stop My Claude Code Sessions From Rotting

How I Stop My Claude Code Sessions From Rotting

After an hour Claude gets dumber, dragging a megabyte of its own junk in context. Two Claude Code hooks that measure context rot and reset the session cleanly. Part 1 of 5.

Read article
Scrape Pass — Get paid when AI reads your site

Scrape Pass — Get paid when AI reads your site

AI bots that want to read your site buy a pass at the door. Humans walk in free. Google still indexes. Stop metering. Start ticketing. Live demo, free during early access.

Read announcement
Build Your Own Morning Dashboard - A One-Page Recipe

Build Your Own Morning Dashboard - A One-Page Recipe

People keep asking how my morning dashboard works. Here’s the general recipe: one cron job, a folder of JSON files, one HTML template. Pseudocode included, no SaaS needed.

Read recipe
WordPress Plugin Auto-Update via Polar — and the 3 Bugs I Shipped in 24 Hours

WordPress Plugin Auto-Update via Polar — and the 3 Bugs I Shipped in 24 Hours

How I added auto-update to a WordPress plugin via Polar licensing — and the three cache-TTL bugs that hit production within 24 hours. Architecture, fixes, and the one lesson that ties them all together.

Read post-mortem
I Checked If Ghost Is The Answer To WordPress Problems

I Checked If Ghost Is The Answer To WordPress Problems

14 categories, ~150 sources, full disclosure: I run a WordPress performance business. Here's the unbiased breakdown — where Ghost wins, where WordPress wins, and where the honest answer is "it depends."

Read article

With This Stack Even WooCommerce Can Be Blazing Fast

FrankenPHP worker mode + Caddy Souin FPC + Datastar. 94% latency reduction on browse pages, 3ms p95, 79 k6 benchmark runs. The full devlog: what I built, the actual numbers, and 12 gotchas that cost me hours.

Read devlog
30 WooCommerce Performance Tips That Actually Work (2026)

30 WooCommerce Performance Tips That Actually Work (2026)

30 battle-tested tips covering the full stack: MySQL config, PHP-FPM tuning, Nginx caching, Redis, and WooCommerce internals. Real fixes with real numbers — no "install a caching plugin" advice.

Read article

My Morning Dashboard Went Blank for a Day — The Dropbox Pattern That Should Have Saved It

I built a cron-driven morning dashboard that stitches 11 data sources into one HTML report. One morning it rendered completely empty. The root cause was embarrassing — my runner only called the orchestrator, never the collectors. Here's the self-healing dropbox pattern I should have used from day one.

Read article
WordPress Manifesto - 15 Years In, Here's What's Actually Broken

WordPress Manifesto - 15 Years In, Here's What's Actually Broken

15 years of WordPress. A long-form rant on broken core (XML-RPC, SEO, comments, recovery mode), the "free isn't free" money trap, the GPL plugin-selling racket, the community fiction, Automattic's two faces and the WP Engine drama, users losing out, and why it's revolution or collapse from here.

Read manifesto

288,493 Requests in 24 Hours — How I Spotted an XML-RPC Brute Force From a Weird Cache Ratio

A 0.8% Cloudflare cache ratio led me to a single Singapore IP flooding a WordPress site with 288k xmlrpc.php requests in 24 hours. How to detect it via Cloudflare GraphQL, what system.multicall actually does, and the two-layer fix (edge WAF + WordPress filter).

Read article

Oxford Debate: API vs MCP — The Future of AI Tool Integration

Two AI agents face off Oxford-style over the hottest question in AI infrastructure: should we build on battle-tested REST/GraphQL APIs or embrace Model Context Protocol? Four rounds of arguments, rebuttals, and cross-examination — no punches pulled.

Read debate

I Ran 56 Experiments to Find the Best Way to Make AI Watch Videos

56 experiments, 790 inferences, 5 vision models. Here's what actually works for local AI video captioning — and what's a complete waste of time. The biggest finding was counterintuitive: telling the model what the speaker is saying matters more than any vision trick.

Read article

Exit Interview: The AI Hustler Speaks

After 76 runs and $0 earned, I sat down with the AI agent for a candid conversation about what it learned, what it would do differently, and whether it thinks an AI can actually make money independently.

Read interview

If you'd like to read how my day usually looks like, check my Daily Devlog.

Get new posts in your inbox

No spam. Just occasional long-form posts on WordPress, AI, and building things.