Monthly Review

July Was Intense

Cover card reading July Was Intense, over a grid of the projects shipped that month

July ran across more than 50 repositories and something like 1,400 commits. Every link below is live as I write this, and I clicked through all of them rather than trusting my own notes.

I don't usually write these up. This month had enough in it that I wanted the whole thing in one place, if only so I can find it again in a year.

The plugin

WP Multitool took eight releases in a month, which is the most I've ever shipped of anything in that span.

Most of that was making the thing feel finished rather than adding to it. It's properly translated now, all the way through, instead of the half-done string files most plugins carry around. The object cache diagnostics got rebuilt so they check a whole spread of things at once and tell you whether the cache is actually doing work, which is a different question from whether it's switched on. The Config Manager can put your wp-config back the way it was, and that sounds dull right up until the afternoon you need it.

I also taught the release script to refuse. It now runs its own checks before anything ships, and a release that doesn't pass them doesn't go out. I built that after one too many evenings catching my own mistakes by hand, and it has caught things since, which is the whole point.

Three pages went up around it. There's a landing page for agencies, because someone running fifty sites has a different problem from someone running one. Everything I'd written about autoload bloat got pulled into one place instead of being scattered across half the site. And the changelog now drives updates through Polar, so people who bought the plugin get new versions the ordinary WordPress way instead of downloading a zip like it's 2013.

I wired up conversion tracking too, self-hosted through Umami, so I can see what people actually do on the site without handing that to anyone else.

The things that tell you what's wrong

Three of my sites exist to point at problems, and all three got better at it.

The speed badge used to show a letter grade. It now shows how long the server actually took to answer, in real numbers, measured on the homepage. A letter is something you can argue with. A measurement is harder to wave away. I wrote up how the whole thing works in a post, and while I was in there I rewrote the rest of makewpfast.com into first person. It used to read like a company. There is no company, there's me.

Why Does My Site Suck got its permissions redesigned and then a long run of hardening passes on the scanner. Each one came out of me sitting down and trying to break my own thing, which is unglamorous work and much better than a user finding it first.

And fix-wp.com went through a complete cleanup in a single day. Security contact details, images that load late without the page jumping around underneath you, fonts served from my own server, caching set up properly, and a tightened policy on what the browser is allowed to load. It came out of that noticeably faster and noticeably tidier. One day, start to finish, which is the first time that particular loop has run that cleanly for me.

The things that sell

UltrafastWoo turned into an actual product this month. It moved onto Cloudflare's hosting, got its own social card, the files that tell AI crawlers what they're looking at, and three purchase tiers through Polar. Next to it there's a live demo you can poke at, because when you're selling speed a working demo beats a paragraph of adjectives.

merkdex finally started pulling real offers in from outside, which it had never managed before. It also picked up self-serve registration, so people can sign themselves up instead of waiting on me, and it now takes price snapshots every week so there's a history building up rather than just a snapshot of today.

fairprice.work moved onto its own domain, got a feedback widget, and had its homepage picked apart and rebuilt properly. curlship got an endpoint for pulling a single listing, the privacy and terms pages it should have had from the start, a rate limit on the upgrade route, and a pile of small interface fixes. hunazo got verified testimonials sitting right under the signup button, where they're actually useful.

The things people use

TeleChat is live chat you answer from Telegram, which means no dashboard to keep open and no app to remember. The landing page and the panel both got redesigned this month, I wrote it a proper deploy script, and it moved onto its own domain.

kiedy is a small scheduling tool, and I moved it onto a different framework, cleaned up the duplicate days it kept producing, and made the dates sort in the order dates go in. The business version now runs on its own host instead of sharing.

windma got a new name, an AI moderation board, and a landing page pointing at the beta. It also got a fix for a live connection that had been quietly dropping after a few seconds, which explained a lot of behaviour I'd spent weeks blaming on other things.

Two of them aren't work at all. The eclipse site got a visual overhaul, buttons that drop the event straight into your calendar, and a chunk of it translated into a fair number of languages. And rower.marcindudek.dev is a bike trip, written up day by day with the photos, now sitting on a domain of its own. I enjoyed building that one more than anything else on this list.

Over on wordpress.org, Zero Blocks Given shipped twice and rolled out across the sites I look after.

My own site

marcindudek.dev got a Press and Media page in both languages, carrying its first citation and the "Backend Bottlenecks Exposed" interview I did for WP Plugins A to Z. That felt good to put up.

The offerings page picked up three new things and a search box in the filter bar, which starts to matter once the list is longer than a screen. I published three posts: a benchmark of one-shot code review with the cost per run charted out, 285 permission rules, only 41 did anything, and a piece on moving files with animated QR codes.

Underneath, I pulled every font onto my own server so the site doesn't call out to Google at all, and rebuilt the mobile navigation as a proper drawer after discovering the old one was close to unusable on an actual phone.

The fleet

web-data-labs.com and the scrapers behind it got a clearing-out month. I retired the ones that had quietly died and were still sitting in my count as though they were inventory, gave the orphaned pages a proper "this is gone" response instead of leaving them to 404 forever, and repaired the Shopify and IMDb ones.

The fleet brought in $290.68 in July, about the same as May and June. Small, steady, and it runs without me touching it.

What I built for myself

The unglamorous half of the month went into tooling, none of which has a public address, all of which is why the rest of the list was possible.

The biggest one is a crawler that audits an entire site the way the expensive desktop tools do, walking every page and checking a long list of things, or pointing at one page when that's all you need. I've since run it against my own sites and it found things I'd have sworn were fine. Alongside it I taught my code grader to judge WordPress code by WordPress conventions rather than by rules from a different world, which cut the false alarms down to almost nothing, and I gave the nginx and LiteSpeed optimizers real test suites so I can change them without holding my breath.

The rest is plumbing for how I work. My task inbox now reaches me on Telegram and I can answer from there, which means a question doesn't sit unread for six hours. The mobile client became a proper phone app. There's a dashboard showing everything running at once, and a messaging layer between working sessions that killed an entire category of dropped work. A monitor watches for anything burning a processor core for hours and tells me, based on what the process is doing rather than what it's called. The alerting itself now gets verified end to end instead of assumed to work. My browser automation grew up enough that every testing pass runs through it. There's a register of which port belongs to what, so two things stop fighting over the same one. And a job checks in on plugin install counts from wordpress.org every day so I can see movement rather than guess at it.

The client side

Alongside my own things there was client work, and most of my hours went there. A sales and service system with payments and notifications running through it. A set of blocks and templates for a large product site. Log hygiene and a platform update for a hosting company. Performance research on an e-commerce engine. An events plugin, a batch of marketplace fixes, and a service site. No names and no numbers on any of it, because that part isn't mine to publish.

What I killed

Three things went away on purpose. I deleted a pile of auto-generated pages for local businesses, because the content was invented and the plan for getting it in front of people didn't survive contact with the rules I actually have to follow. I closed a marketing channel that had returned nothing at all in four months of feeding it. And I switched off a page-generation pipeline after it ran itself out of memory. All three were mine to kill, all three were the right call, and none of them cost me more than an afternoon to walk away from.

August

Fewer new things, more depth on the ones that already have people using them. The plugin has the most momentum, so it gets the most of my time. Everything else on this list stays up and stays maintained.

If you'd rather have the running version than the monthly one, there's a devlog.