Code Remediation We find the issues, fix them in your theme code, and prove it

The Review, then the fixes. We fix the agreed issues in your theme or template code on a duplicate theme or staging site, never the live store. Then we hand you a verified before/after report for every issue ID. You see the results on staging before you pay the balance, and anything we fixed that stops working within 60 days is fixed again at no charge.

Not ready for fixes? An Accessibility Review on its own is $450 to $1,500, and the full fee is credited toward Review + Fix if you book within 30 days.

theme / Online Store 2.0Demo store, fictional
  • layout/
    • theme.liquid KC-001KC-004KC-019
  • sections/
    • header.liquid KC-010KC-019
    • slideshow.liquid KC-006KC-012
    • main-product.liquid KC-016
    • footer.liquid KC-019KC-020
  • snippets/
    • product-variant-picker.liquid KC-009KC-018
    • cart-drawer.liquid KC-015KC-022
    • card-product.liquid KC-008
    • facets.liquid KC-017
    • header-search.liquid KC-013
  • assets/
    • base.css KC-005KC-007
Where issues from our demo store’s mock review live in a typical Online Store 2.0 theme. Every issue we report names the file that causes it.

A fix is a change to code, not a script on top

This is the actual change for issue KC-009 on our demo store: three clickable <div>s became a native radio group. Keyboard, screen readers and the visual checked state all come from the markup, so nothing has to run on top of the page.

See all 30 fixes in the case study

product.html → snippets/product-variant-picker.liquidDemo store, fictional
 <div class="swatches">- <div class="swatch selected" data-color="Forest" style="background:#2f4a3a"></div>- <div class="swatch" data-color="Slate" style="background:#4a5563"></div>- <div class="swatch" data-color="Ember" style="background:#b4532a"></div>+ <input type="radio" class="swatch-input visually-hidden" name="color" id="color-forest" value="Forest" checked>+ <label for="color-forest" class="swatch" style="background:#2f4a3a"><span class="visually-hidden">Forest</span></label>+ <input type="radio" class="swatch-input visually-hidden" name="color" id="color-slate" value="Slate">+ <label for="color-slate" class="swatch" style="background:#4a5563"><span class="visually-hidden">Slate</span></label>
Verified: Tab reaches the group and Arrow Right selects Slate. The virtual screen reader reads “radio, Forest, checked, position 1, set size 3”.

A change log and a before/after report for every issue ID

In-house regression tooling: every template we touch is scanned before and after, at desktop and mobile widths, against WCAG 2.2 AA rules (axe-core engine), and the results are diffed and mapped to your audit IDs. Automated scanning is paired with manual keyboard, screen reader (VoiceOver, NVDA) and 400% zoom testing, because automated tools catch only part of WCAG.
CHANGELOG.mdDemo store, fictional

The change log: one row per issue ID

Kettlecrest Outfitters, 30 issues, KC-001 to KC-030, target WCAG 2.2 AA. Five of the seven critical items, each fixed and verified.

Change log excerpt: five critical issues, the WCAG criteria and what changed
IDWCAG 2.2 SCWhat changed
KC-0072.4.7Removed *:focus { outline: none }, added a two-tone focus ring
KC-0092.1.1, 4.1.2, 1.4.1, 1.4.11Swatch <div>s became a radio group with a legend
KC-0142.1.1, 2.4.3, 4.1.2, 3.3.2Popup became a labelled modal: focus moves in, Escape closes
KC-0182.1.1, 1.3.1, 4.1.2Size <div>s became a labelled radio group
KC-0222.1.1, 2.4.3, 4.1.2Cart drawer became a native <dialog>, focus returns on close
Full entry for KC-022, cart drawer is not a dialog
Files
Cart drawer markup on all pages, theme.css, theme.js [snippets/cart-drawer.liquid]
Change
Off-canvas <div> to a native modal <dialog aria-labelledby="cart-title">. Page behind is inert while open. Close and remove are named buttons. Escape closes, and focus returns to whatever opened it.
Verified
Scripted retest, keyboard task steps 8, 10 and 11, screen reader transcript steps 5 and 6.
How to check it
Add to cart, Tab around inside the drawer, press Escape.
axe scans: before / afterDemo store, fictional

Our before/after scans, mapped to issue IDs

axe-core 4.14.0, WCAG 2.2 A and AA rules plus best practices. 3 templates in 8 page states at 1280 and 390 px (16 scans).

Rules fixed
12
Still failing
0
Retest passes
30/30

Failing elements659before, now0

Failing elements by axe rule, across all 16 scans, before and after fixes
axe ruleSCBeforeAfter
regionBest practice2520
color-contrast1.4.32480
image-alt1.1.1480
link-name2.4.4, 4.1.2410
button-name4.1.2300
heading-orderBest practice80
html-has-lang3.1.160
label4.1.260
landmark-one-mainBest practice60
meta-viewport1.4.460
page-has-heading-oneBest practice60
select-name4.1.220

30 issue IDs. Axe flagged 13; the other 17 needed keyboard or screen reader testing. A scripted retest of each issue passes 30 of 30.

Why the manual half matters: WebAIM notes that automated tools cannot detect every WCAG failure, so a page with no detected errors is not necessarily accessible. Source: WebAIM Million 2026, February 2026.

Find, fix, verify, keep it fixed

