Contrast
AI-assisted accessibility auditing & remediation
Fixes the accessibility failures automated scanners can only shrug at — then re-tests every fix in a fresh browser before daring to call it fixed.
7
Pipeline phases
72
Test suite
0
Axe violations in its UI
3
Fix attempts before a human
01The problem
Scanners catch missing alt text but not useless alt text, and none of them write the fix. Human auditors spend their hours on the measurable half of the job instead of the judgment calls only they can make.
02The approach
Crawl the site — including pages behind a login — measure everything a machine can prove, ask a model only about what machines are bad at, write remediation grounded in WCAG, then inject each fix into a fresh page and re-scan it. A capacity multiplier for auditors, not a replacement.
03Architecture — the camera follows the data
How it works
> Puppeteer and axe are called directly — deterministic tools don't need an agent wrapper.
Step 1: Crawl
read-only, same-origin
Step 2: Scan
axe · a11y tree · keyboard
Step 3: Assess
the judgment calls
Step 4: Retrieve
RAG over WCAG + house rules
Step 5: Fix
HTML / ARIA / CSS
Where the work happens
Step 6: Verify
fresh browser re-scan
Where the work happens
↺ Loops back to step 05 when regressed · < 3 tries
04Perks — why it's built this way
The edge
Measured ≠ assessed
Findings a machine measured and findings a model judged are shown differently everywhere. The report states its own limits on the page, not in a footnote.
Every fix is verified
Injected into a fresh browser and re-scanned: resolved and no new violations. Up to three attempts, then it escalates to a human instead of guessing.
Sign-ins are an interruption
It detects a login wall mid-crawl, stops, and lets you sign in inside the panel. Credentials are never stored — only the session, encrypted with AES-256-GCM.
Audits itself
Zero axe violations across six views in both themes, and that is a build condition. Every feature is keyboard-operable.
An audit is a version
Runs stack like commits. The change line between runs is measured by fingerprint, so “fixed” means gone — not renumbered.
05Tech — and what each part does
The stack
- Node.js 22
- Runtime — no build step, no framework
- LangGraph
- Phase 7 orchestration, interrupt() for humans
- Puppeteer
- Robots-aware crawl, embedded browser
- axe-core + Lighthouse
- The measured findings
- Google Gemini API
- Judgment calls and remediation
- RAG over WCAG 2.2
- Grounds every proposed fix
- SQLite
- Graph checkpoints and run history
06Evidence
The proof



07Known limits — stated plainly
Where it doesn't win
- Automated testing catches roughly 30–40% of WCAG issues. Nothing it produces is a conformance claim.
- A fix that couldn't be verified is labelled a suggestion, never a fix.
- Source-available rather than open source: viewing is open, using it isn't.