EXAMPLE / FICTIONAL — audit of a purpose-made demo app ("Örnek Yazılım — Randevu Paneli"), not a real product.
Accessibility audit summary: before vs after
axe-core 4.13.0 · tags wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22a, wcag22aa · Chromium 141.0.7390.37 · Playwright 1.56 · run 2026-10-06
Automated: axe-core violations by rule
Distinct failing elements per rule, all UI states combined (5 before, 6 after)| axe rule | WCAG | Before (1.0) | After (1.1) |
|---|
color-contrast | 1.4.3 | 12 | 0 |
|---|
label | 1.3.1, 4.1.2 | 4 | 0 |
|---|
button-name | 4.1.2 | 4 | 0 |
|---|
html-has-lang | 3.1.1 | 2 | 0 |
|---|
image-alt | 1.1.1 | 1 | 0 |
|---|
| Total distinct failing elements | | 23 | 0 |
|---|
Per UI state: violated rules / failing nodes, and rules needing review| State | Before | After | Needs review (before → after) |
|---|
| login | 2 / 4 | 0 / 0 | 1 → 0 |
|---|
| dashboard | 5 / 17 | 0 / 0 | 2 → 0 |
|---|
| dashboard-form-errors | 5 / 19 | 0 / 0 | 2 → 0 |
|---|
| dashboard-modal-open | 5 / 17 | 0 / 0 | 2 → 1 |
|---|
| dashboard-toast-visible | 5 / 17 | 0 / 0 | 2 → 1 |
|---|
| help (page added in 1.1) | — / — | 0 / 0 | — → 0 |
|---|
axe found 5 rule types. It did not flag the table without header cells, the keyboard trap, the inaccessible dialog, the silent notification, unassociated error messages, blocked paste, colour-only instructions or the 900 px fixed layout. Those came from the scripted checks and code inspection below.
Scripted keyboard and layout checks (Playwright)
Scripted checks, same script on both versions| Check | WCAG | Before (1.0) | After (1.1) |
|---|
| Skip link is first Tab stop and moves focus to main | 2.4.1 | no | yes |
|---|
| Keyboard trap during 70-press Tab traversal | 2.1.2 | trapped on textarea#f-note (57/70 presses) | none (20 stops, back to document) |
|---|
| Pointer-only controls (onclick, not focusable) | 2.1.1 | 6 | 0 |
|---|
| Focus stops without visible focus change | 2.4.7 | 12 of 12 | 0 of 20 |
|---|
| Dialog: focus moved in on open | 2.4.3 | no | yes |
|---|
| Dialog: Tab ×8 stays inside | 2.4.3 | no | yes |
|---|
| Dialog: Esc closes | 2.1.1 | no | yes |
|---|
| Dialog: focus returns to trigger | 2.4.3 | no | yes |
|---|
| Live regions present at page load | 4.1.3 | 0 | 1 |
|---|
| Notification disappears automatically after | 2.2.1 | 2.0 s | not within 15 s (stays until closed) |
|---|
| Error messages linked via aria-describedby | 3.3.1 | 0 of 2 | 2 of 2 |
|---|
| Unnamed buttons/links/fields (accessibility tree, dashboard) | 4.1.2 | 8 | 0 |
|---|
| Paste into password blocked | 3.3.8 | yes | no |
|---|
| Targets smaller than 24 × 24 px | 2.5.8 | 8 | 0 |
|---|
| Page width at 320 px viewport (login / dashboard / help) | 1.4.10 | 380 / 900 px / — | 320 / 320 / 320 px |
|---|
| Colour-only instructions found in text | 1.3.3 | 2 | 0 |
|---|
| In-app routes with two ways to reach the page (nav + page list) | 2.4.5 | no in-app page set (menu links point to #) | 2 of 2 |
|---|
| Chart series 'Tamamlanan' vs white | 1.4.11 | 1.81:1 | 1.81:1 (known issue) |
|---|
Resulting ACR conformance counts (WCAG 2.2 A + AA, 55 criteria)
Count of success criteria per conformance level| Conformance level | Before (1.0) | After (1.1) |
|---|
| Supports | 13 | 40 |
|---|
| Partially Supports | 1 | 1 |
|---|
| Does Not Support | 26 | 1 |
|---|
| Not Applicable | 15 | 13 |
|---|
| Not Evaluated | 0 | 0 |
|---|
What these checks cannot establish
- How screen readers actually announce names, the dialog or status messages (no NVDA/JAWS/VoiceOver testing).
- Whether text alternatives, labels, headings and error messages are meaningful; that was judged by a person reading the code.
- Behaviour in browsers other than Chromium, on mobile, with real browser zoom, forced colours, speech input or switch access.
- Usability for disabled people. No user testing was done.
Raw data: vpat-acr-audit-before.json, vpat-acr-audit-after.json. Prepared by Ali Karabüyük.