AK / PORTFOLIOWork
Case [04]2025

Bringing a certification platform to WCAG 2.1 AA without dropping performance.

A full-stack accessibility pass on CertyFast — React on the surface, .NET / C# and SQLite underneath — that lifted user retention 12% along the way.

Role
Software Engineer, MAQ Software
Stack
React.NET / C#SQLiteWCAG 2.1 AA
Timeline
2025
Status
Shipped
Ownership
Accessible full-stack workflows
Outcome
WCAG 2.1 AA with 12% higher retention

Context

CertyFast is an internal certification platform. It worked — for people who could see it, use a mouse, and follow visual cues. For everyone else, it didn't: unlabelled controls, focus lost inside modals, colour-only status. Compliance was overdue; real users were locked out of a tool their peers used daily.

Constraint

  • No performance regression for existing users.
  • No rewrite — modernisation was mid-flight.
  • The team had to maintain it after me — new patterns would only stick if they were the easier path in the codebase.

Move

  • Semantic-first React components. Buttons are buttons, headings are headings. Landmarks everywhere; ARIA only where semantic HTML couldn't reach.
  • Focus management as a first-class concern. Focus traps on modals, restore-on-close, visible rings, keyboard shortcuts documented on-page.
  • Backend cleaned up in the same pass. .NET / C# services rewired for predictable data shapes so the front end could trust them; SQLite persistence for offline-tolerant flows.
  • Real users, not just audits. Tested with a screen-reader user — two of the biggest fixes weren't on any audit report.
  • WCAG 2.1 AA contrast across the whole palette, no colour-only status, prefers-reduced-motion respected on every animation.

Result

  • Platform meets WCAG 2.1 AA / ADA across the workflows I owned.
  • Shipped alongside a 12% lift in user retention — larger than the a11y work alone explains; reliability improvements from the rewrite came free.
  • Team now reaches for the accessible primitives by default because they're the fastest path — not the disciplined one.

What I'd change

  • axe-core in CI from day one. Regressions are easier to prevent than to find.
  • Document the why, not just the what. Would have saved a few "why is this like this?" conversations later.
  • More automated keyboard-navigation tests — they're slow to write but catch a class of bugs nothing else does.

Command palette

Search and jump to any page.