Trust > completeness.
A smaller, defensible finding beats a longer, speculative one. If we can’t ground it in structural or visual evidence, we don’t ship it.
How a single, brittle “paste-and-wait” scan became a multi-track, role-aware system that converges on one trustworthy results experience.
UX Audit Scanner runs accessibility, IA, content, and interaction audits on real websites and SaaS apps. The hard problem isn’t the scan engine, it’s the human flow wrapped around a slow, expensive, asynchronous process whose output looks intimidating by default.
Users are a mix: in-house UX leads triaging a release, accessibility owners working to a compliance deadline, agencies pitching a redesign, and public-sector teams under ADA Title II. Each one needs a different framing, but only one results experience is sustainable to build.
The earliest product was a single linear path: paste a URL, watch a spinner for a minute or two, then receive a long, undifferentiated wall of findings. It technically worked. It didn’t convert.
These weren’t five different problems. They were one problem: the flow assumed a single archetype of user with infinite patience and full context. Real users had none of that.
The first move was to split intent up front. One launcher became three deliberate tracks, public, authenticated (Atrium), and interaction-heavy (Kinesis), each with its own pre-flight, but every track converging on the same results shell so users only had to learn one mental model.
At the same time I shipped a unified progress system: queue position, current step, and an honest ETA replaced the spinner. The wait didn’t get shorter; it stopped feeling broken.
Splitting the launcher exposed a deeper assumption: the v0 flow treated every site as if it lived in one legal and product context. It didn’t.
Net effect: by the time the scan starts, the system already knows enough to give results that read as for you, not as a generic dump.
The wall of findings was the next bottleneck. I rebuilt the results surface around a strict, four-tab architecture and a single card pattern that scales from skim to deep-dive without changing skin.
A report is a one-shot artefact. A loop is a product. Atelier turned each finding into a closeable item: ask for a fix, verify it on the live page, re-score the audit, all without consuming user credits on the automated re-run.
The behavioural change was real: people stopped treating the audit as a deliverable they exported and forgot, and started treating it as a backlog they worked through.
Zooming out, the user-flow story is the shape of the system itself: four ways in, one orchestrator that handles jurisdiction, queue, and progress, one results shell, and several downstream actions, export, AI solutions, monitoring for regressions, and a Title II workspace for public-sector teams.
Honesty about what I’d cut is part of the same design rule that runs through every other iteration: the product’s job is to deserve the user’s trust, not to demand it.
Ranges below are illustrative — directional estimates derived from session replays, support-ticket review, and pre/post comparisons on the same accounts. They are not controlled measurements.
Behind the numbers, the bigger shift was qualitative: users started using the product as a workspace, not as a one-off scanner.
A smaller, defensible finding beats a longer, speculative one. If we can’t ground it in structural or visual evidence, we don’t ship it.
If the system has nothing to show, it says so. A fake render is worse than none.
Two-state cards, collapsed-by-default sections, and a single canonical detail surface mean the UI is never both shallow and overwhelming.
Four entry points, one shell. Learn it once, use it everywhere.
If a card says “low contrast in the hero,” the screenshot must show the hero and the contrast, not a generic page thumbnail.
Founder & Designer · UX Audit Scanner
Stack: React, Tailwind, Supabase, Playwright, AI Gateway (Gemini / GPT-5).