V1 Web PWA · Surface walkthrough

Legal · Accessibility Statement

A per-surface walkthrough of the V1 Web PWA customer surface: layout, states, interactions, data, and cross-references.

walked
9sections3 minread

On this page

Context. surface customer · domain onboarding-public · route /legal/accessibility · auth anon · source apps/oshun/web/src/app/legal/accessibility/page.tsx

Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; manual screen-reader and real telemetry-delivery checks pending. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; 2026-06-28 public-legal-pages Playwright pass covered anonymous routing, exact section inventory, legal nav matrix/active states, TOC/back-to-top/print shell controls, 390 px no-overflow, 44 px touch targets, offline-after-load stability, no telemetry hooks, and axe. Manual AT pass and real telemetry delivery remain pending.

Purpose#

OSHUN's WCAG 2.1 AA conformance statement, per-domain accessibility notes, known limitations, testing methodology, and feedback contact. Rendered through LegalPageShell.

Entry points#

  • Footer link "Accessibility" on /welcome and /landing
  • Sidebar nav from other /legal/* pages
  • Inline references from in-product accessibility panel (e.g., reduced motion / high contrast toggles)
  • Direct URL / bookmark — yes (anon)

Layout regions#

page.tsx defines SECTIONS: commitment, conformance, features, domain-accessibility, limitations, testing, feedback.

  • Header (shell): minimal brand + back link
  • Sticky sidebar: cross-legal nav + 7-entry TOC
  • Main article: h1 "Accessibility Statement", data-legal-date "Last updated: February 21, 2026", seven sections:
    • Commitment (one paragraph)
    • Conformance Status — names WCAG 2.1 Level AA
    • Accessibility Features — eight-item list (keyboard nav, screen reader, reduced motion, high contrast, adjustable text size, focus indicators, color independence, touch targets ≥ 44×44)
    • Domain-Specific — per-domain notes for Tara, Veritas, Nyx, Arete, Nisaba, Metis
    • Known Limitations
    • Testing methodology
    • Feedback contact: accessibility@oshun.app, 5-day response SLA
  • Floating control: back-to-top button

States#

  • Loading — N/A; static
  • Default — all seven sections render
  • TOC click / active section — clicking a TOC button scrolls to that section and marks it data-active="true"; passive scroll-spy remains IntersectionObserver-driven
  • Back-to-top visible — the shared 44 px control appears after scrolling and returns the user near the document start
  • Narrow viewport (≤ 768px) — sidebar collapses; TOC hidden
  • Print — shell strips chrome, appends anchor hrefs after links
  • Offline after load — once loaded, the URL, heading, section inventory, and active legal nav state remain stable when the browser context goes offline
  • Gated — N/A; anonymous-readable

Interactions#

  • Each LEGAL_NAV link — sibling legal page navigation, active state, and at least 44 px mobile target

On-this-page TOC#

  • Each TOC button (7) — scrollIntoView to that section id and immediate active state after click

Back-to-top#

  • "↑" (button) — smooth-scroll to top when visible

Body content#

The Feedback section lists accessibility@oshun.app as plain text, not a mailto: link. Verify intent.

Data & contracts#

  • Reads: none — static text
  • Writes: none
  • Caching: SSR static; loaded-route offline stability is asserted. Cold offline navigation / per-legal SW path caching is not asserted, and current sw.js does not path-cache /legal/*.
  • Auth: anon (in middleware PUBLIC_PREFIXES)
  • Metadata: title: 'Accessibility Statement', description: 'Our commitment to making OSHUN accessible to everyone.'

Cross-references#

E2E coverage#

  • Backed by apps/oshun/web/e2e/public-legal-pages.spec.ts — covers anonymous access, exact seven-section inventory, legal nav inventory/active state, shared TOC/back-to-top/print shell behavior, 390 px no-overflow, 44 px touch targets, offline-after-load stability, no telemetry hooks, and axe.

Open questions / known gaps#

  • Cold offline navigation / per-legal SW cache is not asserted and current sw.js does not path-cache /legal/*; PWA shell cache coverage remains in the offline-first / PWA walkthroughs.
  • accessibility@oshun.app rendered as plain text — confirm whether it should be a mailto link
  • No structured "Report an accessibility issue" form — only an email contact; confirm whether a form route should exist
  • Per-domain notes call out Metis "mastery-state changes are announced via a live region" — verify against /metis/* walkthroughs once they exist