Accessibility Conformance Report — Convo Guide (visitor web app)

Based on VPAT® Version 2.5 — INT edition

Status: Issued (v1.0, self-assessed). Produced from a full code-level conformance audit, the remediation in convo-web#50 and its follow-ups, and the scripted live validation described under Evaluation Methods Used — every check passing at issue time. All WCAG 2.1 A/AA criteria resolve to Supports or Not Applicable. Self-issued by Convo; not a third-party certification.


Name of Product / Version

Convo Guide — visitor web app (guide.convo.app), Next.js 16 web application. The visitor-facing experience: a visitor opens a tour from a QR code, listens to AI-narrated audio with a synced transcript, and asks an AI docent questions by text or voice.

Evaluated revision: dev branch as of 2026-07-20 (commit b2e5e53 plus the finalization changes issued with this report), including the accessibility remediation in convo-web#50 and its follow-ups.

Report Date

2026-07-20 (version 1.0 — see the change log at the end of this report)

Product Description

A multilingual, browser-based audio-guide for museums and cultural institutions. There is no native app or hardware in scope. Visitors do not sign up to use a tour; an optional email one-time-passcode login exists for institution staff to preview unpublished content. No payments, no personal-data transactions.

Per-organization theming. Institutions may supply a brand accent color and background color. These are not applied raw: the runtime derivation (src/lib/brand-accent.ts) darkens the accent until CTA fills reach ≥ 4.6:1 against the ground and produces a contrast-safe accent-text token, and organization background colors are constrained (and defensively re-validated client-side) to ≥ 4.5:1 against the text ink, and the secondary-text and form-field-boundary tones are likewise derived from the chosen ground (secondary text kept ≥ 4.5:1, field boundaries ≥ 3:1) — so the contrast conformance reported below is preserved by construction under customer theming, not only in the default palette.

Contact Information

accessibility@convo.app

Evaluation Methods Used

