Accessibility

Accessibility at Tribe

Tribe is a web app, and this is what its code and tests show today. It has a skip link, labeled search and filters, keyboard-operable contact rows, and no horizontal overflow at 375 pixels. A real-browser axe-core scan of ten pages in both themes at two widths first found serious problems (low-contrast text, nested buttons, unnamed buttons, names that dropped their visible text); they were fixed the same day and the rescan reports no violations. Automated scans cannot judge keyboard or screen-reader use, and the app has not been tested with a screen reader. We do not claim a conformance level for the app.

Illustration: a quiet public reading room in soft light, with a wide level entrance, a low service counter, and clear open aisles between the shelves.
The product

What Tribe 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 jumps to the main content. Control or Command plus K focuses the contact search. Contact rows in the list take Tab focus and open with Enter, the tiles in the relationship health strip open with Enter or Space, and the profile tabs, buttons, and form controls are real buttons and fields. The network graph is a single labeled image, so its individual contacts cannot be reached from the keyboard. Nobody has walked every flow with only a keyboard.

    Evidence

    • frontend/src/components/layout/Layout.tsx: a Skip to main content link that targets the main region
    • frontend/src/components/search/SearchBar.tsx: Control or Command plus K focuses the search box, which carries the label Search contacts
    • frontend/src/components/contacts/ContactRow.tsx: role button, tabIndex 0, Enter opens the contact; frontend/src/components/dashboard/RelationshipHeatmap.tsx: tiles open on Enter or Space
    • frontend/src/components/network/NetworkCanvas.tsx: the graph is role img with one label, and no node takes focus
    • A keyboard-only walkthrough of every flow has not been recorded.
  • Partly supported

    Screen reader landmarks and labels

    The page has a skip link, labeled search and filter controls, and an image label on the network graph. An automated axe-core scan of the whole app and of the contact list, dashboard, network, settings, import, and outreach review routes finds no violations in jsdom, and the real-browser scan, after fixes, finds none either. The profile's tabs are plain buttons without tab roles, so they do not announce which tab is selected. Tribe has not been tested with VoiceOver, NVDA, or any other screen reader.

    Evidence

    • frontend/src/__tests__/accessibility.test.tsx: vitest-axe on the whole app and on six routes (7 tests, in jsdom)
    • Real-browser axe-core 4.14.0 scan of 10 pages (contact list, new contact, dashboard, import, network, settings, and a profile's Profile, Timeline, Notes, and Insights tabs) at 375 and 1,440 pixels in light and dark, 10/29/2026 3:28 PM CDT: 0 violations of any level after the day's fixes (60 serious or critical findings before them); regression tests in frontend/src/__tests__/colorContrast.test.ts and the dashboard, import, and contact tests hold the fixes
    • 65 lines using role or aria-label in the app's source, counted by search on 10/29/2026
    • frontend/src/components/profile/ProfileTabs.tsx: the tabs are buttons with no role tab or aria-selected
    • No screen-reader run is on record; docs/testing-strategy.md lists manual screen-reader testing as a plan.
  • Partly supported

    Contrast in light and dark

    Tribe's magenta accent measures 5.91 to 1 against white in light mode and 6.69 to 1 against the dark card color in dark mode, both above 4.5 to 1. As small text on the design system's shaded surfaces the kit measured the accent at 4.34 to 1, so this site's links use a slightly darker shade. The rest of the palette comes from the Renkara design system and has not been measured in the app, and the app sets some small text, such as a count beside a group name, in lighter tints that have not been measured. The jsdom scan does not compute contrast. The real-browser scan did, and it found low-contrast text in the dashboard's follow-up queue in dark mode.

    Evidence

    • Computed on 10/29/2026 from frontend/src/styles/variables.css (--brand-accent 322 80% 41% light, 322 80% 71% dark) against the design system's card colors
    • Real-browser axe-core scan, 10/29/2026 3:28 PM CDT: no color-contrast violations on any of the 10 pages in light or dark; frontend/src/__tests__/colorContrast.test.ts computes the secondary text, accent, on-accent, danger text, and starter badge ratios from the tokens (all at least 4.5 to 1)
    • No contrast measurement of the app's tints or the full palette is on record.
  • Partly supported

    Reduced motion

    The design system's global stylesheet shortens every animation and transition to almost nothing when the system asks for reduced motion, and the outreach review page has its own reduced-motion rule. This was read from the stylesheets and not checked in a browser with the setting turned on.

    Evidence

    • node_modules/@renkara/design-system/dist/tokens.css: a prefers-reduced-motion rule shortens animation and transition durations
    • frontend/src/components/outreach/OutreachOperations.module.css: its own prefers-reduced-motion block
  • Not yet tested

    Text resize and zoom

    Nobody has tested Tribe at larger text sizes or browser zoom. Much of the app is styled with fixed small sizes, so large text may crowd or clip.

  • Partly supported

    Mobile and touch

    Below 768 pixels the sidebar becomes a menu behind a button and closes when you pick a page. The real-browser scan loaded 10 pages at 375 pixels in both themes and none overflowed sideways. Nobody has used the app on a phone or checked that each page is comfortable there, and the profile's tab row scrolls sideways by design.

    Evidence

    • frontend/src/components/layout/Layout.tsx: a (max-width: 767px) media query switches the sidebar to a menu
    • frontend/src/components/profile/ProfileTabs.tsx: the tab row scrolls horizontally
    • Real-browser scan, 10/29/2026 3:28 PM CDT: 40 runs at 375 and 1,440 pixels in light and dark, with no horizontal overflow on any of the 10 pages
    • No hands-on phone test is on record.

No WCAG conformance level is claimed for the Tribe app. The Tribe README says the app is built to WCAG 2.1 AA and was tested with VoiceOver, NVDA, and JAWS; no test or record in the repo supports that, and its testing strategy lists manual screen-reader testing as a plan. The repo's accessibility test is an automated axe-core scan in jsdom of the app and six routes, which cannot judge color contrast or real keyboard and screen-reader use. On 10/29/2026 the running app was also scanned with axe-core 4.14.0 in a real browser, on 10 pages at 375 and 1,440 pixels in light and dark (40 runs). That scan first found 60 serious or critical findings (contrast, nested interactive controls, names that dropped visible text, an unnamed button, target size) and, after the fixes, rerun at 3:28 PM CDT, found 0 serious findings and no findings of any other level; it cannot judge keyboard or screen-reader use either. The claims below were read from the code and tests on 10/29/2026. This site's own pages are scanned by the kit's axe-core run in a real browser at 375 and 1,440 pixels in light and dark.

Product notes

More about Tribe

Keys that work today

Everything else is a click, a tap, or a form field.

Keys that work today
Control or Command plus KFocus the contact search
Tab, then EnterOpen a contact from the list
Enter or SpaceOpen a contact from the relationship health strip
Skip linkJump past the sidebar to the main content
Known gaps

What does not work yet

  • The real-browser scan covers 10 pages; the Commitments and Files tabs, the outreach review page, the merge wizard, and the briefing panel are not mounted or not scanned.
  • Tribe has not been tested with a screen reader, and the jsdom axe test does not cover a profile.
  • No one has walked the app using only a keyboard, and the network graph's contacts cannot be reached by keyboard.
  • The profile tabs do not announce which one is selected.
  • The automated tests cannot check focus order or real screen-reader output.
  • Larger text sizes and the Increase Contrast setting are untested, and the app was not checked by hand on a phone.
This website

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.

Feedback

Tell us what is in your way

If something here or in Tribe 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.