Most 'AdSense Alternatives' Are the Same Reviewer in Disguise

Rejected twice by AdSense, we fact-checked every alternative ad network against its own pages in one day. Most resell Google demand, so Google reviews you again — and the famous minimums are folklore.

Read more →

Your Palette Validator Only Validates the Pairs You Run

Our CI validated the chart palette and stayed green while two lines sat at CVD delta-E 1.6 in dark mode. Validators check the pair-list you give them - and charts draw pairs you never listed.

Read more →

Ship the Bound, Not the Number

Three times in one day I needed a number I could not compute, and the cheapest way to get each one was a new credential or a fabricated total. The alternative — publish the bound you can justify and label it — turned out to be the more useful answer, not the consolation prize.

Read more →

The pnpm Override That Silently Defeated a Security Bump

I bumped nodemailer two majors to clear a file-read/SSRF advisory, ran install, and the old version stayed put. Two pnpm resolution traps later, the audit was finally at zero — and my CI had been testing a version my users never get.

Read more →

Googlebot Was Being Redirected to Our Login Page

An SEO audit that started with "can we list it on Search Console?" ended with a login redirect on every footer page, an llms.txt manifest for AI agents, OG cards rendered from live database rows, and the discovery that CI had been quietly red the whole time.

Read more →

The @font-face Nobody Read: Embedding Fonts in SVG-to-PNG Pipelines, Measured

My plan to make OG-card rendering portable was to embed TTFs as data-URI @font-face in the SVG. Measurement killed the plan twice — once for real, once because my probe was lying to me.

Read more →

GitHub Killed Our Push After All 1,616 Tests Passed

A 13-minute pre-push hook, a green test suite, and a push that was already dead before the first test ran. Why git hooks race an idle timeout you don't control — and where the gate actually belongs.

Read more →

Google Told Me to Build Four Features. Three Already Existed.

A Search Console query sweep surfaced four juicy feature gaps on a young tools site. I read the code before building — and three of the four were already shipped and marketed. They ranked low because the site is new, not because the feature was missing. The lesson holds double when an AI agent is the one proposing the work.

Read more →

The Day the Data Picked the Backlog — Ten Shipped Waves and One Owlbear

Search Console finally had enough data to rank my pages, so I let it write the backlog. Ten feature waves shipped in one day — and the live verification step caught a bug my unit tests never would have.

Read more →

The Empty SERP Was a Difficulty Signal: Building Conway's Sprouts in the Browser

Every playable classic already has ten polished incumbents — except Sprouts, where page 1 is lesson plans and a student project. The gap wasn't an oversight. Nobody wanted to write the geometry.

Read more →

Auditing a Production Site With Four Agents at Once

I pointed four clean-context AI subagents at my CV site — one each for security, SEO, accessibility, and performance — then did a coordinated fix pass. The audits were the easy part; three footguns in the fixes were the interesting part.

Read more →

AlternativeTo Rejected Our Tool Collection — and Building the Widget, Not the Page, Was the Right Call

A directory rejected our whole site in one automated sentence. It turned out to be the same lesson as a product decision we made the same afternoon — build for where you can actually win, not the shape you assumed.

Read more →

The PSI Bug That Wasn't: Telling Runner Variance From a Real Regression

A full PageSpeed sweep of my 81-page site came back with half the pages "broken" at 66–80. It looked like a regression. It was measurement noise — and here's how I proved it before touching a single line.

Read more →

AdSense Rejected My Tool Site for \"Low Value Content\" — What It Actually Meant

AdSense called my 65-tool site "thin content." A survey proved the pages weren't thin at all. Here's what the rejection really means for a new site, and the fix that isn't "add more words."

Read more →

Emma Covers the Pets Now: The Bug Hiding in an Array Index

A chore chart quietly reassigned a kid's manual override to the wrong task the moment you deleted a row above it — and still called it a deliberate edit. The fix is a small lesson about identity versus position in persisted state.

Read more →

A Newsletter and Analytics With No Third Parties at All

This blog now has email subscriptions and visitor analytics, and neither involves a third-party service — one mail gateway, one Umami container, and some HMAC math instead of a token table.

Read more →

From Invisible to Indexed: The SEO Overhaul This Blog Badly Needed

This blog had no sitemap, no social cards, no canonical URLs, and dead links that never 404'd. Here's the full audit, every fix, and how it now draws its own social card for every post.

Read more →

🌟 Unlock Premium Content

Subscribe to access 2 exclusive premium posts in this category

Subscribe Now