SaaS product accessibility
ADA, with finding concentration inside the logged-in product.
SaaS accessibility leads ship the audit-grade artifact from a different surface than ecommerce does: the in-product forms, the auth flows, the dashboard widgets, and the billing-checkout screens a paying tenant interacts with after the marketing page is closed. The remediation posture is the same — WCAG 2.2 + EN 301 549, the pull request as the audit-grade artifact — but the finding concentration sits where the ADA demand letter now reads.
Why this vertical, this quarter
Three pressure points shape the run.
SaaS product accessibility reads differently from the marketing-page posture. The run concentrates inside the authenticated product, where every paying tenant interacts with a form, an auth flow, a dashboard widget, or a billing-checkout screen — and the ADA demand-letter factory has noticed.
- ADA demand letters — in-product scope
SaaS plaintiffs now target the logged-in surface, not just marketing. Findings concentrate in the authenticated app where the paying tenant actually lives — the in-product forms, the auth flows, the dashboard widgets, the billing-checkout screens.
- Settlement band — per tenant
Per-tenant settlement ranges cluster between roughly $5K and $90K, with volume discounts when the demand-letter factory targets a category. The defense is the audit-grade pull request — a redacted diff, an axe-core diagnostic, a WCAG 2.2 SC, an EN 301 549 clause.
- Auth + billing-checkout finding concentration
Two surfaces carry the densest finding concentration: the auth flow (focus ring and status messages), and the billing-checkout screen (aria-live on the credit-card error path and form labels on the address line). The locator bar lives inside the product, not on the marketing page.
A worked redacted PR
One finding, one redacted pull request, end to end.
Below is a redacted PR diff for a destructive Delete workspace button inside a logged-in settings panel — a focus-ring override that fails keyboard navigation when a screen-reader user reaches the most destructive action in the product. Identifiers are redacted; the rule spans both auth and settings-panel surfaces.
axe-core finding
serious
- Rule
focus-visible-semantics- Impacted surface
- Settings panel — destructive Delete workspace toggle
- Surface type
- Logged-in dashboard widget / in-app form
- Description
- Custom CSS sets
outline: noneon the destructive toggle's focus state, removing the only keyboard focus indicator a screen-reader virtual cursor can read. The native ring is suppressed without a replacement :focus-visible style, so the most destructive action in the workspace settings has no visible focus signal beyond color.
before
/* app/(dashboard)/app/settings/delete-workspace.tsx */
button.btn-danger {
background: var(--danger-600);
color: var(--on-danger);
border-radius: 6px;
padding: 0.625rem 1rem;
}
button.btn-danger:focus,
button.btn-danger:focus-visible {
outline: none;
box-shadow: none;
}after
/* app/(dashboard)/app/settings/delete-workspace.tsx */
button.btn-danger {
background: var(--danger-600);
color: var(--on-danger);
border-radius: 6px;
padding: 0.625rem 1rem;
}
button.btn-danger:focus {
outline: none;
}
button.btn-danger:focus-visible {
outline: 2px solid var(--focus-ring-on-danger);
outline-offset: 2px;
box-shadow:
0 0 0 4px var(--focus-ring-on-danger-soft);
}
/* Keep the ring on the destructive toggle only while the
screen-reader virtual cursor owns it. */
button.btn-danger:focus-visible:not(:focus-within) {
outline-offset: 4px;
}- WCAG2.4.7(level AA)
- EN 301 5499.2.4.7
- axe-corefocus-visible-semantics
Run a Sigil pilot
Stop filing ADA exceptions. File a pull request.
The free WCAG scan is one URL. The pilot files the same redacted PR against your own repository on every deploy — the audit-grade artifact your counsel, your product team, and your accessibility lead all read from the same source across the in-product forms, auth flows, dashboard widgets, and billing-checkout the run concentrates on.