Differentiator 01
We run real screen readers. Not simulations. Not rule checkers.
The actual assistive technology your users depend on, driven against every component in your Storybook — and the regression your scanner can't see, spoken out loud.
The spoken experience, diffed.
A dropped label is not a style change. It is the difference between a usable control and a dead end — and it only shows up in what the component announces.
transcript diff · Select.stories.jsx
NVDA 2025.1 · Windows 11approved baseline
- button, "Filter results", collapsed
- listbox, "Filter results", 6 items
- option, "Newest first", 1 of 6, selected
this commit
- button, collapsed
- listbox, 6 items
- option, "Newest first", 1 of 6, selected
the cause
- <button aria-expanded="false" aria-label="Filter results">+ <button aria-expanded="false">
The spoken experience changed: the trigger no longer announces what it filters. Blocked in review until a human approves the new baseline.
Methodology
How the automation layer works.
Real assistive technology, provisioned per run
On every change we build your Storybook and drive it with real NVDA on real Windows machines and real VoiceOver on real Macs. A fast Linux-based semantic tier covers every commit in minutes; the real-AT tiers are ground truth.
Capture at the speech-synthesizer layer
We record the exact text the screen reader sends to be spoken. No audio recording, no transcription guesswork, no approximation.
A deterministic two-pass walk plan
Every story gets a full read-through, then an interaction pass — focusing, activating, toggling, arrowing — the way a screen-reader user actually operates a component.
Normalization, so diffs are never flaky
Volatile IDs, timestamps, and synthesizer chatter are stripped. A baseline only changes when the spoken experience changes.
Review and approve, with an immutable record
Side-by-side transcript diff, the component's screenshot, and the HTML diff that caused it — the effect and the cause on one screen. Who approved what, and when, is recorded.
Change detection keeps it fast and affordable
Every component build is fingerprinted. Unchanged stories are skipped and free, so testing stays fast at hundreds of components.
Where the category stops, and we start.
- Scanners
- Rule checkers inspect the DOM. We check the conversation between your product and a blind user. Both matter — we do both — but only one of them catches a select box that silently stopped announcing its options.
- Overlays
- Snippet-based widgets promise compliance at runtime. We never touch your product at runtime — we fix the source, with evidence.
- Visual regression testing
- Visual testing changed how teams ship UI. Coverli is that, for the experience you can't see.