Aegix Global, LLC
SMS Web — VPAT 2.5
Last reviewed 2026-04-03VPAT 2.5 - Aegix SMS (Safety Management System Web App)
Product Information
| Field | Value |
|---|---|
| Product Name | Aegix SMS Web |
| Product Version | Current (as of 2026-04-07) |
| Product Description | Enterprise Safety Management System for site configuration, protocol management, drill scheduling, event monitoring, user/role administration, and compliance reporting |
| Report Date | 2026-04-07 |
| Contact | Aegix Global |
| Evaluation Methods | Code review, static analysis against WCAG 2.1 AA criteria, eslint-plugin-jsx-a11y |
| Applicable Standards | WCAG 2.1 Level AA, Section 508 (Revised) |
Conformance Level Key
| Term | Description |
|---|---|
| Supports | The functionality of the product has at least one method that meets the criterion without known defects or meets with equivalent facilitation |
| Partially Supports | Some functionality of the product does not meet the criterion |
| Does Not Support | The majority of product functionality does not meet the criterion |
| Not Applicable | The criterion is not relevant to the product |
Application Overview
Aegix SMS is a React web application (~226 source files) focused on enterprise safety management:
- Sites - Site/building/floor/room hierarchy management with floorplan uploads
- Protocols - Safety protocol configuration with guidance steps
- Drills - Drill scheduling and execution tracking
- Events - Event monitoring and detail views
- Admin - User management, roles, SSO configuration, billing, document management
- Reporting - District readiness dashboards
- Reunification - Student/family reunification event management
- Kiosk - Visitor self-service check-in mode
- Plan Templates - Emergency plan template management
Table 1: WCAG 2.1 Report
Principle 1: Perceivable
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content (Level A) | Partially Supports | Logo images have alt text. Icon-only buttons in PageHeader, drawers, and data tables now have aria-labels. StatusBadge color dots marked aria-hidden with adjacent text labels. Some icon-only actions in admin panels (UsersContent, RolesContent, TypesContent) may still lack text alternatives. |
| 1.2.1 Audio-only and Video-only (Level A) | Not Applicable | No audio or video content. |
| 1.2.2 Captions (Prerecorded) (Level A) | Not Applicable | No prerecorded media. |
| 1.2.3 Audio Description or Media Alternative (Level A) | Not Applicable | No prerecorded video. |
| 1.2.4 Captions (Live) (Level AA) | Not Applicable | No live media. |
| 1.2.5 Audio Description (Level AA) | Not Applicable | No prerecorded video. |
| 1.3.1 Info and Relationships (Level A) | Partially Supports | Form inputs in Login, SiteDrawer, BuildingDrawer, FloorDrawer, RoomDrawer, ProtocolDrawer, DrillScheduleDrawer, ProtocolReportStepEditor, ProtocolGuidanceEditor, ProtocolGroupSelector, PlanTemplateForm, KioskActivation, KioskExitDialog, and UserSitesSection now have proper associations. DataTable has scope="col" on column headers, aria-sort on sortable columns, and keyboard-operable sort. Heading hierarchy maintained with h1 on PageHeader and h3 on SubHeader. Admin configuration forms (SsoConfig, BillingContent, AuthorizationContent, DocumentsContent, TypesContent, ConfigurableTypeManager) still need label associations. |
| 1.3.2 Meaningful Sequence (Level A) | Supports | DOM order follows visual presentation. Tab-based navigation presents content in logical order. |
| 1.3.3 Sensory Characteristics (Level A) | Supports | StatusBadge includes text labels alongside color dots. Drill schedule status indicators include text alternatives. Protocol guidance steps use numbered sequences. |
| 1.3.4 Orientation (Level AA) | Supports | No orientation lock. Responsive design present. |
| 1.3.5 Identify Input Purpose (Level AA) | Partially Supports | Login form has autoComplete="email" and autoComplete="current-password". KioskExitDialog and some site forms have autocomplete. Admin configuration forms (SSO, billing, authorization) still lack autocomplete attributes. |
| 1.4.1 Use of Color (Level A) | Supports | StatusBadge color dots marked aria-hidden with adjacent text labels. Drill schedule status uses text alongside color. District readiness reporting uses text labels with color indicators. |
| 1.4.2 Audio Control (Level A) | Not Applicable | No auto-playing audio. |
| 1.4.3 Contrast (Minimum) (Level AA) | Supports | Theme tokens updated for AA compliance: text.tertiary darkened to gray.700, text.action to teal.700 (light) / lightBlue.600 (dark), text.danger to red.700 (light) / darkRed.200 (dark). Dark mode tokens (text.reunification, text.drill) updated. surface.menuSelect opacity increased from 8% to 15%. SubHeader uses neutral.600 (borderline for 12px text). |
| 1.4.4 Resize Text (Level AA) | Supports | Chakra UI supports resizing. Login page now uses responsive width (maxW={{ base: '100%', sm: '448px' }}). |
| 1.4.5 Images of Text (Level AA) | Supports | No images of text. |
| 1.4.10 Reflow (Level AA) | Supports | Login page uses responsive maxW. Layouts use Chakra responsive breakpoints. Data-heavy admin pages may require horizontal scroll for wide tables. |
| 1.4.11 Non-text Contrast (Level AA) | Supports | Focus indicators use 2px solid outlines with border-action color token across all interactive elements. Global *:focus-visible rule provides consistent focus visibility. |
| 1.4.12 Text Spacing (Level AA) | Partially Supports | No explicit handling for forced text spacing overrides. DataTable cells and badges may clip with increased spacing. |
| 1.4.13 Content on Hover or Focus (Level AA) | Supports | No significant hover-revealed content. Drawer components slide in on user action (not hover). Menu dropdowns follow Chakra’s accessible patterns. |
Principle 2: Operable
| Criteria | Conformance Level | Remarks and Explanations | |
|---|---|---|---|
| 2.1.1 Keyboard (Level A) | Supports | Keyboard event handlers (Enter/Space) added to interactive non-button elements: DrillScheduleList, ProtocolsList, ResourcesList, DrawerSideMenu, TransferList. Login password toggle converted to accessible IconButton. DataTable sortable headers are keyboard-operable. Kiosk visitor cards support keyboard selection. RowActionsMenu and TableOptions export items are keyboard accessible. | |
| 2.1.2 No Keyboard Trap (Level A) | Supports | DrawerComponent implements role="dialog", aria-labelledby, close button with aria-label, and focus management. Chakra drawers and dialogs handle focus trapping. KioskExitDialog uses proper dialog patterns. Escape key closes all overlays. | |
| 2.1.4 Character Key Shortcuts (Level A) | Supports | No single-character shortcuts. | |
| 2.2.1 Timing Adjustable (Level A) | Supports | Kiosk mode implements WCAG 2.2.1 compliant timeout warnings: KioskResult pauses countdown at 5s with aria-live="assertive" warning and “Stay on this page” / “Return now” options. KioskCheckOut pauses at 3s with the same pattern. Both use role="alert" for screen reader announcement. | |
| 2.2.2 Pause, Stop, Hide (Level A) | Supports | No auto-updating or moving content. | |
| 2.3.1 Three Flashes or Below (Level A) | Supports | No flashing content. | |
| 2.3.3 Animation from Interactions (Level AAA) | Supports | Global prefers-reduced-motion CSS rule disables all animations and transitions when user preference is set. | |
| 2.4.1 Bypass Blocks (Level A) | Supports | Skip-to-content link added as first focusable element in AppLayout. Main content area identified with id="main-content". Link becomes visible on focus. | |
| 2.4.2 Page Titled (Level A) | Supports | Dynamic page titles implemented via usePageTitle hook on all page routes: Dashboard, Sites, Events, Admin, Settings, Reunification, Integrations, Visitor Management, Delivery Metrics, Not Found. Titles follow “{Page} \ | Aegix SMS” pattern. |
| 2.4.3 Focus Order (Level A) | Supports | Tab order follows logical DOM order. Skip link provides bypass. DrawerComponent manages initial focus on open and return focus on close. | |
| 2.4.4 Link Purpose (In Context) (Level A) | Supports | Navigation links are descriptive. Sidebar links clearly identify destinations. | |
| 2.4.5 Multiple Ways (Level AA) | Partially Supports | Sidebar navigation and URL routing. No search or sitemap for alternative navigation. | |
| 2.4.6 Headings and Labels (Level AA) | Supports | PageHeader provides h1, SubHeader provides h3. Form labels properly associated with inputs in site management drawers. | |
| 2.4.7 Focus Visible (Level AA) | Supports | Visible focus indicators restored across shared theme: button, checkbox, radio, sidebar links, select, searchInput, RowActionsMenu, TableOptions export items, dialog close button. Global *:focus-visible CSS rule provides fallback. | |
| 2.5.1 Pointer Gestures (Level A) | Supports | No complex gestures. Floorplan uploads use standard file picker. | |
| 2.5.2 Pointer Cancellation (Level A) | Supports | Standard click events. | |
| 2.5.3 Label in Name (Level A) | Supports | Interactive controls have visible text matching accessible name. Icon-only buttons have descriptive aria-label attributes. | |
| 2.5.4 Motion Actuation (Level A) | Not Applicable | No motion-based interactions. |
Principle 3: Understandable
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 3.1.1 Language of Page (Level A) | Supports | present. |
| 3.1.2 Language of Parts (Level AA) | Supports | English throughout. |
| 3.2.1 On Focus (Level A) | Supports | No unexpected context changes. |
| 3.2.2 On Input (Level A) | Supports | Standard form submission patterns. |
| 3.2.3 Consistent Navigation (Level AA) | Supports | Sidebar navigation consistent. Tab menus consistent within sections. |
| 3.2.4 Consistent Identification (Level AA) | Supports | Shared components (DataTable, DrawerComponent, PageHeader) used consistently. |
| 3.3.1 Error Identification (Level A) | Partially Supports | Login form error messages linked to inputs. AriaLiveRegion provides screen reader announcements for status changes. Admin forms (user creation, SSO, billing) still need inline error associations. |
| 3.3.2 Labels or Instructions (Level A) | Partially Supports | Site management drawers (Site, Building, Floor, Room, Protocol, Drill, Plan Template) now have proper elements. Login has labels. Admin configuration forms (SSO, billing, authorization, types) still use placeholder-only labeling. |
| 3.3.3 Error Suggestion (Level AA) | Partially Supports | Login shows descriptive errors (“Email is required”, “Password must be at least 6 characters”). Other forms need verification. |
| 3.3.4 Error Prevention (Legal, Financial, Data) (Level AA) | Partially Supports | KioskExitDialog provides confirmation. Some admin actions (site deletion, user removal) need confirmation verification. |
Principle 4: Robust
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 4.1.1 Parsing (Level A) | Supports | React/TypeScript generates valid HTML. |
| 4.1.2 Name, Role, Value (Level A) | Supports | DrawerComponent uses role="dialog", aria-labelledby. DataTable uses semantic
with scope="col" and aria-sort. StatusBadge uses role="status" with aria-hidden on decorative dots. Interactive list items (DrillScheduleList, ProtocolsList, ResourcesList) have role="button", tabIndex, and keyboard handlers. |
| 4.1.3 Status Messages (Level AA) | Supports | AriaLiveRegion context provider announces dynamic content changes via aria-live="polite". Kiosk timeout warnings use aria-live="assertive" with role="alert". Loading states and CRUD results announced to screen readers. |
Section 508 Functional Performance Criteria
| Criteria | Conformance Level | Remarks |
|---|---|---|
| 302.1 Without Vision | Partially Supports | Form labels associated in site management drawers, ARIA live regions for status messages, DataTable scope attributes, dynamic page titles. Admin configuration forms still lack full label coverage. |
| 302.2 With Limited Vision | Supports | Text resizing works with responsive layouts. Color contrast improved across all theme tokens including dark mode. Focus indicators visible with 2px solid outlines. Reduced-motion support available. |
| 302.3 Without Perception of Color | Supports | StatusBadge includes text labels alongside color. Drill schedule and protocol status use text indicators. |
| 302.4 Without Hearing | Supports | No audio-dependent functionality. |
| 302.5 With Limited Hearing | Supports | No audio-dependent functionality. |
| 302.6 Without Speech | Supports | No speech input required. |
| 302.7 With Limited Manipulation | Supports | All interactive elements operable via keyboard. Focus indicators visible. Skip navigation available. Kiosk buttons meet 44x44px minimum touch target. |
| 302.8 With Limited Reach and Strength | Supports | Standard input methods supported. Full keyboard-only operation available for core workflows. |
| 302.9 With Limited Language, Cognitive, and Learning Abilities | Supports | Consistent layout and navigation. Kiosk timeout warnings provide pause/extend options. Error messages provide guidance. |
Summary
Overall Conformance Level: Partially Supports WCAG 2.1 AA
Aegix SMS has undergone significant accessibility remediation (2026-04-07) addressing the majority of WCAG 2.1 AA criteria. Built on Chakra UI with comprehensive shared theme improvements, the application now supports keyboard navigation, screen readers, and assistive technologies across core site management and kiosk workflows.
Resolved Issues (2026-04-07)
- Keyboard accessibility - Keyboard handlers added to all custom interactive elements (lists, drawers, kiosk cards)
- Focus indicators - Visible 2px solid focus rings restored across shared theme (button, checkbox, radio, select, searchInput, sidebar, RowActionsMenu, TableOptions)
- Form accessibility - Proper Field.Label associations added to all site management drawers, login, kiosk, and plan template forms
- DataTable - scope=“col”, aria-sort, keyboard-operable sortable headers, caption support
- DrawerComponent - role=“dialog”, aria-labelledby, close button label, focus management
- StatusBadge - aria-hidden on color dots, role=“status”, text labels, dark mode contrast
- Dynamic page titles - usePageTitle hook on all page routes
- ARIA live regions - AriaLiveRegion context provider for screen reader announcements
- Color contrast - Theme tokens updated for AA compliance in both light and dark modes
- Reduced motion - Global prefers-reduced-motion CSS support
- Kiosk accessibility - 44x44px touch targets, keyboard-accessible cards, WCAG 2.2.1 compliant timeout warnings with pause/extend
- Skip navigation - Skip-to-content link in AppLayout
- Accessibility linting - eslint-plugin-jsx-a11y CI job for ongoing enforcement
Remaining Items
- Admin form labels (1.3.1, 3.3.2) - SsoConfig, BillingContent, AuthorizationContent, DocumentsContent, TypesContent, ConfigurableTypeManager, VisitorManagementContent still need Field.Label associations
- Admin form errors (3.3.1) - Admin forms need inline error associations with aria-describedby
- Text spacing (1.4.12) - No explicit handling for forced text spacing overrides
- Manual testing - Screen reader testing (NVDA/VoiceOver), browser zoom 200%, Windows High Contrast mode verification still needed
See the accompanying implementation plan (implementation-plan-aegix-sms.md) for the full remediation roadmap.