Skip to main content

Notes from shipping code

Deep-dives on the problems I've debugged, the patterns I've extracted, and the decisions I'd make differently next time.

Posts
A single bright thread connecting scattered fabric swatches on a table

Killing Split-Brain Content with One Metadata Export

How moving cover images, titles, and excerpts into MDX metadata eliminated 680 lines of duplicate records and the silent drift between them.

3 min read
A shield icon protecting a circuit board

Sentry Should Be Optional in Your Next.js App

A single boolean guard across three runtimes keeps Sentry from crashing local dev when the DSN is missing.

1 min read
A grid of device screens showing the same interface at different sizes

Mobile Visual Regression Without Doubling Your Test Count

A typed page config array turns 9 copy-pasted Playwright tests into a loop that runs at two viewports with zero duplication.

2 min read
A funnel pouring colored liquid into a glass flask

Correlating a Multi-Step Funnel with One sessionStorage ID

A timestamp and random suffix in sessionStorage ties scan, completion, email capture, and calendar booking into one GA4 funnel with zero backend state.

2 min read
Search results with ranked filters on a screen

Upgrading cmdk Search with MiniSearch Field Boosting

cmdk does substring matching. Keeping its UI shell and swapping the filter engine for MiniSearch gives ranked, fuzzy results with match highlighting.

2 min read
A sunrise and sunset gradient on the horizon

Cycling Theme Toggle: From Radio Group to Single Button

Replacing a three-button theme picker with a single cycling button and a keyboard shortcut reclaims nav space without losing discoverability.

2 min read
A slow-motion water droplet frozen in time

Systematic prefers-reduced-motion Across a Component Library

Auditing every animated component for motion sensitivity reveals which animations are decorative and which need static alternatives.

2 min read
A command palette interface on a dark screen

Site Search Without a Server: Static Index and cmdk

A build-time search index and cmdk power Cmd+K search across 47 pages with zero API calls.

2 min read
Tangled wires and messy cables

Phantom Dependencies: What pnpm Strict Mode Reveals

Migrating from Yarn Classic to pnpm exposes dependencies that worked by accident, not by declaration.

2 min read
An hourglass with sand flowing through it

An 8-Second Timeout for Third-Party Iframes

An iframe that never loads looks like a broken page. An 8-second timeout and a direct booking link keep users moving instead of staring.

2 min read
A funnel filtering and sorting items

Replacing a GitHub Action with 15 Lines of Shell

dorny/paths-filter silently ignored its own config. A 15-line shell case statement replaces it and actually works.

2 min read
Speech bubbles in a conversation

Tooltip aria-describedby Was on the Wrong Element

A Tooltip component passed every test but put aria-describedby on a wrapper div instead of the trigger. Screen readers never announced it.

1 min read