Field notes from the review team
Learn to ship code that survives
The mistakes every team makes — in the code we write and the code we generate — and how to catch them before they ship. Friendly, concrete, ten minutes at a time.
Accessibility
Interfaces every person — and every input device — can actually use
AI Writes Divs by Default: Reviewing Generated Markup for Accessibility
Generated UI code looks polished and renders beautifully — and its accessibility tree is often empty. Here are the four smells I hunt for when reviewing AI-assisted frontend PRs.
Tables a Screen Reader Can Actually Navigate
A well-marked-up table lets a screen reader user move through data like a spreadsheet — every cell announced with its headers. A div-built one reads as a stream of loose numbers.
The Route Changed and Nobody Noticed: Focus Management in Single-Page Apps
In an SPA, navigation is something you simulate — and if you don't move focus when the view changes, screen reader users are left sitting on a button that seems to do nothing.
When Red Is the Only Signal: Color, Contrast, and the Users Your Palette Forgets
Our deploy dashboard was a wall of red and green dots — until a colorblind teammate asked which ones were broken. Color can decorate meaning, but it can't be the only carrier.
Forms Everyone Can Fill: Labels, Errors, and the Autocomplete Attribute You Keep Forgetting
Most form accessibility bugs aren't exotic — they're a label that isn't wired to its input and an error message nobody's screen reader ever announces. Both are cheap to fix.
The Div With a Click Handler: Why Semantic HTML Beats ARIA Every Time
A styled div can look exactly like a button and still be invisible to half the ways people interact with your app. Native elements do the heavy lifting — if you let them.
Unplug Your Mouse: What Keyboard-First Testing Teaches You About Your App
A broken wrist turned one of my teammates into our best accessibility tester overnight. Here's why a keyboard-only pass catches half your a11y bugs before anyone files them.