Automated accessibility testing ensures the platform meets WCAG 2.1 AA standards. Tests cover keyboard navigation, screen reader compatibility, color contrast, and semantic HTML.
npm run test:a11y --workspace=apps/frontendnpm run test:wcag --workspace=apps/frontendnpm run test --workspace=apps/frontend- Level A - Basic accessibility
- Level AA - Enhanced accessibility (target)
- Level AAA - Advanced accessibility
- Color contrast ratios
- Heading hierarchy
- Form labels and inputs
- Image alt text
- Button accessibility
- Keyboard navigation
- Focus indicators
- Landmark structure
- Screen reader testing (NVDA, JAWS)
- Keyboard-only navigation
- Zoom and text scaling
- Motion and animation
- axe-core - Automated accessibility testing
- jest-axe - Jest integration for axe
- axe-playwright - Playwright integration for axe
- Playwright - E2E testing with accessibility checks
Accessibility tests run on every PR and push to main/develop branches. Reports are uploaded as artifacts and commented on PRs.
- Semantic HTML - Use proper heading levels, landmarks, and form elements
- Labels - Always associate labels with form inputs
- Alt Text - Provide meaningful alt text for images
- Color - Don't rely on color alone to convey information
- Focus - Ensure visible focus indicators on interactive elements
- Keyboard - All functionality must be keyboard accessible
- Testing - Test with real assistive technologies
// ❌ Bad
<img src="course.jpg" />
// ✅ Good
<img src="course.jpg" alt="Blockchain Basics course thumbnail" />// ❌ Bad
<input type="email" placeholder="Email" />
// ✅ Good
<label htmlFor="email">Email</label>
<input id="email" type="email" />// ❌ Bad - insufficient contrast
<p style={{ color: '#999', backgroundColor: '#f0f0f0' }}>Text</p>
// ✅ Good - meets AA standard
<p style={{ color: '#333', backgroundColor: '#f0f0f0' }}>Text</p>