Audit and fix landmark and heading semantics across pages
Description
Pages such as src/app/stats/page.tsx, src/app/admin/page.tsx, and src/app/events/page.tsx place their content directly under <main id="main-content"> with a single <h1> and no intermediate <section>/<h2> structure, while the result/status regions are sometimes plain <p> or <section> without accessible names. This issue audits and tightens landmark and heading semantics so the page outline is navigable.
Requirements and context
- Repository scope: StableRoute-Org/Stableroute-frontend only.
- Ensure each page has exactly one
<h1> and that grouped regions (e.g. the stats tiles, the admin status panel, the events list) are wrapped in <section> with an accessible name (aria-labelledby or aria-label).
- Verify the single
<main id="main-content"> landmark per page and that the skip link from src/app/layout.tsx lands on it.
- Do not change data fetching, validation, or
role="alert" regions; this is a semantics-only pass.
- Keep the existing visual layout unchanged.
Suggested execution
- Fork the repo and create a branch
git checkout -b a11y/semantics-40-landmarks-headings
- Implement changes
- Write code in: the affected pages under
src/app (at minimum stats, admin, events).
- Write comprehensive tests in: add/extend page tests asserting one
<h1>, named sections, and the main landmark.
- Add documentation: note the semantics conventions in
README.md.
- Add JSDoc where helpful.
- Validate exactly one
<h1> and one main landmark per page.
- Test and commit
Test and commit
- Run
npm run lint, npm test, and npm run build.
- Cover edge cases: single h1 per page, named sections, main landmark, and skip-link target.
- Include the full
npm test output and a11y notes in the PR description.
Example commit message
a11y: tighten landmark and heading semantics across dashboard pages
Guidelines
- Minimum 95 percent test coverage for impacted modules.
- Clear, reviewer-focused documentation.
- Timeframe: 96 hours.
Community & contribution rewards
- 💬 Join the StableRoute community on Discord for questions, reviews, and faster merges: https://discord.gg/37aCpusvx
- ⭐ This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project — if this issue and the maintainers helped you ship, we'd be grateful for a 5-star rating. Clear questions in Discord and tidy, well-tested PRs are the fastest path to a merge and a reward.
Audit and fix landmark and heading semantics across pages
Description
Pages such as
src/app/stats/page.tsx,src/app/admin/page.tsx, andsrc/app/events/page.tsxplace their content directly under<main id="main-content">with a single<h1>and no intermediate<section>/<h2>structure, while the result/status regions are sometimes plain<p>or<section>without accessible names. This issue audits and tightens landmark and heading semantics so the page outline is navigable.Requirements and context
<h1>and that grouped regions (e.g. the stats tiles, the admin status panel, the events list) are wrapped in<section>with an accessible name (aria-labelledbyoraria-label).<main id="main-content">landmark per page and that the skip link fromsrc/app/layout.tsxlands on it.role="alert"regions; this is a semantics-only pass.Suggested execution
git checkout -b a11y/semantics-40-landmarks-headingssrc/app(at minimum stats, admin, events).<h1>, named sections, and themainlandmark.README.md.<h1>and onemainlandmark per page.Test and commit
npm run lint,npm test, andnpm run build.npm testoutput and a11y notes in the PR description.Example commit message
a11y: tighten landmark and heading semantics across dashboard pagesGuidelines
Community & contribution rewards