pa11y:NotRun yeton configuredfull page URLs in staging environment
2.2 Manual Testing
Code review of all page components in src/drop-app/src/app/
No keyboard-Keyboard-only navigation testingon performedall yetcritical user flows
No screenScreen reader testing performed(see yetmatrix in Section 6)
NoZoom test: 200% browser zoom testing— performedno yetloss of content or functionality
Reflow test: 320px viewport width
2.3 User Testing
{{Yes — included users with disabilities in user testing | No — planned for Phasefuture}}: 2 before production launch.{{Notes}}
Action: Run automated accessibility tools before v1.0 release. This document reflects code-review findings only.
3. Perceivable
1.1 Text Alternatives
Criterion
Status
Notes
Issue Ref
1.1.1 Non-text Content (A)
Partial{{Pass}}
CustomAll drop-icons<img> have alt; decorative images use currentColoralt="" but lack aria-label / aria-hidden in several places. Lucide icons lack labels in some interactive contexts.
A11Y-001
Checklist:
All <img> elements have descriptive alt text or alt=""
Icon-onlyIcon buttons have aria-label — NOT fully implemented (e.g., notification bell, logout button)
Complex images (charts, diagrams) —have N/Along in current versiondescriptions
CAPTCHAs —have N/Aaudio alternative
SVG icons: lucidemeaningful icons→ arerole="img" inlinearia-label="...", SVG;decorative → aria-hiddenhidden="true" not consistently set
Issues:
A11Y-001 (High):TODO:DashboardRun notification bellaxe and logoutlist buttonsall use icon-only UI without aria-label. Screen reader users cannot identify these controls.
violations.
1.2 Time-based Media
Criterion
Status
Notes
Issue Ref
1.2.1 Audio-only / Video-only (A)
{{Pass/Fail/N/AA}}
No audio or video content in app
1.2.2 Captions (A)
{{Pass/Fail/N/AA}}
No video content
1.2.3 Audio Description (A)
{{Pass/Fail/N/AA}}
No video content
1.2.4 Captions Live (AA)
{{Pass/Fail/N/AA}}
No live media
1.2.5 Audio Description Prerecorded (AA)
{{Pass/Fail/N/AA}}
No video content
TODO: Audit all video/audio content on the platform.
1.3 Adaptable
Criterion
Status
Notes
Issue Ref
1.3.1 Info and Relationships (A)
Partial{{Pass/Fail}}
Shadcn/uiSemantic componentsHTML usefor semantictables, HTML.lists, Transaction amounts use color only (red/green) without non-color indicator.headings
A11Y-002
1.3.2 Meaningful Sequence (A)
Pass{{Pass/Fail}}
DOM order matches visual order for all pages
1.3.3 Sensory Characteristics (A)
Pass{{Pass/Fail}}
No "click the red button" instructions
1.3.4 Orientation (AA)
Pass{{Pass/Fail}}
No locked orientation
1.3.5 Identify Input Purpose (AA)
Partial{{Pass/Fail}}
Login/register inputs should use autocompleteattributeson (email,all given-name,personal etc.)data fields
A11Y-003
Issues:Checklist:
A11Y-002(Medium): Transaction amountsTables use color<th> with scope attributes
A11Y-004 (Medium): BottomNav active tab indicator uses color only. Needs additional indicator (bold, underline, or icon change).
A11Y-005 (High): Muted text color #9CA3AF on white (#FFFFFF) = ~2.9:1 contrast ratio — fails WCAG AA 4.5:1. Used for timestamps, hints, inactive nav labels.
A11Y-006 (Medium): Input border color #E5E7EB on background #F9FAFB may not meet 3:1 for non-text contrast.
4. Operable
2.1 Keyboard Accessible
Criterion
Status
Notes
Issue Ref
2.1.1 Keyboard (A)
Unknown{{Pass/Fail}}
NotAll testedfunctionality — shadcn/ui uses Radix (keyboard accessible), but custom components need verificationkeyboard-operable
2.1.2 No Keyboard Trap (A)
Partial{{Pass/Fail}}
CookieConsentFocus modalcan usesalways Dialogbe (Radix)moved — focus trap should work. Custom scan state machine may trap focus.away
A11Y-007
2.1.4 Character Key Shortcuts (A)
Pass{{Pass/Fail}}
No single-Single-key shortcuts implementedcan be disabled
Checklist:
All interactive elements reachable by Tab key — not verified
BottomNavAll itemsactions keyboard-accessibletriggerable —by not verifiedEnter/Space
Multi-stepCustom formswidgets (register,follow send)ARIA keyboard-operableAuthoring —Practices not verified
Issues:
A11Y-007 (High): Multi-step flows (/register, /send, /scan) use state machines that may not be keyboard-accessible. Screen transitions between steps need verification.patterns
2.2 Enough Time
Criterion
Status
Notes
2.2.1 Timing Adjustable (A)
Pass{{Pass/Fail}}
NoSession automatictimeout sessionwarns timeoutswith inoption currentto version (auth is httpOnly cookie, 7-day lifetime)extend
2.2.2 Pause, Stop, Hide (A)
Pass{{Pass/Fail}}
No auto-Auto-updating content inhas currentpause versioncontrol
2.3 Seizures and Physical Reactions
Criterion
Status
Notes
2.3.1 Three Flashes (A)
Pass{{Pass/Fail}}
No content flashes >3 times/sec. animate-pulse on scan page is slow (not flashing).sec
2.4 Navigable
Criterion
Status
Notes
2.4.1 Bypass Blocks (A)
Fail{{Pass/Fail}}
No skip-Skip-to-content link implemented
2.4.2 Page Titled (A)
Partial{{Pass/Fail}}
RootUnique layoutdescriptive haspage "Drop" title. Individual pages do not set unique <title> tags.titles
2.4.3 Focus Order (A)
Unknown{{Pass/Fail}}
NotFocus testedorder matches reading order
2.4.4 Link Purpose (A)
Partial{{Pass/Fail}}
NavigationLink linkstext aredescriptive labeled.in Some icon-only buttons lack context.context
2.4.6 Headings and Labels (AA)
Partial{{Pass/Fail}}
HeadingDescriptive hierarchyheading notand consistentlylabel used across pagestext
2.4.7 Focus Visible (AA)
Partial{{Pass/Fail}}
shadcn/uiFocus inputs have focus:border-[#0B6E35] focus:ring-1. Custom buttons may lackindicator visible focuson ring.all elements
Issues:
A11Y-008 (Medium): No skip-to-content link. Keyboard users must Tab through BottomNav on every page.