Recent Posts

All Posts

The Thing at the Top Always Wins

Put six options in front of people and the one you listed first will win. Here is how to find out which they actually prefer, including the arithmetic for whether a lead is real or noise.

Read more →

Move the Sofa Forty Times Before You Move It Once

Thirteen numbers decide whether a room works, and a sofa listed at 200 cm is usually 214 across the arms. Here is how to test a layout properly before you lift anything heavy.

Read more →

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 →

The iPhone Silent Switch Mutes Web Audio — and the Documented Fix Breaks Your Microphone

An iPhone's ringer switch silences Web Audio but not HTML audio. WebKit's own fix works, and quietly makes getUserMedia throw. Four iOS audio behaviours, measured, with the code.

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 →

Self-Hosted CI with an AI Agent

GitHub wanted money for Actions on a private repo. The NAS in the closet was already running Gitea. Here is the full recipe for turning it into a CI runner, with an AI agent doing almost all of it.

Start series →

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 →

Invisible Banding in Generated OG Images: Two satori Traps, and One I Got Wrong

Generated social cards carry hard edges and lost spaces you will never spot by eye. Two satori traps with the pixel measurements — plus the third I published that turned out to be wrong.

Read more →

Seo

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."

Start series →

The Volume-Tool Inversion: Your Keyword Tool Points at the Terms You Can't Win

Our best query earned 410 clicks while the keyword tool reported its volume as zero. The terms the tool could size were the ones we lose. That inversion is structural, and it changes how you should use volume data.

Read more →

A Backup Isn't a Backup Until Something Tries to Restore It

My VPS backups were quietly incomplete. Closing the gaps with an encrypted nightly rotation pushed into git, and a quarterly drill that restores everything and emails me when it can't.

Read more →

Classroom

Seating plans, classroom jobs and week-one routines — what the evidence supports, where it's just practitioner wisdom, and free no-signup tools for each.

Start series →

Every Anime Power-System Generator I've Built — Stands, Cursed Techniques, Nen and More

A tour of the free, browser-only generators I've built for a dozen anime power systems — Stands, cursed techniques, chakra natures, Nen, Haki, Hunter ranks — and what makes each system so fun to argue about.

Read more →

The Free Family Tools I Reach For — Baby Names, Party Timers and Household Chaos

A tour of the free, browser-only tools I've built for family life — picking a baby name, matching siblings, running a party game, and keeping the chore rota honest.

Read more →

Free Browser Games I've Built: Two-Player Strategy and Make-Your-Own Review Games

A tour of the free, no-install browser games on the site — two-player strategy classics like Hex, Nim and Sprouts, and make-your-own review games for the classroom.

Read more →

Harmless Prank Web Tools: Rigged Coins, Fake Lie Detectors and Gotcha Links

A tour of the free, browser-only prank tools I've built — rigged coins and dice you secretly control, fake lie detectors and ghost detectors, and shareable gotcha links — plus a note on keeping them harmless.

Read more →

AI Search Optimization

Generative Engine Optimization is not a new SEO fad — it's a second game played on the same board. Here's what GEO is, how it differs from SEO, and why the long tail is where you actually win.

Start series →

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 →

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 →

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 →

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 →

Dragon Ball Power Levels, Explained: Scouters, \"It's Over 9000,\" and the Math Fans Actually Use

What power levels actually are, the true story behind \"It's over 9000\" (the original line was 8000), why the numbers vanished, and the fan math that replaced them.

Read more →

Equal Playing Time in Youth Sports: A Fair-Rotation Guide (with a Free Calculator)

How to rotate a youth-sports roster so every kid gets roughly equal minutes — the why, the honest exceptions, and the exact math (with a free calculator to do it for you).

Read more →

Why AI-Generated Code Needs Guardrails

AI coding assistants are transforming development, but research reveals hidden costs. Discover why AI-generated code needs structured guardrails to prevent quality issues.

Start series →

A Practical SEO Guide

Before sitemaps or structured data, SEO starts with one question — can a crawler actually read your content? Part 1 covers rendering, semantic HTML, and headings.

Start series →

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 →

lans.cloud, One Week In: A Classroom Screen, a QR Treasure Hunt, and Your Data in One File

The launch week didn't slow down — the collection now stands at 50 tools, including a full classroom screen for smartboards, an offline QR treasure hunt generator, and a page that hands you all your data.

Read more →

lans.cloud: 37 Free Tools, One Promise — No Ads on Your Projector

I built a collection of 37 free single-purpose web tools — classroom seating charts, timers, crochet calculators, D&D dice and more. Here's the tour, and the design promise behind all of it.

Read more →

Dual-Agent Validation System - Test Post

Testing the new dual Marketing + Development agent system for rapid idea validation and deployment.

Read more →

SkillForge & Automation Experiments - Live Validation Update

Current status of live experiments on SkillForge marketplace, business automation agents, and AI ops tools. Early demand signals and next steps for monetization.

Read more →

Building an MCP Server

Learn to build a Model Context Protocol server that extends AI assistants with custom tools. Part 1 covers MCP fundamentals and building your first server with FastMCP SDK.

Start series →

Building Secure Web Authentication

Learn the fundamentals of web authentication, from sessions to JWT tokens, and understand the security implications of different approaches. Part 1 of a comprehensive authentication series.

Start series →

Building a Modern Reverse Proxy with Traefik

Learn how to build a production-ready reverse proxy with automatic SSL certificates and service discovery using Traefik. Part 1 covers the fundamentals and architecture.

Start series →

Getting Started with Markdown

Learn the basics of markdown syntax and how to use it effectively in your blog posts.

Read more →