Description
Campaign cards in both the campaign list and campaign comparison views are currently missing important accessibility support. This issue should harden the experience for keyboard users, assistive technology users, and everyone relying on screen readers by adding missing ARIA roles, improving keyboard focus order, and providing descriptive accessible names for non-text content such as icons, charts, and images.
Why
The current campaign UI uses visually rich cards and icons, but it does not expose enough semantic information for assistive technologies. That creates barriers for users who:
- navigate using keyboard only
- use screen readers
- rely on semantic structure rather than visual layout
The goal is to ensure campaign cards are perceivable, operable, and understandable in campaign list and comparison pages.
What needs to be done
1. Add ARIA roles and semantic structure
- Ensure the campaign card container and card grid use appropriate roles such as:
role="list" for the card container, if applicable
role="listitem" for each campaign card
- Add explicit grouping and headings as needed:
- use
aria-labelledby to associate card titles with their card container
- add
role="group" to campaign card sections if the card contains multiple grouped controls
- Ensure labels are present for card actions and status elements
2. Ensure card actions are keyboard-focusable
- Verify that every interactive element inside campaign cards is reachable via keyboard:
- filter controls
- action buttons
- card links
- chart interaction points if present
- Use actual focusable elements (
<button>, <a>, or focusable custom components) rather than clickable non-interactive wrappers
- Ensure keyboard tab order follows the visual order of controls and content inside each card
- Add visible focus outlines or focus styles if not already present
3. Add descriptive accessible names for charts/images/icons
- Provide
aria-label, aria-labelledby, or visually hidden text for:
- chart widgets used inside campaign cards
- icons representing status or actions
- decorative images only if they convey meaning
- For any inline chart or progress visualization:
- expose the numeric percentage text in the DOM, or
- add
aria-label="Campaign progress: 65% funded"
- For icon-only buttons:
- add
aria-label="View campaign details" or equivalent descriptive text
Implementation scope
Update the following areas at minimum:
- page.tsx
- campaign list card layout and action controls
- campaign-comparison.tsx
- comparison table/selected campaign cards and progress visuals
- any shared campaign card components or progress widgets used by these views
Also verify any chart or progress styling component used in these cards, such as progress.tsx, has accessible text or labels when rendered.
Acceptance criteria
- Campaign list pages pass basic
axe-core accessibility checks for:
- landmarks/roles
- interactive element focusability
- label relationships
- keyboard navigation
- Campaign cards in list views:
- use appropriate semantic roles or grouping
- expose accessible names for any non-text content
- contain only keyboard-focusable interactive elements for actions
- Campaign comparison view:
- exposes card and chart progress in an accessible form
- does not rely solely on visual color/shape to convey meaning
- supports keyboard navigation across comparable campaign entries
- No campaign card UI should produce:
- missing form labels
- unreachable interactive controls
- focus order that differs from visual order
- unlabelled icon buttons
- The fix should remain compatible with existing styling and layout
Suggested tasks
Notes
- This is a UI/accessibility fix, not a feature change.
- The focus is on campaign list and comparison views only, not the full app.
- If the card already uses a button or link wrapper, ensure it has an accessible name rather than relying on text hidden by CSS.
Feel free to paste this directly into GitHub as the issue body.
Description
Campaign cards in both the campaign list and campaign comparison views are currently missing important accessibility support. This issue should harden the experience for keyboard users, assistive technology users, and everyone relying on screen readers by adding missing ARIA roles, improving keyboard focus order, and providing descriptive accessible names for non-text content such as icons, charts, and images.
Why
The current campaign UI uses visually rich cards and icons, but it does not expose enough semantic information for assistive technologies. That creates barriers for users who:
The goal is to ensure campaign cards are perceivable, operable, and understandable in campaign list and comparison pages.
What needs to be done
1. Add ARIA roles and semantic structure
role="list"for the card container, if applicablerole="listitem"for each campaign cardaria-labelledbyto associate card titles with their card containerrole="group"to campaign card sections if the card contains multiple grouped controls2. Ensure card actions are keyboard-focusable
<button>,<a>, or focusable custom components) rather than clickable non-interactive wrappers3. Add descriptive accessible names for charts/images/icons
aria-label,aria-labelledby, or visually hidden text for:aria-label="Campaign progress: 65% funded"aria-label="View campaign details"or equivalent descriptive textImplementation scope
Update the following areas at minimum:
Also verify any chart or progress styling component used in these cards, such as progress.tsx, has accessible text or labels when rendered.
Acceptance criteria
axe-coreaccessibility checks for:Suggested tasks
role/aria-labelledby/aria-labelas neededaxe-coreon campaign list pages and resolve all basic violationsNotes
Feel free to paste this directly into GitHub as the issue body.