Skip to content

accessibility: add ARIA labels, table semantics, and skip navigation links#9

Closed
bokiko wants to merge 2 commits intomainfrom
auto/improve-2026-03-20
Closed

accessibility: add ARIA labels, table semantics, and skip navigation links#9
bokiko wants to merge 2 commits intomainfrom
auto/improve-2026-03-20

Conversation

@bokiko
Copy link
Owner

@bokiko bokiko commented Mar 20, 2026

Summary

Comprehensive accessibility (a11y) pass covering the dashboard, navbar, and secondary pages. No new dependencies, no feature regressions, build and lint pass clean.

What changed and why

Dashboard (web/src/app/dashboard/page.tsx)

  • Added skip-to-content link and id="main-content" anchor target — keyboard users can bypass the sticky nav
  • Wrapped stats card grid in role="region" aria-label — screen readers announce the section before reading numbers
  • Added aria-label to each stat card with a complete readable description (e.g. "Average ping: 45 milliseconds — Good")
  • Marked all decorative icons aria-hidden="true" — removes noise for screen reader users
  • Added role="img" aria-label to chart containers — charts are otherwise completely invisible to assistive tech
  • Added aria-label to the <table> element including result count
  • Added scope="col" to all <th> elements — required for correct table semantics per WCAG 1.3.1
  • Wrapped timestamps in <time dateTime={...}> — machine-readable date for assistive tech and parsers
  • Added aria-label to ping and packet-loss cells — color alone cannot convey quality level (WCAG 1.4.1)

Navbar (web/src/components/Navbar.tsx)

  • Added aria-label="Main navigation" to <nav> — named landmark required for screen reader nav
  • Added aria-haspopup="true" to mobile menu toggle
  • Added role="menu" aria-label to the mobile menu container

Community + Download pages

  • Added skip-to-content link and id="main-content" to both pages — they were missing entirely

Lines

+64 / -30

…links

Comprehensive accessibility pass covering the dashboard, navbar, and
secondary pages. Zero new dependencies, no feature regressions.

Changes by file:

web/src/app/dashboard/page.tsx
- Add <a href="#main-content"> skip link (keyboard users can bypass nav)
- Add id="main-content" to <main> anchor target
- Wrap stats card grid in role="region" aria-label for screen readers
- Add aria-label to each stat card with full readable description
- Mark decorative icons with aria-hidden="true"
- Add role="img" + aria-label to both chart containers describing data
- Add aria-label to <table> with visible result count
- Add scope="col" to all <th> elements (required for table semantics)
- Wrap result timestamps in <time dateTime={...}> for machine readability
- Add aria-label to ping and packet-loss <td> cells (color is not the
  only indicator of quality — text label now read aloud by screen readers)

web/src/components/Navbar.tsx
- Add aria-label="Main navigation" to <nav> (landmark is now named)
- Add aria-haspopup="true" to mobile menu toggle button
- Add role="menu" + aria-label to mobile menu container
- Improve mobile toggle aria-label wording to be more descriptive

web/src/app/community/page.tsx
web/src/app/download/page.tsx
- Add skip-to-content link and id="main-content" (these pages were
  missing both, making keyboard-only navigation significantly harder)
@chatgpt-codex-connector
Copy link

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@bokiko bokiko closed this in 8054623 Mar 20, 2026
@bokiko bokiko deleted the auto/improve-2026-03-20 branch March 21, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant