
Accessibility
Nzinga is for people speaking their own languages on the phones they already have: in sunlight, on slow networks, with any level of reading or eyesight.
The rules below are measured, and where the app falls short today the gap is listed.
Contrast
Ratios are computed with the WCAG 2 relative-luminance formula from the token values. Body text needs 4.5:1 (AA); large text (18pt, or 14pt bold) and the edges of controls need 3:1.
AAA 7:1 or more AA 4.5:1 or more Large or UI only 3:1 to 4.5:1 Fail under 3:1
App, Dark Theme (Default)
#F7F7FA on #0B0B10#F7F7FA on #16161D#A8A8B3 on #0B0B10#A8A8B3 on #16161D#C8FF2E on #0B0B10#19E0E6 on #0B0B10#FF6A1F on #0B0B10#FF2D7A on #0B0B10#7C5CFF on #0B0B10#707075 on #16161DApp, Light Theme
#0B0B10 on #F7F7FA#55555F on #F7F7FA#55555F on #FFFFFF#5C7A00 on #F7F7FA#7C5CFF on #F7F7FA#FF2D7A on #F7F7FA#0FA9AE on #F7F7FA#FF6A1F on #F7F7FA#C8FF2E on #F7F7FA#9D9D9F on #FFFFFFContent on Colour (Both Themes)
#C8FF2E#19E0E6#FF6A1F#FF2D7A#7C5CFFThis Site's Light Palette
#0B0B10 on #FFFFFF#0B0B10 on #F7F7FA#55555F on #FFFFFF#55555F on #F7F7FA#55555F on #ECECF1#5C7A00 on #FFFFFF#5C7A00 on #F7F7FA#0B0B10 on #C8FF2E#C8FF2E on #FFFFFF#85858E on #FFFFFF#FFFFFFIn dark mode the site uses the app's dark values: text 18.36, subtext 8.34 on the page and 8.17 on the sidebar.
accent already does for Volt, or keep these labels in the text colour with a coloured dot or icon. Input placeholders at 40% fail in light mode and pass only for large text in dark mode. Raise them to the subtext colour.Touch Targets
- Every tappable thing is at least 44 by 44 points. Buttons are 44pt tall (
py-3), and the Welcome pills match. - Small icons get a larger hit area: header icons are 28pt drawn with an 8pt
hitSlopon every side, which makes 44pt. - Choice rows are pressable across their full width, not only on the 24pt radio.
- Keep at least 8pt between separate targets, as the chip and action rows do (
gap-2).
Text Size
- All copy goes through
ThemedText, which follows the phone's text size setting up to 1.25 times (maxFontSizeMultiplier). Body text at 14pt grows to 17.5pt. - Layouts must hold at 1.25 times: titles wrap rather than truncate, rows grow in height, and nothing important sits in a fixed-height box.
- The cap protects layouts but limits people who set very large text. Review it with readers who use the largest sizes before launch.
Screen Readers
The app sets roles and labels on its controls: buttons, headers, radio groups for the four choices, switches, tabs, a timer and an adjustable playback position. Examples from the code:
- Every icon-only control has a label that says what it does, not what it shows: "Open menu", not "Three lines".
- Read order follows the screen: title, then content, then the footer action.
- Money is read as words the reader can say: "$0.42", never a bare "42".
Motion
- Motion confirms an action; it never carries information on its own. The live recording state also says "Recording" in words and shows a timer.
- When the phone asks for reduced motion, replace slides and flips with a plain fade or no animation, and stop the breathing record button.
Not built yet The app does not read the Reduce Motion setting today. In this site All transitions stop under prefers-reduced-motion.
Low Literacy and Low Bandwidth
Audio first
The product is speaking, not typing. The main action is one large button, ideas to record are short spoken-style prompts, and Record Well teaches in five one-line lessons.
Icons with words
Every icon comes with a word, every status is a word, and choice rows are one line with a short pay tag.
Small downloads
Audio stays on the phone; only small details are sent. Screens load a few small JSON answers. The spec plans low-bitrate Opus audio and uploads that can wait for Wi-Fi.
Works when the network does not
Every list has an error state with Try again. Recordings, progress and payout methods are kept on the phone, so nothing is lost when a request fails.
Colour-Blind Safe States
No state is shown by colour alone. Badges carry a word, timelines carry a check or a cross, and the selected choice carries a check as well as its Volt edge.
Indistinguishable for many readers, and meaningless to a screen reader.