Every project follows the same four steps, on a staging copy of your store. How a project runs in detail
  1. Find

    We scan your key templates at desktop and mobile widths with our in-house tooling, then test by hand: keyboard only, VoiceOver and NVDA, and 400% zoom. Every issue is mapped to the theme file that causes it.

  2. Fix

    We fix the agreed issues in your theme or template code on a duplicate theme or staging site. Your live store isn’t touched.

  3. Verify

    We re-run the same checks and hand you a before/after report for every issue ID. You review the fixes on staging before you pay the balance.

  4. Keep it fixed

    If anything we fixed stops working within 60 days, we fix it again. Fix Watch re-checks your templates every month after that.

How we test, tool by tool

Checkout and apps

Not everything on a store is theme code. Every issue we report says which side of the line it’s on.
  • We fix it

    Your theme

    Layouts, sections, snippets, assets and theme settings: menus, product pages, cart drawers, pop-ups you control, forms and color tokens.

  • Flagged with options

    Third-party apps

    Issues inside an app’s own code are flagged with options:

    • change a setting
    • swap the app
    • file a ticket with the developer, with the details they need
  • Shopify’s code

    Checkout

    Reported to Shopify on non-Plus plans. On Shopify Plus, custom checkout extensions can be in scope.

Checkout is Shopify-hosted on every plan. On non-Plus stores we report checkout issues to Shopify rather than fix them. On Shopify Plus, custom checkout extensions can be in scope.

WooCommerce cart and checkout templates are theme code, so they can be in scope. Sites built mainly with page builders such as Elementor or Divi are quoted individually.

Not included: Third-party app internals (we flag, reconfigure, swap or ticket the vendor), Shopify checkout on non-Plus plans (Shopify's code), content typed into the admin (unless you add the alt-text pack), PDFs and documents, video captions, and legal advice.

Review + Fix packages

Fixed prices. If you already have an audit from someone else, we start from it, at the same price.
  • Starter

    Price: $1,750

    Quick Review (3 templates) plus up to 5 fixes

    • Quick Review
    • Up to 5 fixes on staging
    • Verified before/after report
    • 60-day fix window

    Fixes delivered 5 business days after you approve the fix plan

    Book Starter, Review + Fix
  • Essentials

    Our recommendation for a typical small store

    Price: $4,250

    Essentials Review (6 templates) plus up to 15 fixes

    • Essentials Review
    • Up to 15 fixes on staging
    • Verified before/after report with keyboard and screen reader recordings of key tasks
    • 60-day fix window

    Fixes delivered 10 business days after you approve the fix plan

    Book Essentials, Review + Fix
  • Standard

    Price: $7,750

    Standard Review (12 templates) plus up to 30 fixes

    • Standard Review
    • Up to 30 fixes on staging
    • Verified before/after report with recordings
    • 60-day fix window

    Fixes delivered 15 business days after you approve the fix plan

    Book Standard, Review + Fix

Add-ons: 5 more fixes (added to a Review + Fix), $1,050; Alt-text pack: alt text written and entered for up to 100 product or collection images, $250.

Agencies: white-label at 20% below these prices (details). Auditors: you audit, we fix, your team retests, pay on pass (details).

How you can hold us to it

Without an independent auditor to retest our work, you need a way to hold us to it. Every Review + Fix comes with a verified before/after report you can check yourself, a payment you make only after you've seen the fixes on staging, and a 60-day window in which anything we fixed that stops working is fixed again at no charge.
  • A verified report

    For every issue ID: the file we changed, automated before/after results at desktop and mobile widths, and the manual keyboard and screen reader result.

  • Pay the balance after you’ve seen it

    The last payment is due only after you’ve checked the fixes on staging.

  • A 60-day fix window

    If anything we fixed stops working within 60 days, we fix it again at no charge.

  • A refund if a fix can’t pass

    If an agreed fix doesn’t pass its agreed check and we can’t fix it within 10 business days, we refund that fix’s share of the price.

The window doesn't cover a regression caused by a theme update, an app installed or updated, or code or content changed by someone else. In that case we show you what changed, at no charge, and quote the fix.

Each fix's 'agreed check' (the WCAG 2.2 success criterion and test method) is written in the fix plan you approve. This covers the agreed fixes only. It isn't a promise of legal compliance or of any legal outcome. Full terms

Questions store owners ask

What if a fix stops working later?

If anything we fixed stops passing its agreed check within 60 days of publishing, we fix it again at no charge. If a theme update, a new app or someone else’s edit caused it, we’ll show you what changed and quote the fix.

Fix Watch re-checks your templates every month after that.

Could this break my store?

We work only on a duplicate theme or a staging site, and your live store isn’t touched. Before handoff we check that add to cart, the cart, checkout entry, search and forms still work, and you review everything on staging before anything is published.

What about apps and Shopify checkout?

Issues inside third-party apps are flagged with options: change a setting, swap the app, or file a ticket with the app’s developer. We can’t edit code we don’t control, and we say so before you agree to anything.

Checkout is Shopify-hosted on every plan. On non-Plus stores we report checkout issues to Shopify rather than fix them. On Shopify Plus, custom checkout extensions can be in scope.

How does payment work?

Reviews are paid up front. Review + Fix is paid in parts: the Review fee first (or credited if you already bought the Review), half the balance when you approve the fix plan, and the rest after you’ve seen the fixes on staging. Fix Watch is billed monthly.

We already have an audit. Can you fix what it found?

Yes. We start from your audit instead of our Review, at the same package price. If your auditor will retest, ask them about our partner terms: they audit, we fix, they retest, and you pay only for agreed fixes that pass.

Do you use an overlay or accessibility widget?

No. We change your theme or template code. Overlays add a script on top and don’t fix the code that causes the problems.

Book Review + Fix

Fixed price, fixes on a duplicate theme or staging site, verified report, 60-day fix window.