Software that works, and writing about how it got that way.

Senior engineer with 15+ years of shipping. I write about the craft, the trade-offs, and the parts of the job that don't fit on a résumé. New posts monthly; opinions formed slowly and held loosely.

2026-10-01javascript

When a Site Blocks Text Selection

A DevTools console snippet to restore text selection, copy, and right-click on a site that blocks them.

2026-09-06health

What I Want for My Birthday

If you're facing a cancer diagnosis, or caring for someone who is, cancer may have a metabolic root cause, and that could change how it's treated.

2026-08-15rails

Displaying File Names for Multi-File Inputs with Stimulus

How to build a small Stimulus controller that displays individual file names when users select multiple files, replacing the browser's generic count.

2026-03-15css

CSS Refactoring with an AI Safety Net

How to safely refactor messy CSS using AI assistance and screenshot-based visual diffing as a regression safety net.

2026-02-21productivity

Building an AI Blog Editor with Claude Skills

Creating an AI blog editor with Claude Skills—like having a code reviewer for your writing when you don't have a human editor.

2026-05-02javascript

A Vanilla Routing Experiment

Building client-side routing with vanilla JavaScript: What started as a simple experiment revealed the hidden complexity that SPA frameworks solve for you.