Accessibility
Choiceworks was built to make the world accessible to children, so accessibility is not a checkbox here, it is the product. This page tells you plainly what the apps support today, what they don't yet, and what's being built, and it includes our formal conformance reports for all three apps, iOS and Android, ready for school district procurement.
What Choiceworks for iOS supports today
Full VoiceOver support on boards, schedules, timers, and the Feelings Scale, built so a blind or low-vision parent, teacher, or child can use the app, not just open it. Menus, timers, and schedules follow the system text-size setting. No flashing content anywhere. No time limits. Color never carries meaning alone. Recorded human voice on every button. Celebrations and transitions honor the system Reduce Motion setting. And on the data side: no accounts, no ads, no trackers, no data collection.
What we're honest about
The sample videos do not yet have captions. Captions drawn onto board tiles do not yet scale with the system text size (the rest of the app already does). Some edit-mode prompts fall short of our contrast standard and are on the remediation list. There is no hardware-keyboard layer. As these ship, this page and the report below will be updated, we would rather show you an honest report than a perfect-looking one.
Questions from your district
Write to info@beevisual.com and the founder will answer directly. If your procurement process needs this report as a standalone document, print this page to PDF, it is formatted for it.
Accessibility Conformance Report: Choiceworks for iOS
Table 1: Success Criteria, Level A
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content | Partially Supports | All primary surfaces are labeled for VoiceOver: board tiles, schedule cells (including completion state), the image picker, and timers. Some editor and settings screens rely on default system labeling. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Partially Supports | Every picture saved in the editor must have a text caption, so recorded audio is paired with on-screen text and an image; a small number of items created in older versions may lack a caption. Bundled sample videos (some silent, some with sound) are attached to buttons with a text label and recorded voice, but the videos themselves have no full text alternative. |
| 1.2.2 Captions (Prerecorded) | Does Not Support | Bundled sample videos do not include captions. Video content is optional and always paired with a text-labeled, voice-labeled board button. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Does Not Support | Sample videos do not include audio description. Each video is attached to a board button whose text label and recorded voice describe its purpose. |
| 1.3.1 Info and Relationships | Partially Supports | Primary content structures (boards, schedules, timers) expose their roles and states to VoiceOver. Some editor screens use default labeling only. |
| 1.3.2 Meaningful Sequence | Partially Supports | VoiceOver reading order follows the visual and logical order on the primary board and schedule surfaces per code review; a full device swipe-through of every screen has not yet been logged, so this row is stated conservatively. |
| 1.3.3 Sensory Characteristics | Supports | Instructions do not rely solely on shape, size, or location; buttons carry text and recorded voice. |
| 1.4.1 Use of Color | Supports | Color is never the only carrier of meaning. The Feelings Scale announces its level in words to VoiceOver rather than relying on color alone. |
| 1.4.2 Audio Control | Supports | Sound plays only in response to user actions or a timer the user set. When a user-set timer expires, its alarm sounds and loops until dismissed; a Dismiss control is always presented (and the alarm self-limits if no screen can host the control), providing the required mechanism to stop the audio. |
| 2.1.1 Keyboard | Does Not Support | The app is touch-first and does not implement hardware-keyboard commands. Primary flows (boards, schedules, marking steps done, timers, reordering) are operable non-visually through VoiceOver, including custom actions where the touch interaction is a drag; some editor and settings screens rely on default system labeling. |
| 2.1.2 No Keyboard Trap | Not Applicable | The app implements no custom keyboard commands or focus handling (see 2.1.1). Text entry uses standard iOS text fields with system keyboard behavior; no author-implemented mechanism exists that could trap keyboard focus. |
| 2.1.4 Character Key Shortcuts | Not Applicable | No character-key shortcuts exist. |
| 2.2.1 Timing Adjustable | Supports | The app imposes no time limits. Task timers are optional, set by the user, and adjustable at any time. |
| 2.2.2 Pause, Stop, Hide | Supports | Nothing moves, blinks, or updates automatically except a running task timer, which the user can pause at any time by tapping it. Animations are brief (under one second) and user-triggered; the reward celebration and board transitions additionally honor the system Reduce Motion setting. |
| 2.3.1 Three Flashes or Below Threshold | Supports | No flashing content anywhere in the app; reward feedback uses a single gentle fade by design. |
| 2.4.1 Bypass Blocks | Not Applicable | Native app screens do not contain repeated blocks of content in the WCAG sense. |
| 2.4.2 Page Titled | Supports | Screens carry descriptive titles. |
| 2.4.3 Focus Order | Partially Supports | VoiceOver focus order is logical on primary surfaces; some editor screens follow default ordering. |
| 2.4.4 Link Purpose (In Context) | Supports | The few links present (support, guides) are descriptively labeled. |
| 2.5.1 Pointer Gestures | Supports | The app uses no multipoint or path-based gestures. All functionality operates with single taps or dragging movements; dragging movements are addressed under 2.5.7. Standard swipe-to-delete rows have a single-tap alternative via edit mode. |
| 2.5.2 Pointer Cancellation | Partially Supports | Actions trigger on touch-up using standard iOS semantics and can be cancelled by sliding away, with the possible exception of two momentary segmented controls on the timer sheet, which are under review and on the verification list. |
| 2.5.3 Label in Name | Partially Supports | Accessible names match or contain the visible text of controls in English. In the Spanish localization, a small number of settings controls currently carry English-only accessible names that do not contain the visible Spanish text; localization of these strings is planned. |
| 2.5.4 Motion Actuation | Supports | No feature requires device motion; decorative motion honors Reduce Motion. |
| 3.1.1 Language of Page | Supports | The product’s language (English or Spanish) follows the device language via standard iOS localization and is programmatically determinable by assistive technologies. A small number of untranslated strings are covered under 3.1.2. |
| 3.2.1 On Focus | Supports | Receiving focus does not trigger a change of context. |
| 3.2.2 On Input | Supports | Changing a setting does not cause unexpected context changes. |
| 3.3.1 Error Identification | Supports | Errors (such as a wrong passcode) are described in text alerts. |
| 3.3.2 Labels or Instructions | Partially Supports | Primary inputs are labeled; some editor fields rely on placeholder or default labeling. |
| 4.1.1 Parsing | Not Applicable | Obsolete in WCAG 2.2; not applicable to native software. |
| 4.1.2 Name, Role, Value | Partially Supports | Primary controls expose name, role, and state (including task-completion state and live timer values) to VoiceOver. Some editor screens rely on default exposure. |
| 4.1.3 Status Messages | Partially Supports | Timers announce remaining time to VoiceOver without moving focus; some status changes are not announced. |
Table 2: Success Criteria, Level AA
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | No live audio or video content. |
| 1.2.5 Audio Description (Prerecorded) | Does Not Support | Sample videos do not include audio description; see 1.2.3 remarks. |
| 1.3.4 Orientation | Partially Supports | iPad supports all four orientations. iPhone is portrait-only by design for this content. |
| 1.3.5 Identify Input Purpose | Not Applicable | The app collects no personal information about the user; there are no such input fields. |
| 1.4.3 Contrast (Minimum) | Partially Supports | Core reading text meets AA: tile captions render at 5.7:1 on white and primary buttons at 6.9:1 on the brand blue. Some white button text on the brand green and red meets AA only at large text sizes, and edit-mode placeholder prompts over colored tile backdrops can fall below 3:1. These edit-mode surfaces are on the remediation list. |
| 1.4.4 Resize Text | Partially Supports | Navigation, menus, timers, schedules, and editor text follow the system text-size setting (Dynamic Type), including accessibility sizes. Captions rendered into board-tile images do not yet scale; that caption text is available to VoiceOver and as recorded audio on every button. |
| 1.4.5 Images of Text | Partially Supports | Board tiles render their caption into the tile image for print/share fidelity; the same caption is exposed as real text to VoiceOver. |
| 1.4.10 Reflow | Not Applicable | Native layouts adapt to device size classes; the WCAG reflow criterion targets scrollable web content per WCAG2ICT. |
| 1.4.11 Non-text Contrast | Partially Supports | Primary controls use a contrast-checked palette (brand blue and olive both exceed 3:1 against their surroundings). Edit-mode placeholder tiles use a light dashed border and white prompt text over variable backdrops that can fall below 3:1, and the completion checkmark overlays user-chosen photos, so its contrast depends on the family’s own images. |
| 1.4.12 Text Spacing | Not Applicable | iOS provides no user text-spacing override for native apps; content has no spacing-sensitive layouts. |
| 1.4.13 Content on Hover or Focus | Not Applicable | No hover-triggered content. |
| 2.4.5 Multiple Ways | Not Applicable | Criterion applies to sets of web pages; the app has a single primary navigation structure. |
| 2.4.6 Headings and Labels | Supports | Screen titles and the labels provided are descriptive. Some editor controls rely on default system labeling; see 1.1.1 and 4.1.2 for coverage. |
| 2.4.7 Focus Visible | Partially Supports | VoiceOver focus indication is provided by the system and verified on primary surfaces. Full Keyboard Access has not been evaluated (see 2.1.1: no hardware-keyboard layer is implemented). |
| 2.4.11 Focus Not Obscured (Minimum) | Partially Supports | On primary surfaces, focused items remain fully visible. The full-screen Help overlay covers the board while the controls beneath it remain in the accessibility tree, so assistive-technology focus can land on items hidden behind it; scoping focus to that overlay is on the remediation list. |
| 2.5.7 Dragging Movements | Partially Supports | Making choices and playing any button are single-tap. Completing a schedule step (dragging the child’s picture to All Done) and reordering items require a dragging movement for touch users; single-tap equivalents are currently exposed to assistive technologies (VoiceOver/Switch Control custom actions such as “Mark done” and “Move earlier/later”), not as on-screen single-pointer controls. The drag-to-All-Done gesture is the product’s core teaching ritual. |
| 2.5.8 Target Size (Minimum) | Partially Supports | Primary targets (board buttons, tiles, schedule placards) are large by design (57–100pt). Timer and toolbar controls meet at least 44pt, exceeding the 24pt WCAG minimum. The edit-mode delete (X) control has an enlarged touch zone of roughly 30pt, meeting the 24pt minimum but not 44pt. Some dense editor controls have not been individually audited. |
| 3.1.2 Language of Parts | Partially Supports | See 3.1.1; some accessibility strings are English-only in the Spanish localization. |
| 3.2.3 Consistent Navigation | Supports | Navigation (gear menu, edit mode, back) is consistent across screens. |
| 3.2.4 Consistent Identification | Supports | Icons and controls with the same function are identified consistently. |
| 3.2.6 Consistent Help | Supports | Support contact is available in a consistent location (the Menu’s Help section), and the founder answers directly. |
| 3.3.3 Error Suggestion | Supports | Error alerts state what to do next (for example, passcode recovery via device authentication). |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Supports | Destructive actions (deleting boards, restoring samples) require explicit confirmation. |
| 3.3.7 Redundant Entry | Supports | Within any process, the app never asks for previously entered information again, with one exception: confirming a newly chosen Settings passcode by typing it twice, which is essential to security and permitted under this criterion’s exception. |
| 3.3.8 Accessible Authentication (Minimum) | Supports | No user accounts exist. The optional parental editing passcode can be reset via the device's own authentication (passcode/Face ID). |
Accessibility Conformance Report: Choiceworks Calendar for iOS
Table 1: Success Criteria, Level A
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content | Partially Supports | Picture events, calendar day cells, and every icon-only toolbar button we checked carry VoiceOver labels, and decorative artwork is marked so it is not spoken. The exception is the optional Help overlays, which are full-screen images with the instructions baked into the picture, so VoiceOver hears only "Help" and "Double tap to dismiss." Family-added photos are named by the caption the parent types, which the editor requires. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Supports | The audio the app ships is one short recording per stock activity that speaks the same word printed on the picture, so the visible caption is the text equivalent, and the read-aloud feature only speaks text already on screen. Recordings a parent makes themselves are represented by the caption the editor requires; the app cannot verify a home recording says more than its caption. |
| 1.2.2 Captions (Prerecorded) | Not Applicable | The app ships no prerecorded video or synchronized media of its own. Families can attach their own video clip to an activity; it plays in the standard system player, which will show captions only if the clip already carries them, and the app has no way to add captions to a home video. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Not Applicable | No prerecorded synchronized media ships with the app, so there is nothing of ours to describe. Home videos attached by a family play in the system player with no audio-description mechanism, which is a limitation worth knowing if a family relies on described video. |
| 1.3.1 Info and Relationships | Partially Supports | Settings switches are individually labeled, and states like done, crossed off, and selected are exposed through traits and values rather than visuals alone. Gaps remain: the heading trait is used only on the What's New screen, the button editor's caption field relies on its placeholder instead of a persistent label, and an event's color frame, which tells a sighted user whose event it is, is not carried in any VoiceOver label. |
| 1.3.2 Meaningful Sequence | Supports | The day schedule and all settings screens are standard table views, so VoiceOver reads them in list order, the month grid is built day by day in calendar order, and the one custom header container sets its element order explicitly. A quick on-device pass after dragging an event to a new spot would confirm the schedule re-reads in the new order; the code rebuilds it from the sorted data, so we expect it does. |
| 1.3.3 Sensory Characteristics | Partially Supports | Instructions built into the interface name actions plainly, VoiceOver hints say things like "Double tap to mark as done," and every color in the color menu is named in text. The optional Help overlays are the gap: they teach the app with arrows pointing at screen positions and one instruction that says "yellow box indicates selected day," and there is no text version of that guidance. |
| 1.4.1 Use of Color | Partially Supports | Completed events get a checkmark overlay, not just a color change, and the color pickers name each color for VoiceOver. But the per-child and per-event color coding itself is carried only by the colored matte or border on the tile; nothing on the tile states the color or the person in text or in the VoiceOver label, so a user who cannot see the color cannot tell whose event it is. |
| 1.4.2 Audio Control | Supports | Event audio plays only when the user taps a picture, the read-schedule-aloud toolbar button toggles to a Stop control, and Settings has a calendar-audio on/off switch. The event alarm loops until dismissed, and the code guarantees a stop path: the Dismiss action silences it, and if the alert cannot be presented the player is stopped outright. |
| 2.1.1 Keyboard | Partially Supports | The app defines no hardware keyboard commands of its own; operation with iOS Full Keyboard Access rides on the accessibility layer, which most screens support, including a non-drag activate action that marks a day-view activity done. Reordering calendars and reordering day events are drag-only with no keyboard path. An on-device Full Keyboard Access pass would settle the remaining custom-drawn screens. |
| 2.1.2 No Keyboard Trap | Supports | We found no custom key or focus handling anywhere that could hold keyboard focus; screens use standard UIKit navigation with visible Done, Cancel, and Save buttons. Two sheets deliberately block swipe-to-dismiss, the event editor always and the recording sheet while the microphone is live, but both still exit through their own visible buttons, and the recording sheet's block is lifted the moment recording stops. |
| 2.1.4 Character Key Shortcuts | Not Applicable | The app implements no keyboard shortcuts at all, character-key or otherwise, so there is nothing to misfire or remap. |
| 2.2.1 Timing Adjustable | Supports | The app sets no session or response time limits; dialogs, passcode prompts, and the alarm all wait for the user. The timed features are the visual activity timer and the day countdown, both started and set by the adult and both stoppable, plus a small Undo pill that hides itself about five seconds after an activity is marked done. Nothing is lost with the pill, a done mark can be reversed at any time by sliding the card back or, for VoiceOver users, a double tap. |
| 2.2.2 Pause, Stop, Hide | Supports | The auto-advancing day countdown shows Pause and Stop controls, and the pacing code re-checks stop and pause before every advance. Decorative animations run well under five seconds and are skipped entirely when Reduce Motion is on; the sparkle reward effect is hard-disabled in this release. The timer display is a real-time essential exception. |
| 2.3.1 Three Flashes or Below Threshold | Supports | No flashing content exists in the code; animations are single fades and moves, and the one particle effect (sparkles) is disabled in this release. A project-wide search for flash or blink behavior found only the standard scroll-indicator flash. |
| 2.4.1 Bypass Blocks | Supports | Screens are single-purpose native views with at most a navigation bar of one to three buttons before the main content, so there are no large repeated blocks to skip. VoiceOver element navigation reaches the schedule or grid content directly. |
| 2.4.2 Page Titled | Supports | Each screen sets a descriptive localized title or title view: the day view shows the full date, the month view shows the family photo beside the calendar's name on iPhone and beside the month being shown on iPad, and editors name their task. The full-screen timer has no title bar and identifies itself by its content. |
| 2.4.3 Focus Order | Supports | Screens are standard UIKit tables and stacks that read in layout order, the month grid is built header first then dates in calendar order, and the one custom composite control declares an explicit VoiceOver element order. A device VoiceOver pass across the month grid would confirm the reading sequence end to end. |
| 2.4.4 Link Purpose (In Context) | Supports | The only links are table rows whose labels state the purpose: Email and Website on the About screen show the actual address alongside, and the User Guides row in the settings menu is named for exactly where it goes. There are no bare or ambiguous links. |
| 2.5.1 Pointer Gestures | Supports | Every gesture in the app is a single-finger tap, long press, or drag; there are no multipoint gestures (no pinch or rotation) and no direction-dependent swipes. The drags, where only the drop point matters, are assessed under 2.5.7, and month navigation uses plain previous/next buttons. |
| 2.5.2 Pointer Cancellation | Partially Supports | Nearly all controls fire on touch-up, deletes are gated behind confirmation dialogs, and an interrupted drag deliberately never commits a Done state. Two month-grid controls still act on touch-down with no way to slide off and abort: the "more events" badge and the day-tile audio button. |
| 2.5.3 Label in Name | Partially Supports | Most controls are picture buttons with no visible text, and where visible text exists the spoken name is that text: activity cards and picker cells announce their printed caption. The exception is the edit-mode rename controls over the schedule headers, named "Edit schedule title" and "Edit all-done title", which do not include the customized header text a Voice Control user actually sees. |
| 2.5.4 Motion Actuation | Not Applicable | Nothing in the app is operated by shaking or tilting the device. The only "shake" in the code is a feedback animation the app plays on screen, not motion input. |
| 3.1.1 Language of Page | Supports | The app declares English as its development language and ships full English and Spanish localizations, so iOS reports the running language to VoiceOver and it speaks in the matching voice. All interface text goes through NSLocalizedString. |
| 3.2.1 On Focus | Supports | Receiving focus never triggers a change of context; the app uses standard UIKit controls and defines no begin-editing or focus handlers at all. Actions run only on tap or explicit activation. |
| 3.2.2 On Input | Partially Supports | Most settings apply in place, such as Text Size and the audio switches. But flipping the Passcode or Editing switch immediately opens a passcode dialog, a change of context on changing a setting that is not advised beforehand, though cancelling reverts the switch cleanly. |
| 3.3.1 Error Identification | Supports | Errors are described in plain text in modal alerts, which VoiceOver reads: a wrong or too-short passcode says exactly what was wrong, saving an image without a caption is blocked with an explanation, and failed imports say the file could not be opened. No error is signaled by color or sound alone. |
| 3.3.2 Labels or Instructions | Partially Supports | Settings switches and editor rows carry visible text labels plus explicit accessibility labels, and event switches include hints explaining what they do. The image caption field, however, is labeled only by its placeholder "Caption (Required)", which disappears once typing begins, and the passcode entry fields rely on the alert title plus a placeholder. |
| 4.1.1 Parsing | Not Applicable | This criterion was removed in WCAG 2.2 and, per WCAG2ICT, does not apply to compiled native software with no markup to parse. |
| 4.1.2 Name, Role, Value | Partially Supports | The core child-facing controls expose name, role, and state: month-grid days carry the date, event summary, button trait, and selected or crossed-off state; day-view event buttons speak their name and done state; timers and import progress report live values; settings and event switches are labeled. Coverage is hand-applied per control though, and some editor screens rely on default system labeling, including the caption field and a few utility screens with no accessibility code at all, so a full VoiceOver device pass is the honest completeness check. |
Table 2: Success Criteria, Level AA
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | The app has no live audio or video of any kind, no streaming, no calls, no broadcasts. |
| 1.2.5 Audio Description (Prerecorded) | Not Applicable | Same situation as 1.2.3, the product ships no video, so there is no prerecorded synchronized media requiring audio description. User-attached home videos have no description support. |
| 1.3.4 Orientation | Supports | The app runs in both portrait and landscape on iPhone and iPad and does not lock orientation; layouts re-flow on rotation and the help images ship in portrait and landscape variants. The only orientation override in code explicitly allows all orientations. |
| 1.3.5 Identify Input Purpose | Partially Supports | Almost all text inputs collect schedule content, the child's name, event captions, so they are outside this criterion's list of user-information purposes. The exception is the parent passcode: its alert fields are flagged as secure entry but set no textContentType, so the password purpose is not programmatically identified to assistive technology or autofill. |
| 1.4.3 Contrast (Minimum) | Partially Supports | Most core text passes (white on the brand blue is about 6.8:1, the dark warm text on light backgrounds passes, and the weekday header and Record audio button were re-checked and pass, the app's olive was deliberately deepened to #4A5D1E for exactly this reason). Known failures: the Done button on the Add and Edit Calendar screens uses the older olive #6B8E23 on the warm toolbar (about 2.4:1), and the yellow countdown number sits over user photos where contrast cannot be guaranteed. A device sweep with a contrast analyzer would settle the full inventory. |
| 1.4.4 Resize Text | Partially Supports | A Settings Text Size control (Large / Larger / Largest) enlarges the month-grid day numbers from 18pt to 30pt, about 167 percent, and a handful of status and empty-state labels follow the system Dynamic Type setting. Everything else, including event captions, menus, and the day schedule, uses fixed ArialRoundedMTBold sizes that do not respond to the system text size, so the app does not reach 200 percent for most text. |
| 1.4.5 Images of Text | Does Not Support | The core schedule content and the help system both use images of text. Picture-button captions are drawn into bitmaps (the stock library ships as caption-baked PNGs, and custom captions are rendered into an image), and the three help screens are full-screen PNG screenshots of instructions with no text equivalent beyond a Help label. |
| 1.4.10 Reflow | Partially Supports | Screens are built with size-class-responsive layout, lists and the day schedule scroll vertically only, and no horizontally scrolling content region was found; the month grid needs two-dimensional layout by its nature, like a data table. Because most text cannot be enlarged (see 1.4.4), reflow under enlarged text cannot really be exercised, and behavior at the smallest iPhone width has not been verified on a device. |
| 1.4.11 Non-text Contrast | Partially Supports | Several state indicators sit on user-chosen photos where 3:1 cannot be guaranteed: the completion checkmark is overlaid on the event picture, and the person color ring and event color matte carry meaning against arbitrary photo content. Month-grid date cell borders are #DAE1E6 on light backgrounds, well under 3:1, though the filled cell backgrounds do the real work. Drawn controls like the olive-outlined Play button pass with room to spare (its deepened olive is about 4.5:1 against the sheet behind it). |
| 1.4.12 Text Spacing | Not Applicable | Per WCAG2ICT this criterion applies where a mechanism exists to change text spacing; iOS provides no system-wide text-spacing override and the app offers none, so there is no spacing adaptation to test against. Where text can vary in length, labels shrink-to-fit rather than clip, which limits loss of content. |
| 1.4.13 Content on Hover or Focus | Not Applicable | No content appears on pointer hover or keyboard focus; the app registers no hover or pointer interactions. The help overlay appears only on an explicit tap of the Help button and is dismissible by a single tap, and it is marked modal for VoiceOver. |
| 2.4.5 Multiple Ways | Not Applicable | Per WCAG2ICT this criterion applies to sets of software programs, and Choiceworks Calendar is a single program. Within the app a given day is still reachable more than one way, by tapping it in the month grid or paging day to day. |
| 2.4.6 Headings and Labels | Supports | Settings rows and screens carry plain descriptive labels such as Passcode, Text Size, and iCloud Sync & Backup, calendar day cells describe their date and events, and the What's New screen marks its headings for VoiceOver. Section headers use the standard table mechanism. |
| 2.4.7 Focus Visible | Supports | The app relies on the system focus indicators, the VoiceOver cursor and the Full Keyboard Access ring, and nothing in the code suppresses or replaces them. Visibility of the ring on the custom month grid buttons has not been device-verified with an external keyboard. |
| 2.4.11 Focus Not Obscured (Minimum) | Partially Supports | The month view help overlay is a full-screen image pinned over the entire navigation view with no focus management, so a control holding focus underneath is entirely hidden while it is up. The day view help overlay handles this correctly by declaring itself modal. A device test with Full Keyboard Access would settle whether focus can actually sit beneath the month overlay. |
| 2.5.7 Dragging Movements | Does Not Support | Marking an activity done is a slide of the picture card, and reordering calendars or day events is also drag-only; a tap on the card plays its audio but cannot complete it, so a touch user who cannot drag has no alternative for any of these. VoiceOver, Switch Control, and Full Keyboard Access users do get a non-drag activate action on the cards, but that does not cover pointer users without assistive tech. |
| 2.5.8 Target Size (Minimum) | Supports | The smallest touch targets set in code measure 28 by 28 points (calendar delete badge) and a 29-point minimum for the tile delete control, which is padded toward 44 points; month navigation arrows are 48 points wide. A scripted scan of all 18 Interface Builder layouts found no button smaller than 24 points, and iOS points are at least as large as CSS pixels. |
| 3.1.2 Language of Parts | Supports | All app-supplied text is in a single language per locale (English or Spanish), so no shipped passage is in a different language than the interface. There is no accessibilityLanguage tagging anywhere, so a caption a family types in another language is read with the device voice; recorded picture audio is the family's own recording and plays back exactly as recorded. |
| 3.2.3 Consistent Navigation | Not Applicable | Per WCAG2ICT this criterion applies to sets of software programs, and this is a single program. Within the app, the toolbar, Menu access, and help button keep the same placement across the month and day views. |
| 3.2.4 Consistent Identification | Not Applicable | Per WCAG2ICT this criterion applies to sets of software programs, and this is a single program. Within the app the same localized strings are reused for recurring functions, so Done, Cancel, Pause, and Stop read the same everywhere they appear. |
| 3.2.6 Consistent Help | Not Applicable | Per WCAG2ICT this criterion applies to sets of software programs, and this is a single program. Within the app a ? help button is available on both main views and support contact details, email and website, live on the About screen. |
| 3.3.3 Error Suggestion | Supports | Where a correction is known the alert states it: a short passcode says it needs at least 4 digits, a missing caption says to provide one in order to save, and a bad import URL says to check the URL. A few system-failure alerts (such as a video that could not be saved) state only what happened, because no specific correction is known. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Supports | The app has no legal or financial transactions, and every action that deletes or replaces family data asks first: deleting events offers a "just this day" versus "all occurrences" choice, deleting images and passcode resets use explicit confirms, and importing a calendar that would replace the current one requires confirming "Replace". Marking an event done can be reversed with an on-screen Undo button. |
| 3.3.7 Redundant Entry | Supports | No process in the app asks for the same information twice. The one re-entry that exists, confirming a new passcode when setting it, is a security confirmation and falls under the criterion's exception. |
| 3.3.8 Accessible Authentication (Minimum) | Partially Supports | The only authentication is a 4-plus digit editing passcode, which is a memorized-secret entry. The code never blocks pasting into the field, and "Forgot Passcode?" gives a way back in without recall via device Face ID, Touch ID, or device passcode; biometric unlock is deliberately not offered for the lock itself because on a child's own device the child's enrolled Face ID would open the very gate meant to keep them out. A device test should confirm paste and password-manager fill work in the secure number-pad field before claiming full support. |
| 4.1.3 Status Messages | Partially Supports | The statuses that matter most to a child's flow are announced to VoiceOver without moving focus: marking an event done or not done, a timer finishing, the Undo button appearing, and import progress via a live value. Other visual status changes, such as the sync state text in the settings menu, are not announced. |
Accessibility Conformance Report: Choiceworks for Android
What Choiceworks for Android supports today
A TalkBack user can complete a schedule task: every task card announces its done state and offers a spoken "Mark done" action (new in 2.0). Every board picture carries a spoken label, and the Feelings Scale speaks each level by name with its position and selected state. All interface text follows the system font-size setting. Nothing flashes, nothing auto-plays, and every timer is started, paused, and removed by the user. Recorded human voice on every button. And on the data side: no accounts, no ads, no trackers, no data collection.
What we're honest about on Android
The words on the stock picture cards are part of the artwork, so they do not resize with the system font setting (captions on your own photos do). Completing a task by touch is a swipe with no on-screen tap alternative yet, the spoken alternative exists only through TalkBack. A handful of small labels sit on colors that fall short of our contrast standard and are itemized below for remediation. The app is English-only for now, with Spanish planned for the next major release. As these ship, this report will be updated.
Table 1: Success Criteria, Level A
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content | Partially Supports | Every board content picture has a spoken text alternative: schedule task cards, reward cards, waiting and feelings cards, Feelings Scale slots (with selected state), and board grid tiles, verified across all 24 image sites in the code. Decorative images beside visible text are correctly silenced. One informative image is not yet labeled: the small profile photo on a board tile that shows whose board it is, so in the all-profiles view TalkBack does not hear the owner. On the remediation list. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Partially Supports | Every picture saved in the editor requires a text caption, so recorded audio is paired with on-screen text and an image. The ten bundled sample videos are attached to buttons with a text label and recorded voice, but the videos themselves have no full text alternative. |
| 1.2.2 Captions (Prerecorded) | Does Not Support | Bundled sample videos do not include captions. Video content is optional and always paired with a text-labeled, voice-labeled board button. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Does Not Support | Sample videos do not include audio description. Each video is attached to a board button whose text label and recorded voice describe its purpose. |
| 1.3.1 Info and Relationships | Partially Supports | Settings toggles merge their label and switch into one control with a real switch role; board-type choices use real radio buttons; task cards expose completed state programmatically; feelings-history rows read as one item with the level spoken by name. Gaps: section headers are visual only (no heading semantics), passcode-entry progress dots are not announced, and custom dialogs do not yet set a spoken pane title. |
| 1.3.2 Meaningful Sequence | Supports | Reading order matches visual and logical order, verified across every mechanism that could split them; schedule tasks read in true sequence 1..N even though the board renders as two visual columns. |
| 1.3.3 Sensory Characteristics | Supports | Instructions do not rely solely on shape, size, or location; buttons carry text and recorded voice. |
| 1.4.1 Use of Color | Supports | On the Feelings Scale, each level speaks its name and position, shows its own picture, and selection is marked by a border rather than a color shift; in the history view the level is conveyed by position and spoken name, never color alone. |
| 1.4.2 Audio Control | Supports | No audio plays on screen entry. Read-aloud runs only from an explicit Play control that becomes Stop while playing. Videos never autoplay and close with a labeled button. The timer chime is one-shot, dismissible, and silenced on leaving the board. A global Board Audio switch is honored by every speech path. |
| 2.1.1 Keyboard | Partially Supports | Every tap control is a standard component that a hardware keyboard can focus and activate. The two drag interactions (swipe-to-complete, drag-to-reorder) have no keyboard path yet; their spoken alternatives require TalkBack. |
| 2.2.1 Timing Adjustable | Partially Supports | All visual timers are user-created, user-started, pausable, and removable; nothing in the product expires on its own. A small number of status messages (import/backup results) use timed system toasts that cannot be extended within the app on Android 7-11; Android 12+ users can extend them system-wide. |
| 2.2.2 Pause, Stop, Hide | Supports | Nothing moves, blinks, or updates automatically. Timers run only after a user tap and pause with the same control; read-aloud is stoppable mid-play. When a timer ends, no content is lost, the app shows a dismissible done dialog. |
| 2.3.1 Three Flashes or Below Threshold | Supports | No repeating or flashing animation exists anywhere; every animation is a short one-shot fade or scale. Sample videos are static-camera live-action modeling clips that play once in a dialog. |
| 2.5.1 Pointer Gestures | Does Not Support | Two functions are path-based gestures: swiping a task to complete it and dragging to reorder tasks in edit mode. Both have spoken alternatives ("Mark done", "Move up/down"), but those require TalkBack; there is no on-screen single-tap alternative yet. All other interaction app-wide is single-tap. A visible tap alternative is on the remediation list. |
| 2.5.3 Label in Name | Supports | No control's spoken name omits its visible text label, verified across all 98 labeled elements; controls whose visible label is a symbol carry a descriptive spoken name. |
| 3.1.1 Language of Page | Does Not Support | The interface language (English) is not yet programmatically declared, so on a device set to another language a screen reader may use the wrong voice for interface text. The app's own spoken board audio always pronounces labels with an English voice. Locale declaration ships with the Spanish release. |
| 3.2.1 On Focus / 3.2.2 On Input | Supports | No control changes context on focus or input; navigation happens only on explicit activation. |
| 3.2.3 Consistent Navigation | Supports | The back/close control always occupies the leading top-left position; repeated board actions keep one relative order (Play, Share, Reset, Edit) on every board bar. |
| 3.3.1 Error Identification | Partially Supports | Errors are described in text, never color or sound alone: wrong passcode shows persistent inline text; restore and backup failures state exactly what happened and that existing data is untouched. Some outcomes are announced via transient system toasts, and a failed fingerprint prompt currently shows no in-app error text. |
| 4.1.2 Name, Role, Value | Partially Supports | A TalkBack user can complete a schedule task: cards expose "Completed / Not completed" state and a "Mark done" action (new in 2.0). Switches, radio buttons, timers, and remove controls carry correct roles, names, and states. Gaps: a few controls announce ambiguous or code-style names, two board cards expose an extra unnamed tappable region, and the caption field loses its spoken name once text is typed. All on the remediation list. |
| 4.1.3 Status Messages | Partially Supports | The passcode-reset countdown announces politely as it updates; timer completion raises a spoken dialog; system toasts are announced automatically. The inline wrong-passcode error and task-completion confirmation are not yet announced without refocusing. |
Table 2: Success Criteria, Level AA
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.3.4 Orientation | Partially Supports | Tablets and Chromebooks work in both orientations. Phones are currently locked to portrait because the board layout does not yet reflow in phone landscape; on the remediation list. |
| 1.4.3 Contrast (Minimum) | Partially Supports | Core child-facing board text passes: black and white text on the main board fields measures 6.2:1 to 21:1, and the 2.0 release deepened three board colors so their large bold labels clear the large-text bar. Known failures are itemized for remediation: the white START label on the timer green (1.8:1) is the worst, along with several small edit-mode chips and one board's section labels that missed the 2.0 deepening pass. |
| 1.4.4 Resize Text | Partially Supports | Every piece of interface text uses scalable units (127 of 127 sites verified), so the whole app follows the system font-size setting. Exceptions: the words on stock picture cards are part of the artwork and do not scale; captions on your own photos scale but may shorten with an ellipsis at 200%; two small controls clip at 200%. |
| 1.4.5 Images of Text | Does Not Support | The words on stock picture cards are rendered inside the card artwork, the image-plus-word card is the visual-support methodology the product teaches, but as shipped those words are images of text. Captions on user-added photos are real text. |
| 1.4.10 Reflow | Partially Supports | All content scrolls in one direction only, with no horizontal scrolling anywhere and fixed-size elements clamping to the screen width. Phone landscape does not yet reflow (see 1.3.4), and narrow-width behavior of the board top bar has not been device-verified. |
| 1.4.11 Non-text Contrast | Partially Supports | Primary indicators pass: olive toggles (3.8:1) and blue accents (4:1) on white. Known failures itemized for remediation: the yellow border marking custom cards (1.5:1 on white), the timer progress arc against its track (1.8:1), and low-alpha placeholder markers. |
| 1.4.12 Text Spacing | Not Applicable | Native application; this criterion applies to markup content where users can override spacing. |
| 2.4.5 Multiple Ways | Not Applicable | Per WCAG2ICT this criterion applies to sets of software programs; within the app, boards are reachable from the grid, the list view, and per-profile views. |
| 2.4.6 Headings and Labels | Supports | Settings rows and screens carry plain descriptive labels; every editor field is labeled in view. |
| 2.4.7 Focus Visible | Supports | Standard component focus indication is unmodified throughout. |
| 2.5.7 Dragging Movements | Does Not Support | Task completion and task reorder are drag movements whose single-pointer alternatives currently exist only through TalkBack. A visible tap alternative is on the remediation list; the underlying action is already built, so this is an interface addition, not a redesign. |
| 2.5.8 Target Size (Minimum) | Partially Supports | The platform's 48dp minimum touch target is in force app-wide, and small visual buttons deliberately keep 48dp touch zones. Remove badges are 32dp by design, paired with confirmation dialogs (a data-safety decision documented in code). Six small edit-mode timer chips (~20dp) rely on the spacing exception and are queued for enlargement. |
| 3.2.4 Consistent Identification | Partially Supports | Board actions are identified consistently across all boards. The same leave-screen function is labeled "Back" on board screens but "Close" on Settings and the Image Library; queued for unification. |
| 3.3.3 Error Suggestion / 3.3.4 Error Prevention | Supports | Destructive actions (delete profile, delete board, remove card, restore) all require explicit confirmation that states what will happen; restore failures leave existing data untouched and say so. |
| 4.1.3 Status Messages (AA aspects) | Partially Supports | See Table 1 row; the countdown banner is a correct polite live region, other inline status text is queued for the same treatment. |
These Accessibility Conformance Reports are provided by Bee Visual, LLC based on internal source-code review and assistive-technology testing of the versions stated above. Page last updated July 10, 2026. It reflects the product honestly, including areas still in development. VPAT® is a registered trademark of the Information Technology Industry Council (ITI). Choiceworks® and Bee Visual® are registered trademarks of Bee Visual, LLC.