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-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-07-19productivity

How I Stopped Running out of Tokens

A practical rundown of tools, settings, and habits that reduce token consumption when using Claude Code as your daily AI coding assistant.

2026-07-05rails

Audit a Rails Project with the Thoughtbot Audit Skill

Turning a Claude skill audit report into a labelled, severity-tiered GitHub backlog, and what the skill found in a small Rails 8 app.

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.