Product

From accessibility findings to reviewed fixes.

We assess agreed journeys against WCAG 2.2 A and AA, repair scoped defects in your code and document the verification. The report identifies coverage, limitations and any additional procurement requirements.

What we check

All four WCAG principles, in real browsers and real screen readers.

Automated rules cover part of the assessment. Assistive-technology checks and human judgement cover questions that rules alone cannot resolve. The report records the method and scope of each result.

PrincipleExamples of what we testHow
PerceivableText alternatives, captions, contrast of text and controls, reflow at 400% zoom, content orderRules, rendered-colour analysis, screen-reader runs
OperableKeyboard access, focus order and visibility, skip links, target size, no keyboard traps, time limitsRecorded keyboard runs, rules
UnderstandablePage language, predictable navigation, form labels, error messages and suggestionsScreen-reader runs, human review of wording
RobustValid names, roles and values for custom components; status messages announcedAccessibility-tree inspection, NVDA, JAWS, VoiceOver

What you receive

Three deliverables, one source of truth.

Evidence report

One entry per success criterion: method, result, and the artefact behind it (a recording, a data table, a screenshot with annotations). Exceptions carry the reviewer's decision and reasoning.

Pull requests

Fixes arrive in your repository as small, reviewable pull requests with a description of the defect, the criterion, and the verification that passed after the change.

Conformance report (ACR)

A completed VPAT 2.5 in the edition your buyer needs (WCAG, 508, EU or INT), backed by the evidence rather than by self-assessment.

One fix, as it reaches your repository

Give the Add to bag button an accessible name

src/components/ProductCard.tsx+3 −2: 3 lines added, 2 lines removed

38 <p className="price">{formatPrice(product.price)}</p>39 <div className="card-actions">40Removed: <button className="add" onClick={() => addToBag(product)}>41Removed: <BagIcon />40Added: <button type="button" className="add" onClick={() => addToBag(product)}>41Added: <BagIcon aria-hidden="true" focusable="false" />42Added: <span className="visually-hidden">Add to bag, {product.name}</span>43 </button>44 </div>

Verified: NVDA reads "Add to bag, Linen apron, button". Recorded run attached to the report.

WCAG 4.1.2 Name, Role, Value. Sample data from our demo store; the full sample report shows the rest.

Sample

What a page looks like in the report.

Each page or screen gets its own tally. Flagged items are never hidden; they are the work your reviewer does.

Example

Account settings, billing tab

React app · desktop · 14 Oct 2026

39 checks37 verified2 flagged

  • All 23 form fields have programmatic labelsVerifiedLabel, name and description read back by two screen readersWCAG 1.3.1
  • Every control works with the keyboard aloneVerifiedRecorded run: tab, shift-tab, enter, space, arrowsWCAG 2.1.1
  • Focus order follows the visual orderVerifiedSequence logged for 48 stopsWCAG 2.4.3
  • Toggle outline is 2.1:1 against the panelFlaggedNeeds 3:1; colour change proposed, awaiting design sign-offWCAG 1.4.11

Methods: Automated rules, JAWS + Chrome, VoiceOver + Safari, keyboard-only run

Works with

Your stack, not a script tag.

  • Storefronts: Shopify themes and apps, WooCommerce, Magento, custom checkouts
  • Web apps: React, Next.js, Vue, Angular, server-rendered sites, design systems
  • Content sites: WordPress, Webflow, Drupal, documentation sites
  • Code hosting: GitHub, GitLab and Bitbucket pull requests; read-only access is enough to start
  • Mobile apps: iOS and Android screens tested with VoiceOver and TalkBack (design-partner stage)

See it on your own product.

Start with one agreed user journey at no cost through early 2027. We agree the defects, deliverables and your review effort before the pilot begins.