Things I've written
I write about design engineering, UX research, design systems, accessible React, and AI-integrated product design.
Featured
The Accessibility Tax You Pay Later Is Always Higher
Retrofitting WCAG compliance into a 2-year-old codebase costs 10x what building it in from the start would have. Here's what that debt actually looks like.
Agent Skills, Prompt Injection Defense, and What Developers Found
Curated index of 1,497+ real-world AI agent skills from Anthropic, Figma, Vercel, and 110+ contributors, plus prompt injection defense patterns.
The Prompt Library That Stops You Starting From Scratch
prompts.chat has 164,000 GitHub stars and 108,000 community prompts. Here's how to use it in a real workflow — browsing, CLI, MCP, and self-hosting for privacy.
Motion Is Not Delight. It Is State.
Animation communicates status, causality, priority, and trust — not decoration. A practitioner's guide to treating motion as UX infrastructure, not polish.
Node.js APIs Are Part of the Interface
API shape determines frontend states, loading behavior, and error copy before a line of UI code is written. The interface starts at the endpoint.
The Design Token Spec Is Finally Real. Now What?
DTCG 2025.10 is stable, Style Dictionary v4 supports it, and Figma Variables can export to it. Here's what actually changed and what still requires judgment.
The Best AI Workflow Still Ends With a Human Review
AI gets a lot right. It also misses things a human catches in 30 seconds — edge cases from domain knowledge, whether the solution actually solves the problem.
Agents Should Show Their Work, Not Their Chain of Thought
Chain-of-thought traces are often wrong. Real transparency means showing the files read, commands run, and decisions made — not the reasoning monologue.
The Screenshot Is the Missing Test for AI-Generated UI
AI code can pass unit tests while producing visually broken UI. Visual regression testing closes the gap — here's how to wire it into an AI coding workflow.
Context Engineering Is Just Information Architecture With Consequences
What you put in an LLM's context window is information architecture. The same principles apply — priority, grouping, hierarchy — but the stakes are higher.
A Skill Is Better Than a Prompt When the Work Repeats
When to encode a task as a Claude Code skill versus writing a prompt each time — and how to write a skill that actually holds up.
AI Coding Agents Need Threat Models Too
Prompt injection, credential exposure, supply chain risk, scope creep — security considerations for AI coding agents and the specific mitigations that work.
The Agent Permission Model I Want in Every Coding Tool
What Claude Code's permission system gets right, what granular agent permissions should look like, and why ask-everything vs full-autonomy is a false choice.
MCP Is Boring in the Best Possible Way
The Model Context Protocol is infrastructure that works by not being interesting. It solves real problems without drama, and that's exactly why it matters.
Motion Graphics Made Me Suspicious of Pretty UI
What a background in After Effects and broadcast production teaches about product animation — and why most UI motion is noise.
The Interface Should Tell You What Just Happened
Feedback patterns in UI — how interfaces communicate the result of user actions, when toasts fail, and what to use instead.
Scroll Animation Is Usually a Content Problem
Scroll-triggered animation often hides weak content. Before adding another reveal animation, ask whether the content actually earns it.
Microinteractions Should Have a Job Description
Microinteractions that communicate state earn their place. Ones that exist purely for feel are noise. Ask: what does this communicate, to whom, and when?