Last updated · May 7, 2026
Accessibility.
Contents
KidTag is built on the iOS accessibility stack and inherits most of what makes iPhone apps accessible by default. This page lays out, plainly, what we support today, what doesn't apply to a coordination app like ours, and where we still have work to do. If something here doesn't match your experience, that's a bug — email [email protected] and we'll fix it.
Accessibility at a glance.
What KidTag supports today:
- VoiceOver and Voice Control across the app's primary surfaces.
- Larger Text via iOS Dynamic Type, plus a KidTag-specific sans-serif toggle for users who prefer simpler letterforms.
- Dark Interface — the app follows your iOS system Dark Mode setting.
- Differentiate Without Color Alone — color is always paired with a text label or icon.
- Sufficient Contrast — the brand pair (deep navy on warm cream) clears WCAG AA.
- Reduced Motion — animated headers honor the iOS Reduce Motion setting.
What doesn't apply: KidTag has no audio or video content, so Captions and Audio Descriptions are not relevant. Notifications and tag events are surfaced as text.
Vision.
VoiceOver. KidTag's interactive surfaces are labeled for VoiceOver. Buttons, switches, links, and avatars expose accessibility labels and roles, so VoiceOver announces them with the right meaning rather than reading raw glyphs. Standard React Native primitives expose accessibility traits by default; we add explicit labels on icon-only buttons, kid avatars, and any custom Pressable that needs disambiguation.
Voice Control. Voice Control reads from the same accessibility-label graph VoiceOver uses, so saying "Tap Tag In" or "Tap Settings" works wherever those labels appear. If you find a control Voice Control can't reach by name, that's a missing label on our side — please report it.
Larger Text (Dynamic Type). KidTag honors the iOS Dynamic Type slider (Settings → Display & Brightness → Text Size, or Settings → Accessibility → Display & Text Size → Larger Text). Typography flows through a single resolver so a size change in iOS reflows the app without clipping or layout breakage. A handful of headline rows are capped at a maximum scale to prevent the title from pushing the row's primary action off-screen — the body text underneath still scales freely.
Dark Interface. KidTag follows your iOS system appearance — when iOS is in Dark Mode, the app renders its dark theme; when iOS is in Light Mode, it renders the cream paper theme. There is no separate in-app toggle by design; the iOS system setting is the single source of truth.
Differentiate Without Color Alone. Wherever a color carries meaning in KidTag, it is paired with a text label or an icon:
- Kid avatars use a per-kid color, but always render alongside the kid's first name — identification never depends on color alone.
- Tag status ("at home" vs. "away") pairs the color with the explicit text label on every card.
- Plus-only surfaces are marked with both a gold accent and a lock icon plus a "Plus" label.
- Active recalls add a clay accent ring around the kid's avatar, but the in-card text still spells out the recall state.
Sufficient Contrast. The brand pair — ink #141B2D on paper #F4EEE3 — passes WCAG AA at all body text sizes. Secondary text and rules use tokens that maintain at least AA contrast against their surfaces. The Plus accent (gold on navy) is reserved for chips and badges, never for body copy.
Motor and physical.
Voice Control. See above — every labeled control is reachable by voice. Voice Control's number-overlay and grid modes also work, since they don't depend on our labeling.
Sufficient touch targets. Primary actions follow Apple's 44pt minimum tap target from the iOS Human Interface Guidelines. Tap surfaces that are visually smaller (whispered italic links, icon buttons) are bumped to 44pt via padding, minHeight, and hitSlop on the underlying Pressable, so the touchable area is at least the recommended size even when the visible affordance is light.
Predictable interactions. Sub-screens across KidTag use a single shared scaffold (a SubScreen primitive) so every back-button, page title, and scroll behavior sits in the same place. There are no gesture-only actions: anything you can swipe also has a tap-to-open path.
Hearing.
KidTag has no audio or video content, so iOS's Captions and Audio Descriptions accessibility categories don't apply. Tag events, recalls, connection invites, and household activity are all surfaced as text — you don't need to hear anything to use the app. Notifications are visual and tactile (banners, badges, and the standard iOS notification haptics); none rely on a sound being audible.
Cognitive.
Reduced Motion. KidTag honors the iOS Reduce Motion setting. The Dashboard's header animation collapses into a static layout when Reduce Motion is on, and a few state-change pulses (e.g., the active-recall ring) skip their animation in that mode. Other screens are static by default and need no special handling.
Consistent layout. Every sub-screen uses the same back-button, title, and scroll structure (the SubScreen primitive). The same action lives in the same place across the app, so muscle memory carries between screens.
Sans-serif toggle. KidTag's display type is an editorial italic serif. For users who find italic letterforms harder to read — including users with dyslexia or low vision — Settings → Accessibility offers a "Use plain sans-serif fonts" toggle that replaces the display fonts with an even-stroke sans-serif everywhere they appear. The toggle is per-account and is preserved across sign-ins.
Always-show Tag-In button. By default, the Dashboard's Tag-In button slides out of the way as you scroll. Settings → Accessibility includes an "Always show Tag-In button" toggle that pins it in place — useful if motion is distracting or if you'd rather have the primary action permanently within reach. This toggle is also enforced automatically when iOS Reduce Motion is on.
Built into KidTag.
Beyond the iOS-system accessibility surfaces, KidTag ships a small set of accessibility-shaped affordances of its own:
- Sans-serif toggle at Settings → Accessibility, with a live preview card so you can see the change before committing to it.
- Always-show Tag-In button toggle in the same screen, for users who prefer a stationary primary action.
- Per-kid color avatars paired with first-name labels, so identification works for color-blind users and for everyone reading from the lock screen.
- A single canonical typography pipeline (the
PageTitleprimitive and a shared font resolver) — every text surface routes through it, so toggling sans-serif or scaling Dynamic Type flows through the whole app instead of skipping a screen. - An open iPhone-text-size shortcut on the Accessibility screen that deep-links to iOS Settings → Display & Brightness, so the system slider is one tap away from the in-app toggle.
Reporting an issue.
If something is hard to use with VoiceOver, Voice Control, Dynamic Type, or any other assistive technology — that's a bug, not a feature request. Email [email protected] with subject "accessibility" and the following, where you can:
- Your iOS version (Settings → General → About → Software Version).
- Your KidTag version (Settings → About).
- Which assistive technology you were using (VoiceOver, Voice Control, Dynamic Type at a specific size, Reduce Motion, the sans-serif toggle, etc.).
- What you were trying to do, and what happened instead.
- A screenshot or screen recording, if you can capture one.
We treat accessibility regressions with the same priority as crashes — they block the next release until they're fixed.
What we're working on.
An honest list of where we still have work to do:
- Pre-launch accessibility sweep is best-effort, not exhaustive. Every surface we ship is built on labeled primitives, but we have not run a comprehensive third-party audit. If a specific screen or control is hard to use with assistive tech, please tell us — we will treat it as a regression.
- Plus-chip contrast verification. The gold-on-navy Plus accent is used on small chips and badges. We believe it clears AA at the sizes we use, but we have not formally measured every instance. If a chip looks low-contrast in your environment, that's a useful report.
- Voice Control coverage on transient surfaces. Modal sheets, bottom-of-screen toasts, and some recall-state controls are newer surfaces and may have label gaps. We add coverage as we find them.
- Captions and Audio Descriptions. Not applicable today (no audio/video). If we ever ship media, both will land at the same time.
Accessibility is part of the release checklist, not a separate project. Reported issues get the same priority as crashes — that's the standard we hold ourselves to. Questions or feedback: [email protected].