13 stories

What I tried, what broke, what I kept. Notes from the work, with the trade-offs left in.

Three identical cartoon robots, each building a different block tower from a different instruction sheet
AI workflow · 2 min read

Does AGENTS.md change what a coding agent builds?

Does an AGENTS.md file change what a coding agent builds? I ran the same prompt 14 times and changed only that file. The structure moved far more than the quality.

Read
A cartoon robot bowling down a lane with bumper rails, next to a padlocked envelope and a closed gate
Security · 2 min read

Guardrails for AI agents: hooks, not hopes

A rule in a prompt is a suggestion. I moved the rules I can't afford to break into hooks and narrow agents, then audited them and found the gap in my most-used setup.

Read
A cartoon phone where a picture card wrongly overlaps the header card above it
Performance · 2 min read

iOS Safari's compositor ignores your z-index

It looked fine on every screen except the one in my pocket. On iPhone, a sticky image bled through content that should cover it, and raising z-index did nothing. It wasn't a stacking problem at all.

Read
A cartoon browser tab with a broken pixel icon under a magnifying glass, and a pipe turning neat bits into squiggles
Shipping · 2 min read

The favicon OpenNext corrupted

A Next.js site on Cloudflare Workers served a broken favicon in production. The build had read a binary file as text and cached the damage as immutable.

Read
A closed cartoon cookie jar set aside while static page cards fly fast from a cloud to a phone and a laptop
Performance · 2 min read

The cookie-free Supabase client

On a public Next.js site, one cookies() call made every page dynamic, so every visit ran a function. The fix is a client that never asks for cookies, plus caching by page type.

Read
A cartoon brain-shaped cabinet where a tiny robot scribe files index cards into drawers
AI workflow · 2 min read

A second brain that updates itself

My notes went stale because writing them was a chore. Now a hook spots what changed in each coding session, and an agent writes it into the vault, with no model call until there's something worth saying.

Read
Small cartoon hands pressing oversized rounded keys with shapes, next to a speech bubble with a sound wave
Shipping · 2 min read

Ketikaria: a typing game for kids who can't read yet

A browser typing game for ages 4 to 10, including children who can't read. Every instruction has a voice, every key is a big target, and there's no way to fail.

Read
A cartoon key with a timer for a head unlocking one open drawer of a filing cabinet, while every other drawer stays padlocked
Security · 3 min read

One token, one action: uploads that can't roam the bucket

A CMS uploads files straight from the browser to a storage Worker. What stops that endpoint from being an open bucket is a token that lives five minutes and names the one thing it may touch.

Read
A cartoon person pulling a lever that swaps one framed page for another, while a construction crane sleeps in the background
Shipping · 2 min read

Publish without a rebuild

A footer link changed, the build passed, and the site still served the old value. So publishing became a database transaction instead of a deployment.

Read
A cartoon hand dragging a browser scrollbar while the page header shrinks, next to a bin holding a crossed-out paper
Performance · 2 min read

A shrinking sticky header with zero JavaScript

The header sticks, shrinks its logo and drops the tagline as you scroll, all in CSS with scroll-driven animations. Browsers without support get the finished header instead of a scroll listener.

Read
A cartoon desk with a large monitor showing a simple form with big fields and one big button, beside reading glasses and a mug
Shipping · 2 min read

A CMS for editors who aren't the developers

Admin panels usually fit the people who build them. This one fits the people who actually use it: older editors, so the type is bigger, the contrast is higher and labels never hide.

Read
A cartoon robot referee holding up a red card at three balloons marked with a percent sign, a ruler and a shield, next to a checklist on a bench
Performance · 2 min read

An SEO audit that refuses to grade myths

Plenty of SEO reports score things Google has said it ignores. This engine keeps a list of checks it will never build, cites a source for every rule it does run, and won't show a score without its coverage.

Read
A cartoon robot mail carrier stamping a letter in an open ledger while posting another into a mailbox, under a storm cloud over the post office
Shipping · 2 min read

Log first, email second

When a form sends an email, the email is the fragile part. Rate-limit, write the request to the database, then send the email and record how it went. A provider outage should never cost you a lead.

Read