Skip to content

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.

  1. Step 1: Crawl

    read-only, same-origin

  2. Step 2: Scan

    axe · a11y tree · keyboard

  3. Step 3: Assess

    the judgment calls

  4. Step 4: Retrieve

    RAG over WCAG + house rules

  5. Step 5: Fix

    HTML / ARIA / CSS

    Where the work happens

  6. 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

Contrast audit overview: a run listing 75 findings across 3 pages, with a severity breakdown of 36 critical, 12 serious and 27 moderate, and a banner stating that automated testing detects roughly 30-40% of WCAG issues.
Screenshot — Run overview — measured findings separated from model judgments
Contrast findings view, listing individual accessibility violations with their severity and location.
Findings, filterable by certainty and severity
Contrast remediation composer in its light theme, showing a proposed code fix for an accessibility issue.
Remediation composer, light theme

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.