Skip to content

🎨 UX/UI & Accessibility Review Report

This report was generated using the combined heuristics and guidelines from the following activated skills:

  • ux-audit (Nielsen's heuristics & Mobile UX)
  • ui-visual-validator (Responsive & Z-index validation)
  • ui-a11y & a11y-debugging (WCAG 2.2 AA & Touch Targets)
  • uxui-principles (Research-backed interface principles)

📱 1. Mobile Usability & Ergonomics (ux-audit, ui-visual-validator)

Verdict: FAIL

  • Heuristic Violated: Aesthetic and Minimalist Design / Cognitive Load
    • Finding: The top toolbar attempts to render ~10 actions (Undo, Redo, Search, Library, Loop, POI, Save, Export, Import, Compare, Theme, User Avatar) in a single row or flex container on a 390px wide screen.
    • Remediation: Introduce a "Hamburger" or "More" menu (Bottom Sheet or Drawer on mobile) for secondary actions like Export, Import, Compare, Theme, and Loop. Keep only core actions (Search, Layers/Map Styles, User Profile) on the main screen.
  • Heuristic Violated: Flexibility and Efficiency of Use (Thumb-friendly design)
    • Finding: The "Route Builder" panel inputs ("Start point", "End point") are positioned at the absolute bottom. When the virtual keyboard opens, it completely covers the inputs and the map.
    • Remediation: When inputs are focused on mobile, either scroll the container into view or render a full-screen "Search Mode" overlay so the user can see what they are typing.

♿ 2. Accessibility & Touch Targets (ui-a11y, a11y-debugging)

Verdict: NEEDS IMPROVEMENT

  • Note: Lighthouse automated A11y score is 100/100, which means basic ARIA and structural HTML rules are met. However, manual interaction reveals functional a11y issues.
  • Rule Violated: Touch Targets (Minimum 44x44px)
    • Finding: Due to the overlapping toolbar elements (BUG-008), the effective touch targets for "Undo/Redo", "Routing profile", and "Surface" selectors overlap with map controls (Zoom). It is impossible to accurately tap these with a thumb.
    • Remediation: Re-layout the mobile controls. MapLibre controls should be moved down or to the right side, avoiding the top-left/top-center overlapping area.
  • Rule Violated: Error Identification & Labels
    • Finding: Chrome DevTools reported A form field element should have an id or name attribute. This breaks screen reader associations and browser autofill.
    • Remediation: Audit all <input>, <select>, and <textarea> elements to ensure they have unique ids linked to a <label> (or proper aria-label).

🏗 3. Component Architecture & Z-Index (ui-visual-validator)

Verdict: FAIL

  • Rule Violated: Visual Hierarchy & Stacking Context
    • Finding: The user avatar, "Logout" button, and "Loading..." text render on top of the Route Builder panel and routing profile dropdowns (BUG-010). The Z-index scale is broken or not centralized.
    • Remediation: Implement a strict Z-index token scale (e.g., z-map: 0, z-controls: 10, z-panel: 20, z-modal: 30, z-toast: 40). Ensure the Route Builder has a higher stacking context than the map controls and base toolbar.

🔄 4. System Status & Feedback (ux-audit)

Verdict: FAIL

  • Heuristic Violated: Visibility of System Status
    • Finding: The "Loading..." text in the top right is (a) unstyled/intrusive, and (b) gets stuck infinitely if the backend fails (BUG-001). Furthermore, the Library Page shows a hanging "Loading..." text when the API is down (BUG-007).
    • Remediation: Replace text-based "Loading..." with a skeleton loader, spinner, or top progress bar. Add explicit timeout logic and Error Boundary fallbacks (e.g., "Failed to load route. Try again.") to recover from backend failures gracefully.
  • Heuristic Violated: Recognition rather than Recall
    • Finding: Disabled buttons (Undo/Redo when history is empty) provide no tactile or visual feedback explaining why they are disabled if a user taps them.

🎯 Summary of Actions Required

To bring this UI up to production/StyleSeed standards:

  1. Redesign Mobile Layout: Move toolbar actions into a mobile-friendly Bottom Navigation or "More" drawer.
  2. Fix Z-Index: Standardize z-index values across all floating elements and panels.
  3. Implement Error States: Replace infinite "Loading..." with actual error boundaries and retry buttons.
  4. Fix Form A11y: Add id / name to all inputs.