Contrastic home

Find accessibility problems while you type. Not months later in an audit.

Contrastic is a WCAG 2.2 linter. It checks your code in the editor and in the pull request. Each finding names the success criterion it fails and suggests a fix. A pull request with a blocking finding cannot merge.

The intro video (1 minute, spoken in Dutch, with Dutch captions and English subtitles). Video transcript.

The problem: teams test too late

1 in 6 people has a significant disability. For them, a website works only when it is accessible. Since June 2025 the European Accessibility Act asks for it too.

The later you find a bug, the more it costs

  1. UI/UX
    Cost of a bug: 1 of 5
  2. Code / IDE
    Dev server
    Cost of a bug: 1 of 5. Contrastic finds the bug here.
  3. Pull request
    Cost of a bug: 1 of 5. Contrastic finds the bug here.
  4. UAT deployment
    Cost of a bug: 2 of 5
  5. Staging
    Production
    Cost of a bug: 4 of 5
  6. Audit
    Cost of a bug: 5 of 5. Today, teams find the bug here.

The euro signs show the cost of a bug at each step, as an indication. They are not a measurement.

Shift left: Contrastic in five places

The arrows point left: we move the work to the start, where it is fastest and cheapest.

  1. DesignComponent library
    Speed: once
  2. EditorWhile you type
    Speed: milliseconds
  3. Pre-commit hookChanged files only
    Speed: seconds
  4. Pull requestBlocks the merge
    Speed: minutes
  5. Live auditingNightly or after each deployment · planned
    Speed: whatever

Static first

When the source code can decide, a static rule decides. It reads JSX and TSX with oxc and runs in milliseconds.

The browser as a safety net

When the source cannot decide, the rule says cantTell and does not guess. The browser scan checks focus order, keyboard traps and content that changes, with axe-core and our own rules.

How it works

  1. Static analysis

    Rules on the syntax tree of your components.

  2. Browser scan

    Headless Chrome opens the rendered pages.

  3. Merge

    One finding per problem, not one per tool.

  4. Report

    Console, SARIF for the pull request, and an HTML report per WCAG principle.

error[jsx-a11y/alt-text]: Missing `alt` attribute.
  --> src/ProductCard.tsx:12:5
   = WCAG 1.1.1 Non-text Content (Level A)
   = help: Add an `alt` attribute with meaningful
     text, or alt="" for a decorative image.
A finding names the rule, the place, the criterion and the fix. A person or an AI agent can act on it at once.
  • FastIn the loop, not after the release.
  • PreciseRule, place, criterion and fix.
  • HonestcantTell when the rule does not know: the browser decides.

Three layers: the rule does not know the standard

  1. Rule

    Gives passed, failed or cantTell, with no WCAG ids in the code.

  2. Mapping

    Data that ties each rule to one WCAG 2.2 success criterion.

  3. Policy

    Decides what blocks. By default: level A and AA findings from a sure source. AI findings never block.

When WCAG 3.0 arrives, Contrastic gets a new mapping. The rules stay the same.

Results

167 rules

Each rule has a mapping to WCAG, tests and a snapshot.

Fast enough for every pull request

Goal: less than 10% false positives

False-positive rate per test set
Demo webshop
2.2%
W3C ACT test cases
2.9%
The line marks the goal of 10%. We measure against a ground truth: a list of the expected findings, written before the first measurement. The same team wrote the rules and the demo, so this is not a measurement on a real project.

WCAG 2.2 coverage

Success criteria with at least one rule that can fail them.

WCAG 2.2 coverage per level
LevelCriteria checkedPercentage
A31 of 31
100%
AA22 of 24
91%
A and AA53 of 55
96%
AAA28 of 31
90%

An automated check covers only part of a criterion. So 100% does not prove that a site conforms to WCAG. A person still tests what a tool cannot decide.

Who makes Contrastic

Contrastic is a hackathon project of the/experts, made in 2026 by Tobias, Andrea, Lennard and JP. AI agents wrote the code under strict quality gates; the team steered and checked it.

Do you want to know more, or use Contrastic in your project? Contact the/experts.