Last updated: March 2026
FormFactor is designed to be usable by everyone. Every screen, control, and animation in the app has been built with Apple’s accessibility frameworks and audited against the nine categories in the App Store’s Accessibility Nutrition Labels.
VoiceOver
Fully supported.
Every view provides descriptive accessibility labels, values, and hints.
- Scanner view — the camera preview and skeleton overlay are hidden from VoiceOver. A dedicated accessible scene element provides dynamic labels describing body detection state, real-time rep count and phase values, and actionable hints. It uses
.updatesFrequently for rapid changes and provides a custom “Toggle Scanning” accessibility action.
- Real-time announcements — the scanner uses cooldown-based deduplication to announce key events such as body detection, alignment status, rep completion, corrections, and session end without overwhelming the user.
- Form coaching reports — report headers, rating badges, highlight cards, and correction cards use combined accessibility labels so the report reads as coherent sentences.
- 3D anatomy viewer — a complete accessible list view provides an alternative list-based interface with identical injury zone information for users who cannot interact with the 3D scene.
- Exercise tracking — set rows, workout summaries, progress charts, and stat items all use combined accessibility labels with computed descriptions.
- Home dashboard — stat blocks, feature cards, and quick action buttons are grouped and labeled. Decorative illustrations are hidden from VoiceOver.
Decorative elements are marked accessibilityHidden(true) throughout so VoiceOver skips them.
Voice Control
Fully supported.
All interactive controls have visible text labels that Voice Control can match. Key custom accessibility actions include:
| Screen |
Control |
Action |
| Scanner |
Camera view |
Toggle Scanning (pause/resume) |
| Scanner |
Primary action button |
Labeled with current state |
| Anatomy |
Orbit controls |
Rotate left, Rotate right, etc. |
| Exercise |
Completion toggle |
Mark set complete / incomplete |
| Exercise |
Add set/split |
Add Set or Add Split |
Larger Text (Dynamic Type)
Fully supported.
- All user-facing text uses semantic fonts (
.title, .headline, .body, .subheadline, .caption).
- Hard-coded icon sizes and spacing values use
@ScaledMetric so they scale proportionally with the user’s preferred text size.
- Layouts use flexible stacks and spacers to reflow at the largest accessibility text sizes.
Dark Interface
Fully supported.
- All colors are defined using trait-adaptive resolvers that adapt to both Light and Dark appearances.
- Surface colors use semantic tokens rather than hard-coded values.
- Backgrounds use material styles throughout for consistent depth and readability across appearances.
Sufficient Contrast
Fully supported.
When the user enables Increase Contrast, every brand and semantic color shifts to a higher-contrast variant:
- All foreground tokens guarantee a minimum 4.5:1 contrast ratio against their intended background surfaces (WCAG 2.1 AA).
- High-contrast variants maintain 5.0:1 or higher.
- This applies to brand colors, form score colors, scanner overlays, phase indicators, action colors, and feature accents.
Differentiate Without Color
Fully supported.
Anywhere color is the primary differentiator, a secondary visual cue (icon or shape change) is present:
- Body detection indicator — uses different SF Symbols in addition to green/red color changes.
- Alignment guide — displays a checkmark icon alongside text, providing a shape cue in addition to the green color indicator.
- All other color-coded elements (form score badges, phase badges, set completion toggles) already use text labels, distinct icons, or positional changes as secondary cues.
Reduce Motion
Fully supported.
Every animation in the app respects the Reduce Motion accessibility setting. When enabled:
- Spring and easing animations are replaced with fast cross-fades.
- Scanner scan line animations are hidden entirely; state transitions use instant cuts.
- Pulsing, shimmer, and entrance animations are suppressed.
- 3D viewer orbit control animations use reduced-motion alternatives.
Closed Captions
Not applicable.
FormFactor contains no pre-recorded video or audio content that requires captioning.
Audio Descriptions
Not applicable.
FormFactor contains no video content that requires audio descriptions.
Spoken Coaching (Audio Feedback)
FormFactor provides a full spoken coaching system so users can receive form feedback without looking at the screen:
- Real-time spoken corrections during exercise
- Rep completion announcements
- Alignment guidance
- Session state changes
- Configurable via Settings: audio on/off, positive feedback on/off, coaching intensity (quiet/balanced/talkative)
This ensures the app is fully usable for users who cannot see the screen during exercise.
If you have questions or feedback about FormFactor’s accessibility, please contact us at arieltyson30190@gmail.com.