This report was produced by:

  1. Manual code-level audit of every visitor surface — the audio player (mini + full + seek + transcript), text chat, voice chat, page structure / layout, navigation, the scan flow, and the staff auth form — against WCAG 2.1 A and AA, followed by remediation of all findings (convo-web#50 and follow-ups: keyboard-operable seek slider, aria-live/role="log" status messaging, focus-visible indicator, skip link, prefers-reduced-motion, zoom re-enablement, per-route titles, content-language marking, contrast token remediation, and more).
  2. Automated axe-core scanning (WCAG 2.0/2.1 A + AA rulesets) of every visitor surface in its real, data-populated state — explore, organization, and tour pages, the open audio player mid-playback, the chat modal with a live streamed conversation, and the voice modal — with zero serious or critical violations at issue time. A CI job re-runs an axe scan on every pull request as a regression gate.
  3. Scripted interaction testing against the running application (e2e/live-a11y-audit.mjs): skip-link keyboard flow, Tab-reachability of the seek slider, arrow-key seeking, computed visible-focus verification, Space-key activation of the mini-player, Escape dismissal, reflow at a 320 px viewport, the WCAG 1.4.12 text-spacing override, and prefers-reduced-motion behaviour — all passing at issue time.
  4. Accessibility-tree verification that the semantics assistive technology consumes are present and update correctly: slider name/role/value/valuetext, always-mounted polite live regions receiving real streamed replies, status and alert roles, labels on every control, and lang on translated content.
  5. Static guardrails in CI: TypeScript type-checking, ESLint (including an i18next/no-literal-string rule blocking untranslated UI text), an i18n catalog-parity check, and a production build.

Testing was performed with automated tooling and scripted browser sessions (Chromium engine, mobile-class 390 px viewport); conformance of the exposed semantics was verified at the accessibility-tree level, which is the interface screen readers consume. Manual screen-reader spot-checks (VoiceOver on iOS Safari, NVDA on Windows) were not part of this evaluation; they are planned as ongoing release QA, and findings from them will be folded into future versions of this report.

Applicable Standards / Guidelines

Standard / Guideline Included in Report
WCAG 2.1 Level A — Yes · Level AA — Yes · Level AAA — No
Revised Section 508 (2017) Yes
EN 301 549 v3.2.1 (2021) Yes

WCAG 2.1 is the common core: Revised Section 508 (Chapter 5/6) and EN 301 549 (Chapter 9, Web) both incorporate the WCAG 2.1 A/AA success criteria by reference, so the WCAG tables below are the substantive evaluation and the 508 / EN chapters cross-reference them.

Terms


WCAG 2.1 Report

Table 1: Success Criteria, Level A

Criteria Conformance Level Remarks and Explanations
1.1.1 Non-text Content (A) Supports Content images carry meaningful alt text; decorative brand glyphs are aria-hidden; every icon-only control has an aria-label (play/pause, skip, seek, mic, camera, close, account).
1.2.1 Audio-only and Video-only (Prerecorded) (A) Supports The prerecorded tour narration is audio-only; every narrated stop displays its full script as a synchronized on-screen text alternative ("Read in full" opens the complete transcript).
1.2.2 Captions (Prerecorded) (A) Not Applicable The product contains no prerecorded video / synchronized media. The audio narration's text alternative is addressed under 1.2.1.
1.2.3 Audio Description or Media Alternative (Prerecorded) (A) Not Applicable No prerecorded video.
1.3.1 Info and Relationships (A) Supports Semantic landmarks (header/main/nav), heading hierarchy, lists, programmatic label↔input association on the auth form, role="slider" on the seek bar, role="log" on conversation lists.
1.3.2 Meaningful Sequence (A) Supports DOM order matches the visual reading order; no CSS reordering that changes meaning.
1.3.3 Sensory Characteristics (A) Supports Instructions do not rely solely on shape, size, or position; controls are identified by text/label as well as icon.
1.4.1 Use of Color (A) Supports Color is never the sole signal: chat authorship uses alignment + color; scan match ranking pairs the color dot with a text label ("CLOSEST MATCH") and percentage.
1.4.2 Audio Control (A) Supports No audio auto-plays on load. Tour narration is user-initiated with full pause/seek/skip controls and OS media-session controls. The voice-chat audio exists only after the visitor opens voice mode and grants microphone permission, and is stopped (stream torn down) on End/close.
2.1.1 Keyboard (A) Supports All controls are operable by keyboard. The seek bar is a role="slider" with Arrow (±5s), Page Up/Down (±10s) and Home/End handlers; the mini-player expand and play controls are real buttons (Enter + Space). Verified by the scripted live audit (see Evaluation Methods).
2.1.2 No Keyboard Trap (A) Supports Modal surfaces use Radix Dialog (focus trapped while open, released on close); Escape closes the player/chat/voice sheets and the account menu.
2.1.4 Character Key Shortcuts (A) Not Applicable No single-character key shortcuts are implemented; key handling is scoped to focused widgets (the seek slider and the chat textarea's Enter-to-send).
2.2.1 Timing Adjustable (A) Not Applicable Content imposes no time limits.
2.2.2 Pause, Stop, Hide (A) Supports No moving/auto-updating content starts on load. The only continuous motion (voice orb, chat typing indicator) is decorative status shown during a user-initiated activity and is disabled under prefers-reduced-motion.
2.3.1 Three Flashes or Below Threshold (A) Supports No flashing content.
2.4.1 Bypass Blocks (A) Supports A visible-on-focus "Skip to main content" link targets the #main-content landmark on every route; ARIA landmarks are present.
2.4.2 Page Titled (A) Supports Each route sets a descriptive document title (tour / item / organization / exhibition name + product name) via a client-side title hook; other routes use a descriptive default.
2.4.3 Focus Order (A) Supports Focus order follows reading order; dialogs move focus in on open and restore it on close. Verified by the scripted live audit (see Evaluation Methods).
2.4.4 Link Purpose (In Context) (A) Supports Link text plus surrounding context conveys purpose; the few icon/"Back" affordances carry aria-labels.
2.5.1 Pointer Gestures (A) Supports No multipoint or path-based gesture is required; the seek bar responds to a single tap on the track and to keyboard, in addition to drag.
2.5.2 Pointer Cancellation (A) Supports Actions fire on pointer-up / click, allowing abort by moving off-target before release.
2.5.3 Label in Name (A) Supports Where a control has visible text, the accessible name contains it; icon-only controls have descriptive aria-labels.
2.5.4 Motion Actuation (A) Not Applicable No functionality is triggered by device motion or user gestures via sensors.
3.1.1 Language of Page (A) Supports <html lang> is set from the active UI locale (and dir for RTL).
3.2.1 On Focus (A) Supports Receiving focus does not trigger a change of context.
3.2.2 On Input (A) Supports Changing a setting (e.g. the language picker) produces an expected, announced result; no surprise context change.
3.3.1 Error Identification (A) Supports Auth (email / OTP) errors are described in text and announced via role="alert"; chat failures render an error message in the role="log" conversation region.
3.3.2 Labels or Instructions (A) Supports The email field has an associated <label>; the chat textarea has an aria-label; the OTP field is labelled.
4.1.1 Parsing (A) Supports Markup is generated by React with valid nesting and unique IDs. (This criterion is obsolete/removed in WCAG 2.2.)
4.1.2 Name, Role, Value (A) Supports Interactive elements expose name, role, and state; the seek slider exposes aria-valuenow/min/max/valuetext; play/mute expose pressed/label state. Verified by the scripted live audit (see Evaluation Methods).

Table 2: Success Criteria, Level AA

Criteria Conformance Level Remarks and Explanations
1.2.4 Captions (Live) (AA) Not Applicable No live synchronized media (live audio + video). Beyond the requirement, the live voice feature provides a real-time on-screen transcript and an off-screen live region of the guide's replies.
1.2.5 Audio Description (Prerecorded) (AA) Not Applicable No prerecorded video.
1.3.4 Orientation (AA) Supports Layout works in both portrait and landscape; no orientation lock.
1.3.5 Identify Input Purpose (AA) Supports The email field uses type="email" and autocomplete="email".
1.4.3 Contrast (Minimum) (AA) Supports Body text on cream is ~16:1; secondary/muted text was darkened to 64% ink (5.1:1); clay used as body text uses --color-clay-text (clay-deep, 5.9:1); and text-bearing clay CTA fills were darkened to clay-deep so their cream labels reach 5.9:1. Bright clay is retained only where it carries no text (icon buttons, progress fill, the orb, the apostrophe glyph) — all ≥3:1. Disabled controls are exempt.
1.4.4 Resize Text (AA) Supports Pinch/zoom is enabled (the previous user-scalable=no / maximum-scale=1 lock-down was removed); text reflows and scales to 200% without loss of content.
1.4.5 Images of Text (AA) Supports UI text is real text; the only image of text is the brand word mark (logo exception).
1.4.10 Reflow (AA) Supports Responsive layout reflows to a 320 CSS-px width / 400% zoom without two-dimensional scrolling. Verified at a 320 px viewport (equivalent to 400 % zoom of a 1280 px layout).
1.4.11 Non-text Contrast (AA) Supports The keyboard focus indicator, seek track fill, and accent controls meet 3:1. Interactive text-field boundaries (chat input, email field, OTP cells), where the border is the primary cue, use a dedicated --color-control-border token at ≥ 3:1 (~3.45:1 on cream / 3.62:1 on paper); decorative hairline rules that are not control boundaries remain exempt.
1.4.12 Text Spacing (AA) Supports Text containers use relative line-height and do not clip when spacing is increased; no fixed-height text boxes. Verified with the WCAG 1.4.12 style override in the scripted audit.
1.4.13 Content on Hover or Focus (AA) Supports Hover/focus content (dropdown menus) is dismissible (Escape), hoverable, and persistent; transient tooltips use the native title attribute.
2.4.5 Multiple Ways (AA) Supports A page can be reached more than one way: QR/direct link, the Explore browse view, organization and exhibition pages, and the scan flow.
2.4.6 Headings and Labels (AA) Supports Headings and labels are descriptive of topic/purpose.
2.4.7 Focus Visible (AA) Supports A global :focus-visible clay outline (≥ 3:1 on light and reverse surfaces) applies to every keyboard-focused control, including hand-styled buttons and the seek slider. Verified by the scripted live audit (see Evaluation Methods).
3.1.2 Language of Parts (AA) Supports Content rendered in a language other than the page locale carries a matching lang: player stop titles and transcripts, the chat answer bubble, and the voice transcript's guide lines.
3.2.3 Consistent Navigation (AA) Supports The shared header/navigation is consistent and in a consistent order across pages.
3.2.4 Consistent Identification (AA) Supports Components with the same function are labelled/identified consistently throughout.
3.3.3 Error Suggestion (AA) Supports Auth errors describe the problem and the corrective action (e.g. re-request or re-enter the code).
3.3.4 Error Prevention (Legal, Financial, Data) (AA) Not Applicable No legal, financial, or data-modification transactions occur; the optional login is reversible and stores no submitted records on the visitor's behalf.
4.1.3 Status Messages (AA) Supports Status is exposed without focus change: chat is a role="log" aria-live="polite" region with an off-screen "thinking" role="status"; the voice connection state is aria-live="polite" and a connection failure is role="alert"; auth feedback uses role="alert"/role="status". Verified live: a streamed assistant reply lands in an always-mounted polite live region.

WCAG 2.2 note. This report is scoped to WCAG 2.1 (the level referenced by Section 508 and EN 301 549). The product also satisfies the cheaper new WCAG 2.2 AA criteria — 2.4.11 Focus Not Obscured (Minimum), 2.5.8 Target Size (Minimum) (all interactive targets are ≥ 24×24 px), and 3.3.7 Redundant Entry — and 4.1.1 Parsing is obsolete in 2.2. Full WCAG 2.2 attestation can be issued on the VPAT 2.5Rev template if a buyer requires it.


Revised Section 508 Report

Notes: the product is web content, so the substantive evaluation is the WCAG 2.1 A/AA tables above. Chapters that address hardware, closed functionality, or authoring tools are Not Applicable.

Chapter 3: Functional Performance Criteria (FPC)

Criteria Conformance Level Remarks and Explanations
302.1 Without Vision Supports Operable by screen reader: labelled controls, landmark/heading structure, status announcements, a keyboard-operable seek slider, and text alternatives (stop transcripts; off-screen live captions of the guide's voice replies). Verified by the scripted live audit (see Evaluation Methods).
302.2 With Limited Vision Supports Pinch-zoom and 200% reflow are supported, text contrast is strong, and interactive control boundaries meet 3:1 (WCAG 1.4.3, 1.4.4, 1.4.10, 1.4.11).
302.3 Without Perception of Color Supports See WCAG 1.4.1 — color is never the only means of conveying information.
302.4 Without Hearing Supports All audio has a text equivalent: narration shows a synced transcript; the voice feature provides a transcript and live captions.
302.5 With Limited Hearing Supports As 302.4; visual transcript alternatives throughout.
302.6 Without Speech Supports No function requires speech; the AI docent is fully usable by text chat.
302.7 With Limited Manipulation Supports Full keyboard operation; single-pointer (no path/multipoint gestures); targets ≥ 24 px.
302.8 With Limited Reach and Strength Supports No timing constraints; standard pointer/keyboard interaction.
302.9 With Limited Language, Cognitive, and Learning Abilities Partially Supports Multilingual UI + content, consistent navigation, plain controls, reduced-motion support; no formal plain-language or reading-level audit has been done.

Chapter 4: Hardware

Not Applicable — the product includes no hardware.

Chapter 5: Software

Criteria Conformance Level Remarks and Explanations
501.1 Scope — Incorporation of WCAG See WCAG 2.1 tables The user interface is web content evaluated against WCAG 2.1 A/AA above.
502 Interoperability with Assistive Technology Supports Standard HTML/ARIA semantics expose the UI to platform accessibility APIs; no custom accessibility interface overrides AT. Verified by the scripted live audit (see Evaluation Methods).
503 Applications Supports User preferences (OS reduce-motion, zoom, language) are respected; no AT is disrupted.
504 Authoring Tools Not Applicable The visitor web app is not an authoring tool. (Content is authored in the separate admin portal, out of scope for this report.)

Chapter 6: Support Documentation and Services

Criteria Conformance Level Remarks and Explanations
601.1 Scope See below
602 Accessibility and Compatibility Features Partially Supports This ACR documents accessibility features; end-user help content is minimal (the app is walk-up-and-use).
603 Support Services Partially Supports Support is available at accessibility@convo.app; accessibility-specific support procedures are being formalized.

EN 301 549 v3.2.1 Report

Notes: as web content, the substantive evaluation is Chapter 9 (Web), which maps one-to-one to the WCAG 2.1 A/AA tables above. Hardware, closed functionality, two-way voice (person-to-person), and video chapters are Not Applicable.

Chapter 4: Functional Performance

Equivalent to the Section 508 Chapter 3 FPC above — see that table. Summary: 4.2.1 Without vision Supports · 4.2.2 With limited vision Supports · 4.2.3 Without perception of colour Supports · 4.2.4 Without hearing Supports · 4.2.5 With limited hearing Supports · 4.2.6 Without vocal capability Supports · 4.2.7 With limited manipulation/strength Supports · 4.2.8 With limited reach Supports · 4.2.9 Minimize photosensitive seizure triggers Supports (no flashing) · 4.2.10 With limited cognition Partially Supports · 4.2.11 Privacy — accessibility features do not reduce visitor privacy Supports.

Chapter 5: Generic Requirements

Clause Conformance Level Remarks and Explanations
5.1 Closed functionality Not Applicable Not closed functionality — AT can attach.
5.2 Activation of accessibility features Supports Platform AT and OS preferences (zoom, reduce-motion, language, contrast) work without obstruction.
5.3 Biometrics Not Applicable No biometric controls.
5.4 Preservation of accessibility information during conversion Not Applicable No format conversion.
5.5 Operable parts Supports Controls are keyboard operable and labelled (see WCAG 2.1.1, 4.1.2).
5.6 Locking / toggle controls Not Applicable No physical locking/toggle keys.
5.7–5.9 Key repeat / double-strike / simultaneous user actions Not Applicable Hardware-keyboard characteristics; not applicable to a web app.

Chapter 6: ICT with Two-Way Voice Communication

Not Applicable — the product does not provide person-to-person two-way voice or video communication (telephony/RTT/video-relay). The AI voice docent is a user-to-software feature; beyond scope, it offers a real-time text transcript.

Chapter 7: ICT with Video Capabilities

Not Applicable — no video playback or video communication.

Chapter 8: Hardware

Not Applicable — no hardware.

Chapter 9: Web

All Chapter 9 clauses (9.1–9.4) incorporate the WCAG 2.1 Level A and AA success criteria by reference. See the WCAG 2.1 Report tables above for the clause-by-clause result. Net: Supports — every referenced WCAG 2.1 A/AA criterion resolves to Supports or Not Applicable. 9.5 (extended) not claimed; 9.6 (WCAG conformance requirements) — met.

Chapter 10: Non-web Documents

Not Applicable — the product surfaces no downloadable documents. (This ACR is a standalone document and is not part of the product.)

Chapter 11: Software

Not Applicable / see Chapter 9 — the user interface is delivered as web content (Chapter 9), not as a discrete software application. Software-specific clauses (11.x) are addressed via the WCAG tables; 11.8 (authoring tools) is Not Applicable.

Chapter 12: Documentation and Support Services

Clause Conformance Level Remarks and Explanations
12.1 Product documentation Partially Supports Accessibility features are documented in this ACR; product help is minimal by design.
12.2 Support services Partially Supports Reachable at accessibility@convo.app; formal accessible-support procedures in progress.

Chapter 13: ICT Providing Relay or Emergency Service Access

Not Applicable — no relay or emergency-service functionality.


Validation summary & ongoing monitoring

Issue-time validation (2026-07-20). The scripted live audit (e2e/live-a11y-audit.mjs, run against the application with real content) passed 20 of 20 checks: axe-core scans of the explore, organization, and tour pages, the open player mid-playback, the chat modal with a live streamed conversation, and the voice modal (all zero serious/critical violations); skip-link keyboard flow; Tab-reachability, visible focus, and arrow-key seeking on the audio slider; slider name/role/value semantics; lang on translated content; an assistant reply streaming into an always-mounted polite live region; the voice modal's live-caption region and announced state; Space-key activation of the mini-player; 320 px reflow (≡ 400 % zoom); the WCAG 1.4.12 text-spacing override; and prefers-reduced-motion behaviour. The audit run itself surfaced four defects (an unnamed mobile language control, a late-mounted chat live region, and two small-text contrast pairs, including on the voice surface); all four were fixed and the audit re-run clean before this report was issued.

Ongoing monitoring.

Change log

Date Version Notes
2026-06-23 0.1 (draft) Initial draft from the WCAG audit + remediation in convo-web#50. Pending live-AT validation.
2026-06-23 0.2 (draft) Added the a11y CI job (axe-core via Playwright). It surfaced real 1.4.3 contrast gaps: resolved WCAG 1.4.11 (control-border token ≥3:1), darkened muted text to 64% ink, and routed clay body-text to clay-deep (--color-clay-text). One 1.4.3 item remains (cream labels on bright-clay CTA fills). Live-AT pass still pending.
2026-06-23 0.3 (draft) Darkened text-bearing clay CTA fills to clay-deep (cream labels → 5.9:1). 1.4.3 now fully Supports; all WCAG A/AA rows resolve to Supports / N/A. Live-AT pass still pending.
2026-07-20 1.0 Issued. Scripted live validation (20/20 checks) against real content: axe on all visitor surfaces incl. open player, live chat, and voice modal; keyboard, reflow, text-spacing, reduced-motion. Four defects the audit surfaced (mobile language-control name, late-mounted chat live region, two small-text contrast pairs) fixed pre-issue. Added the per-organization theming contrast-derivation note. DRAFT banner removed.
2026-07-20 1.0.1 Per-org theming hardened: secondary-text (≥ 4.5:1) and form-field-boundary (≥ 3:1) tones are now also derived from the organization's custom ground, closing the last configuration-dependent contrast edge; the previous "scheduled refinement" caveat is removed. Default palette unchanged (derived values are identical on brand cream).