← Use cases

For engineering leads

A spreadsheet of 8,000 violations is not a backlog. limena gives you deduplicated, component-level tickets with the file, the fix, and a check that stops the regression coming back.

Grouped by component8,940 violations · 12 tickets
3 fixes clear 96%
8,940
reported violations
before grouping
12
actual tickets
component level
3
fixes clear 96%
shared components
14s
CI check
runs on every PR
PaymentFields.tsxInputs use placeholders, not labels3 fields · WCAG 3.3.21,842S
ProductCard.tsxImage alt derived from filename1 component · 6,489 renders6,489S
Button.tsxFocus ring removed by reset1 component · 214 usages214S
QuantityStepper.tsxControls are div elementsneeds rebuild · WCAG 2.1.18M
CountdownBanner.tsxFocus trapped before cartcampaign component3M

Most accessibility tools create work for you, not with you.

The output arrives as a CSV, sized in thousands, with no indication of which items are the same problem or where in the codebase they live.

Counted, not grouped

Eight thousand rows where 6,489 are one card component rendered across the catalogue. The number tells you nothing about the size of the job.

No location

A CSS selector is not a file path. Someone has to reverse engineer which component produced the markup before any work can start.

It comes back

Nothing verifies the fix held. A dependency bump reverts it and the same barrier reappears in the next audit as a brand new finding.

01 · A ticket, not a row

Deduplicated to the component that causes it.

1,842 reported violations are usually one shared component rendered 614 times. limena groups them back to the source file so the work is sized honestly.

Each ticket carries the file, the line, a diff, and the criterion. It lands in Linear, Jira, or GitHub with your existing labels.

LIM-412Add labels to payment card fieldsP1
WCAG 3.3.2checkoutblockingeffort: S

src/checkout/PaymentFields.tsx · line 84

- <input placeholder="Card number" />
+ <label htmlFor="cc-num">Card number</label>
+ <input id="cc-num" />

One component, 3 fields, every order. Closing this ticket resolves 1,842 reported violations across the catalogue.

Open PRView 3 instancesSynced to Linear

02 · In the pipeline

Fails the build, not the retro.

limena runs on every pull request and reports as a check. New blocking barriers fail; existing ones do not, so you are never blocked by a backlog you inherited.

Already running axe-core? POST your results and keep your test setup, limena handles the deduplication, ownership, and evidence on top.

limena / accessibilityFailing#2841 · 14s
  • checkout · 4 pagespass
  • product · 12 templatespass
  • cart · 2 pagespass
  • campaign/holiday · focus trapnew

1 new blocking barrier introduced by this PR.
Pre-existing findings do not fail the build.

03 · It stays fixed

The work does not come back next quarter.

Every fix becomes a check. limena knows what was resolved and in which release, so a dependency bump that quietly removes focus styles is flagged as a regression rather than rediscovered a year later as a new finding.

That is the difference between paying for accessibility once and paying for it every audit cycle.

Open findings, 8 releases↓ 84%
v7.4

v7.4 reintroduced a fixed barrier. A dependency bump replaced the focus styles on the button component. Caught in CI, reverted the same day.

Accessibility work sized like engineering work.

  • Twelve tickets instead of eight thousand rows, each scoped to the component that causes the barrier.
  • File, line, diff, and criterion on every ticket, in the tracker your team already uses.
  • A CI check that fails new barriers and ignores the backlog you inherited.
  • Fixes verified at release, so the same work does not reappear at the next audit.

Point it at a branch.

We will show you the real ticket count behind the violation count, and what the first three fixes clear.