Accessibility at Envoy
Envoy's web app has a skip link, a labeled navigation landmark, named dialogs, and labeled form fields, and we ran axe-core on every page and the deal drawer at 375 and 1440 pixels in light and dark. The first run found 25 serious color-contrast problems; we fixed them, and the rerun found no serious or critical violation. A deal moves between stages by dragging on the board or from the Stage menu in the deal drawer, which a keyboard reaches, and the dialogs do not manage focus, which we list below instead of hiding. We do not claim a WCAG level.

What Envoy supports today
Each line says what the product does, how we know, and where to look. “Not yet tested” means exactly that: we have not checked, and we do not claim it.
Partly supported
Keyboard operation
A skip link leads to the main content, the sidebar links and every deal card are real links and buttons that Tab reaches, and a card opens the deal drawer. Escape closes the deal drawer and every dialog. Dropping a card on a column is a mouse drag, but the deal drawer has a labeled Stage menu that changes the stage from the keyboard, and the dialogs do not move or restore focus.
Evidence
- frontend/src/components/layout/Layout.tsx in the Envoy repo: the Skip to main content link, the labeled navigation, and the main landmark
- frontend/src/pages/DealsPage.tsx: each card is a button; the board's own stage move is an onDragStart and onDrop pair with no key handler
- frontend/src/components/deals/DealDrawer.tsx and frontend/src/__tests__/DealDrawer.test.tsx: the Stage select lists the pipeline's stages in order, calls the same stage-change endpoint as the board, and is tested with Tab and a selection; it is a unit test, not a recorded keyboard walkthrough
- frontend/src/hooks/useEscapeKey.ts and frontend/src/__tests__/escape-key.test.tsx: Escape closes the six modal dialogs; DealsPage.test.tsx checks it on New Deal
- No keyboard-only walkthrough of every flow has been recorded.
Partly supported
Screen reader landmarks and labels
Landmarks, named dialogs (Deal detail, New deal), labeled fields, and a health score with an accessible name are in place, and axe-core finds no serious or critical violation on 44 page views. Two smaller findings remain open. Nothing has been tested with a screen reader.
Evidence
- screenshots/output/envoy/a11y.json: axe-core 4.14.0 on 11 routes and the deal drawer, at 375 and 1440 pixels, light and dark (44 runs), no serious or critical violation; the open findings are an empty table header on the Accounts page (minor, 4 runs) and a heading that skips a level in the drawer (moderate, 4 runs)
- frontend/src/__tests__/a11y.test.tsx runs vitest-axe on the rendered app
- frontend/src/components/deals/DealDrawer.tsx: role dialog with aria-modal and the name Deal detail
Partly supported
Contrast in light and dark
The first axe-core run found 25 serious color-contrast violations (health chips, accent buttons in dark mode, the delete text, dimmed settings rows). They are fixed, with source-level tests, and the rerun found none. Automated checks do not evaluate hover or focus states, so those are not covered.
Evidence
- screenshots/output/envoy/a11y.json: 44 runs after the fixes, no color-contrast violation
- frontend/src/__tests__/contrast.test.ts in the Envoy repo checks the fixed color pairs from the source styles
- frontend/src/global.css sets --brand-accent separately for light and dark
Not yet tested
Reduced motion
The mobile menu slides in over 200 milliseconds. Envoy's own styles have no prefers-reduced-motion rule, and nobody has checked whether the design system supplies one.
Not yet tested
Text resize and zoom
Resizing text to 200 percent has not been tested.
Partly supported
Mobile and touch
Every page and the deal drawer fit a 375 pixel wide screen with no sideways page scroll, in both themes, and the sidebar becomes a menu button that opens a drawer. The kanban board scrolls sideways inside its own area. Tap-target size was not measured.
Evidence
- screenshots/output/envoy/a11y.json: 22 runs at 375 pixels, maximum horizontal overflow 0
- frontend/src/__tests__/Layout.test.tsx: the hamburger button toggles aria-expanded and the mobile sidebar
- screenshots/captures/envoy-a11y.spec.ts is the scan that produced these results
No WCAG conformance level is claimed for Envoy. We ran automated checks only (axe-core 4.14.0 against the WCAG 2.0 to 2.2 A and AA rule sets plus best practices, on 44 page views). No one has audited it against WCAG, walked every flow with the keyboard, or tested it with a screen reader, and automated checks find only part of the problems.
What does not work yet
- Dropping a card on a board column is still mouse-only. The keyboard and touch path is the Stage menu in the deal drawer, so a person who cannot drag opens the card first. That menu is unit-tested but was added after the axe-core scan below, and no one has used it with a screen reader.
- The deal drawer and the New Deal, New Account, New Sequence, New Territory, and stage-criteria dialogs are marked modal (aria-modal) and close on Escape, but they do not move focus into the dialog, trap it, or return it to the control that opened them.
- axe-core still reports an empty table header on the Accounts page (minor, 4 runs) and a heading level that skips in the deal drawer (moderate, 4 runs).
- The Commissions page needs a rep's raw id typed into a text box, and a deal's History tab prints stage ids. Both are hard to use with a screen reader, and neither has a plain-language alternative.
- No one has tested Envoy with a screen reader, tested 200 percent text, or measured tap targets, and nothing here is a WCAG audit.
How this site is built and checked
This site targets WCAG 2.2 level AA. That is a target we build and test toward, not a certification, and no one has audited it for conformance.
Structure
A skip link, labeled landmarks (header, navigation, main, footer), one h1 per page, and headings that do not skip levels.
Keyboard and focus
Links and buttons are native elements, so they work from the keyboard. Focus is drawn as a visible ring, and the menu closes with Escape.
Contrast
Text meets 4.5 to 1 in both the light and dark themes, checked against the stylesheet by the test suite.
Motion
Transitions and animation switch off when your system asks for reduced motion.
Small screens and zoom
Layouts hold at 375 pixels wide with no sideways scrolling, text resizes with the browser, and touch targets are at least 44 pixels.
Automated scan
Every page is scanned with axe-core at 375 and 1440 pixels in light and dark, and the checks fail on any serious or critical violation. Automated tools find only part of the problems, so this is a floor, not proof.
Images
Every product screenshot has a text description and comes in a light and a dark version that follows your theme.
Your theme choice
The theme follows your system setting until you pick one with the button in the header.
Tell us what is in your way
If something here or in Envoy does not work for you, write to Renkara Media Group. Say what you were doing, what you used, and what happened, and a person will answer.
Statement last reviewed 10/29/2026.