UX + AI practice

Built with AI.
Owned by a designer.

I use AI in my design work, from accessibility fixes to the tools I build for myself. These six projects cover the decisions, results and issues I found along the way.

Read the six cases Feb – Aug 2026 · Written from dated working notes
22 → 10Audit scope rebuilt from the source report, not a generated list
77%Context load cut by scoping what each agent may load
26 releasesOf upstream fixes recovered from a fork that had silently drifted
6 / 6Components reviewed; all six had defects

How I work with it

Where AI helps.
Where I step in.

AI helps me explore and implement quickly. I stay responsible for the design decisions: what a control means, whether a pattern fits and whether the result works.

01

Ambiguity goes to a person

Every intent pack carries one hard rule: when the right answer is unclear, the agent flags it and stops. It never resolves the ambiguity itself. A confidently wrong accessible name passes the linter; a missing one at least shows up as a finding.

02

Give each agent a clear scope

I specify which tasks each agent handles and which it passes to another tool or a person. That makes its output easier to review.

03

Verify before you claim

Four generated fixes were killed before review — all four wrong in the direction of more work. One automated scan I believed had reached the authenticated interior had been photographing the login screen. I caught it because the screenshots were 80KB instead of 400KB.

The work

Six cases.
What I built and learned.

Each case explains the problem, my decisions and the result.

/01

Accessibility · People’s Choice, North America hackathon

The code was never the bottleneck.

An auditor says a criterion partially fails. That is accurate and one step short of actionable. I built the design half of the loop that closes that step — plain-language intent, an agent that drafts attribute-only patches, engineering reviewing normally.

41violations cleared across 14 files in about ten minutes6.06:1measured contrast, read from the compiled stylesheet
Read the case
/02

Design systems · Generation quality

Rules a generator will actually obey.

Free generation produced output that looked right and wasn’t — a correct type class with an inline override on the same element, a table token borrowed for navigation, a font size that doesn’t exist in the system. The fix was moving the rules onto the surface the generator reads.

52 / 52shared paths brought to byte-identity with a named commitA/Bsame prompt, same screenshot, contract vs no contract
Read the case
/03

Quality · Review method

A component can pass five gates and fail the sixth.

Six components arrived for a final pass, four already signed off. I found defects in all six. Structural correctness says nothing about token correctness, and token correctness says nothing about contrast — so I stopped letting a pass on one imply a pass on another.

515override tests passed while the focus ring geometry was still wrong1.89:1a completed checkmark against a 3:1 requirement
Read the case
/04

Agent architecture

Agents that refuse work.

I restructured more than thirty workflows so agents load current references only when needed, stay within their scope and hand off tasks they cannot answer.

77%reduction in context load after the restructure623 → 124lines in the worst offending file
Read the case
/05

Supply chain · Tooling security

The plugin I had hardened was never the one running.

I discovered that the application was loading a different version of the plugin I had reviewed. The readme promised no data left the machine; the live manifest had been permitting an external relay the whole time.

26releases of upstream fixes recovered in one run105 → 109commands available after the sync
Read the case
/06

Knowledge architecture

Four hundred notes, and one that was actually misfiled.

I built a plain-markdown workspace for working notes and reusable methods. When its graph reported dozens of disconnected notes, checking the links revealed a bug in the graph itself.

476notes across fourteen areas, each carrying its own confidence69 → 1reported orphans that turned out to be a resolver bug
Read the case

Work in progress

What isn’t in production.

The accessibility loop has a first batch in the repository and a second product group running the approach. Nothing from it is in production, and I say that in every update. The generation contract has a measured residual I haven’t closed: small text still leaks fourteen bare pixel values in one tier. Both of those belong on the page as much as the wins do.