Miles Tracking · Accessibility Conformance Report
Miles Tracking Rider Web App
Accessibility Conformance Report based on VPAT® Version 2.5 Rev (WCAG edition), self-authored from a documented evaluation of the shipped product.
- Product
- Miles Tracking rider web app — the public live vehicle map (
/a/{agency}), the website embed an agency pastes into its own site (embed.jsframing/embed/{agency}), and the app's front page. - Version
- Production build
index-XorQyVBE.js, served atapp.milestracking.com(the same bundle is also served atmilestracking-app.pages.dev). Later builds have shipped since; see Publication and currency under Notes. - Report date
- August 18, 2026
- Evaluated
- August 18, 2026, against the live production deployment
- Standard
- WCAG 2.1, Levels A and AA (the standard adopted by the ADA Title II web rule, 28 CFR §35.200, which binds our transit-agency customers)
- Author
- Miles Tracking (vendor self-assessment)
- Contact
- contact@milestracking.com — a monitored address. Accessibility problems, questions about any row in this report, and requests for information in another format all go there, and are answered by the people who build the product.
Product description
The rider web app shows the live position of an agency's vehicles on a map, beside a list of every vehicle in the fleet. It is public — no account, no install — and mobile-first. The same component renders the standalone map page and the embed an agency places on its own website, so the two cannot disagree.
The product's central design rule is also an accessibility property: unknown is a value. A vehicle that stops reporting is removed from the map within five minutes and described in the list in plain text — "No data from Bus 31 since 3:42 PM" — rather than left as a stale dot. State is always carried in words, never in color alone.
Notes
- Publication and currency (added August 25, 2026 — no conformance cell was
changed). This report is published at
milestracking.com/accessibility. It
states the evaluation of the build named above, on the date named above; that is what a
conformance report is, and it is not silently refreshed. Two things have changed since the
evaluation and are named here rather than left for a reader to discover: the rider app has
shipped later builds, and it has gained one rider-facing view that this edition did not
evaluate — a shared single-vehicle tracking link (
/t/{token}), built from the same map and list components covered here, but not separately tested. The next edition covers it, and is due with the SC 2.2.2 fix and the screen-reader pass. If you are evaluating us for a purchase and want the current build assessed first, ask — we would rather run it than have you rely on a date. - Scope. This report covers the rider-facing surfaces named above. The
agency staff console (
/console) and the marketing site (milestracking.com) are separate surfaces and are not covered by this edition; the console shares the rider app's stylesheet, contrast gate, and component patterns, and a future edition will cover it after its own evaluation. - Self-assessment. This report was authored by the vendor from the evaluation described below, per ITI's guidance that a VPAT does not require third-party review. Every "Supports" entry is backed by a test that was actually run on the shipped build; nothing in this report is aspirational.
- One known non-conformance. SC 2.2.2 (Pause, Stop, Hide) — the auto-updating map has no pause control. See the highlighted row in Table 1 and the remediation note beneath it.
- Advisory findings recorded during evaluation, not WCAG A/AA failures:
the map and embed pages lack a
<main>landmark (the front page has one), and a text-equivalent arrivals view is planned as a co-equal view of the same data once stop-level predictions exist (28 CFR §35.202(a) permits alternate versions only where direct accessibility is not possible, so the map itself is being made accessible rather than excused). Both are tracked for remediation. - WCAG 2.0. Conformance to WCAG 2.1 A/AA as reported here encompasses every WCAG 2.0 A/AA success criterion.
- Section 508. This report uses the WCAG edition of the VPAT. Our customers are ADA Title II entities, not federal agencies; the Revised Section 508 standards incorporate WCAG 2.0 A/AA, which Table 1 and Table 2 cover.
Evaluation methods used
- Automated audit of the live deployment (August 18, 2026): Lighthouse
(axe-core rules), mobile emulation, on the public map route and the embed route.
Accessibility score 98/100 on both; the single flag raised (missing
mainlandmark) is recorded under Notes above. - Machine-checked color contrast on every build: 34 text-contrast assertions across this app's light and dark themes (52 across the product line), each required to clear WCAG AA 4.5:1. A failing pair fails the build — contrast cannot regress silently.
- Manual keyboard evaluation in desktop Chrome against the live deployment: a full tab walk of every interactive control; focus visibility confirmed by computed style (2px solid outline on the focused element); the map panned with arrow keys and zoomed with the on-map buttons; no keyboard trap found.
- Reflow and spacing tests: the layout at a 320 CSS-pixel-wide viewport shows no horizontal scrolling and no loss of content or function; the SC 1.4.12 text-spacing override (line height 1.5, letter spacing 0.12em, word spacing 0.16em, paragraph spacing 2em) clips nothing.
- Accessibility-tree inspection (Chrome DevTools) of each rider-facing screen, in both themes.
- Source review of the rider app's markup and ARIA usage.
- Not yet run: a full screen-reader pass (NVDA and VoiceOver). It is planned before the first customer deployment, and this report will be reissued with its results. We state this rather than imply coverage we do not have.
Applicable standards/guidelines
| Standard / guideline | Included in report |
|---|---|
| Web Content Accessibility Guidelines 2.1, Level A | Yes (Table 1) |
| Web Content Accessibility Guidelines 2.1, Level AA | Yes (Table 2) |
| Web Content Accessibility Guidelines 2.1, Level AAA | No |
Terms
| Term | Meaning |
|---|---|
| Supports | The functionality of the product has at least one method that meets the criterion without known defects or meets with equivalent facilitation. |
| Does not support | The majority of product functionality does not meet the criterion. |
| Not applicable | The criterion is not relevant to the product. |
"Partially supports" (some functionality meets the criterion) appears in the VPAT template's vocabulary; no criterion in this report currently uses it.
Table 1: WCAG 2.1 — Success criteria, Level A
| Criteria | Conformance level | Remarks and explanations |
|---|---|---|
| 1.1.1 Non-text Content | Supports | Every vehicle marker is a real button with an accessible name ("Bus 14 — live").
The map region carries an aria-label; decorative state dots are
aria-hidden; the wheelchair-accessible glyph has an
aria-label. |
| 1.2.1–1.2.3 Time-based Media(audio-only, captions, audio description) | Not applicable | The product contains no audio or video content. |
| 1.3.1 Info and Relationships | Supports | Semantic headings, lists, and labeled form fields throughout; feed state is a
role="status" / role="alert" region. (Advisory: the map
pages lack a main landmark — see Notes.) |
| 1.3.2 Meaningful Sequence | Supports | DOM order matches visual order: agency header, feed status, map, then the vehicle list. |
| 1.3.3 Sensory Characteristics | Supports | Instructions never rely on shape or position; every state is named in text. |
| 1.4.1 Use of Color | Supports | Marker and dot colors are always paired with text labels ("Live", "Delayed", "No signal", "No data today"). Route lines are drawn over a contrasting casing so an agency's brand color stays visible on either basemap. |
| 1.4.2 Audio Control | Not applicable | No audio plays. |
| 2.1.1 Keyboard | Supports | Verified by keyboard walk on the live build: theme toggle, map canvas (arrow-key pan, +/− zoom), each vehicle marker, zoom and compass controls, 2D/3D switch, and every vehicle-list entry are all reachable and operable. |
| 2.1.2 No Keyboard Trap | Supports | Tab enters and leaves the map; no trap found in the walk. |
| 2.1.4 Character Key Shortcuts | Supports | The map's single-key shortcuts (+/−) are active only while the map canvas itself has focus, which is the exception the criterion provides. |
| 2.2.1 Timing Adjustable | Not applicable | No time limits, sessions, or timed interactions. |
| 2.2.2 Pause, Stop, Hide | Does not support | Vehicle positions update automatically (a poll about every 20 seconds, and each vehicle's freshness is re-derived once per second) and there is no pause, stop, or hide control. The auto-update runs in parallel with other content, so the criterion applies with no exception. This is the product's one known WCAG A/AA non-conformance; see the remediation note below this table. |
| 2.3.1 Three Flashes or Below Threshold | Supports | Nothing flashes. |
| 2.4.1 Bypass Blocks | Supports | Each view is a single screen with no repeated navigation blocks; heading structure supports direct navigation. |
| 2.4.2 Page Titled | Supports | Every page carries a descriptive title naming the agency, e.g. "Demo Transit — live vehicles". |
| 2.4.3 Focus Order | Supports | Verified: header, feed status, map and markers, map controls, view switch, vehicle list — the reading order. |
| 2.4.4 Link Purpose (In Context) | Supports | Links state their destination ("agency website", map data attribution). |
| 2.5.1 Pointer Gestures | Supports | Every function needed to use the map has a single-pointer or button path: drag to pan, buttons to zoom, buttons to switch 2D/3D, a compass to reset rotation, tap to select a vehicle. Two-finger rotation is an optional convenience carrying no information of its own. |
| 2.5.2 Pointer Cancellation | Supports | All controls are native buttons activating on the up-event. |
| 2.5.3 Label in Name | Supports | Accessible names contain the visible text (e.g. the list entry for Bus 14 is named "Bus 14…"). |
| 2.5.4 Motion Actuation | Not applicable | No device-motion input is used. |
| 3.1.1 Language of Page | Supports | <html lang="en"> on every page. |
| 3.2.1 On Focus / 3.2.2 On Input | Supports | Focus changes nothing; the one form (open an agency map by name) submits only via its button. |
| 3.3.1 Error Identification | Supports | An unknown agency is named in a role="alert" banner: "No such agency.
Check the link you followed." |
| 3.3.2 Labels or Instructions | Supports | The agency field is labeled; no other input exists on the rider surface. |
| 4.1.1 Parsing | Supports | Per the W3C's 2023 errata this criterion is obsolete (removed in WCAG 2.2) and always satisfied by content that modern browsers parse. |
| 4.1.2 Name, Role, Value | Supports | Toggles expose aria-pressed; the vehicle sheet handle exposes
aria-expanded; markers and list entries are buttons with accessible
names; verified in the accessibility tree. |
Remediation, SC 2.2.2: a pause control for the auto-updating map is a tracked roadmap item scheduled ahead of any customer deployment. When it ships, this report will be reissued with the row re-tested. We publish the gap rather than wait, because a conformance report that hides its one known defect is worth less than the defect.
Table 2: WCAG 2.1 — Success criteria, Level AA
| Criteria | Conformance level | Remarks and explanations |
|---|---|---|
| 1.2.4 Captions (Live) / 1.2.5 Audio Description | Not applicable | No audio or video content. |
| 1.3.4 Orientation | Supports | The layout works in portrait and landscape; orientation is never locked. |
| 1.3.5 Identify Input Purpose | Not applicable | The only field collects an agency's short name, not information about the user. |
| 1.4.3 Contrast (Minimum) | Supports | All application text is machine-checked at ≥ 4.5:1 in both themes on every build (34 assertions; a failure fails the build). The application's own map labels (stop names) are drawn with a contrast halo. Street-name cartography inside the basemap is rendered by the map provider's style and is not individually asserted. |
| 1.4.4 Resize Text | Supports | Text is set in relative units and the layout reflows; verified at 200% zoom equivalents down to a 320px viewport. |
| 1.4.5 Images of Text | Supports | No images of text; map labels are rendered text. |
| 1.4.10 Reflow | Supports | Verified at a 320 CSS-pixel viewport: single column, no horizontal scrolling, the vehicle list becomes a bottom sheet. The map itself is content that requires two-dimensional layout, the exception the criterion names. |
| 1.4.11 Non-text Contrast | Supports | Focus indicators are 2px solid outlines in the accent color; vehicle markers carry a contrasting ring so the disc reads on any basemap; controls use the same contrast-asserted token set as text. |
| 1.4.12 Text Spacing | Supports | Tested with the full override set; no content or function is lost. |
| 1.4.13 Content on Hover or Focus | Supports | Marker popups open on activation, not hover, and persist until dismissed. |
| 2.4.5 Multiple Ways | Supports | A vehicle can be reached through the map or through the list; pages within the app are linked from the front page and directly addressable by URL. |
| 2.4.6 Headings and Labels | Supports | Headings and labels describe their content (agency name, "Vehicles", "Agency"). |
| 2.4.7 Focus Visible | Supports | Every interactive element shows a visible focus indicator; measured on the live build as a 2px solid outline. |
| 3.1.2 Language of Parts | Supports | All content is in English; no passages in another language. |
| 3.2.3 Consistent Navigation / 3.2.4 Consistent Identification | Supports | The same controls appear in the same order with the same names on every rider surface — the embed is literally the same component as the public map. |
| 3.3.3 Error Suggestion | Supports | The unknown-agency message says what to do ("Check the link you followed"); a feed outage names the state and offers "Try again". |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Not applicable | No legal, financial, or data-modifying transactions on the rider surface. |
| 4.1.3 Status Messages | Supports | Feed state ("3 of 4 vehicles are reporting", outage, reconnecting, demo notice) is
a role="status" or role="alert" region, announced without
taking focus. This is also where the product's stale-data honesty surfaces to
screen-reader users: "No data from Bus 31 since 3:42 PM." |
Legal disclaimer (Miles Tracking)
This report describes the named build as evaluated on the date given, using the methods listed. It is provided for information and does not constitute a certification, warranty, or legal advice. Conformance of future builds is maintained by the automated gates described under "Evaluation methods" and by reissuing this report when material findings change.