Inclusive design personas
Inventory of 8 archetypal personas covering the four ability axes (vision / motor / cognition / hearing) in the three permanence states (permanent / temporary / situational). Pairs the WCAG line- item auditing of accessibility/* with a humanized constraint set so designers reason about WHO breaks when a check is missed, not just what fails. Owner curates final names, day-in-the-life copy, and illustrations; this spec ships the structural scaffold + design constraints.
Spec — Inclusive design personas
*tatus* v0.1.0 Draft (2026
0522). Owner curates names, dayinthe-life copy, and illustrations; structural slots ship now.
R1 — Why personas
WCAG audit gates (contrast / focus / aria / touch target) tell us *hat*fails. Personas tell us *ho*breaks. The same missed focus ring is "the audit didn't pass" to one team and "Jamalthe parent typing one-handed at the breakfast table can't dismiss the modal" to another. The second framing routinely surfaces design fixes the first misses.
Microsoft's Inclusive Design toolkit popularized the *ermanence matrix*— a disability that's permanent for one person is temporary for another (broken arm) or situational for a third (holding a baby). KDS adopts the matrix so designers don't conflate WCAG categories with edge-case populations; every persona is "us, some percentage of the time."
R2 — Persona matrix
Eight personas × four ability axes × three permanence states. *odes are stable* names are owner-curated and may evolve.
| Code | Ability axis | Permanence | Working title (TODO — owner curates) | Core constraint |
|---|---|---|---|---|
| P1 | Vision | Permanent | TODO: low-vision power user | Screen reader + 200 % zoom; no color-only cues |
| P2 | Vision | Situational | TODO: bright outdoor sun | Glare washes out low-contrast text + accent |
| P3 | Motor | Permanent | TODO: keyboard-only power user | No pointer; every flow reachable via Tab + Enter |
| P4 | Motor | Temporary | TODO: one-handed (broken arm) | Thumb-only reach + touch target ≥ 44 dp |
| P5 | Cognition | Permanent | TODO: dyslexia + ADHD | Plain sans-serif font + reduced motion |
| P6 | Cognition | Situational | TODO: distracted parent | One |
| P7 | Hearing | Permanent | TODO: Deaf user, LIBRAS L1 | No audio-only feedback; captions on every video |
| P8 | Hearing | Situational | TODO: noisy café | Visual confirmation of "sent" / "saved" / "error" |
Each persona below carries a 1sentence stub for the dayinthelife section (the longer narrative ships owner-curated, per § R3).
P1 — Vision · Permanent
- *ay
inthe-life stub* TODO — owner writes 1 paragraph. - *ools they use* screen reader (TalkBack / VoiceOver / NVDA),
browser zoom 200 %, OS high-contrast mode.
- *esign constraints they expose*
- Every interactive element MUST have an accessible name.
- No color-only cues — pair with shape / text / icon.
- Focus ring contrast ≥ 3:1 against any surface.
- *inked specs*
themes/light-dark.kmd(high-contrast theme),policies/focus-management.kmd,accessibility/aria-roles.kmd.
P2 — Vision · Situational
- *ay
inthe-life stub* TODO. - *ools* phone outdoors in bright sun, OS auto-brightness maxed.
- *onstraints*
- Body text contrast ≥ 7:1 (AAA) on critical surfaces.
- Accent color ≥ 4.5:1 against background.
- Photos / illustrations behind text MUST gradient-darken under the type.
- *inked specs*
themes/light-dark.kmd,themes/high-contrast.kmd.
P3 — Motor · Permanent
- *ay
inthe-life stub* TODO. - *ools* external keyboard, switch device, head-tracker.
- *onstraints*
- Every flow reachable via Tab + Enter + Escape.
- Visible focus indicator at every step.
- No drag
only or hoveronly paths (gesture must have akeyboard/click counterpart).
- *inked specs*
policies/focus-management.kmd,navigation/back-behavior.kmd.
P4 — Motor · Temporary
- *ay
inthe-life stub* TODO. - *ools* thumb-only reach on phone; one arm in a sling.
- *onstraints*
- Touch targets ≥ 44 dp.
- Primary actions reachable in thumb zone (lower 1/3 of screen).
- No bottom-screen swipes that conflict with OS gesture pill.
- *inked specs*
app-layout/safe-area.kmd,policies/single-hand-reach.kmd(TODO — opens with this persona set).
P5 — Cognition · Permanent
- *ay
inthe-life stub* TODO. - *ools* prefers reduced motion; uses font size + scaling.
- *onstraints*
prefers-reduced-motion: reducehonored.- Plain language — no nested clauses in error messages.
- No timeout-based dismissals on critical content.
- *inked specs*
errors/user-facing-messages.kmd,motion/reduced-motion.kmd.
P6 — Cognition · Situational
- *ay
inthe-life stub* TODO. - *ools* phone interrupted by child, conversation, doorbell.
- *onstraints*
- Auto-save on form fields with ≥ 3 inputs.
- Restore
wheretheyleftoff on app resume. - Confirmations for destructive actions; undo for 5 s.
- *inked specs*
koder-app/behaviors.kmd § State persistence.
P7 — Hearing · Permanent
- *ay
inthe-life stub* TODO. - *ools* LIBRAS interpreter, captions on, visual notifications.
- *onstraints*
- No audio-only feedback (every cue has a visual twin).
- Captions present on every motion clip with speech (#051).
- LIBRAS / sign-language overlay available where applicable
(servicesaisigns integration).
- *inked specs*
voice/wake-word.kmd § Visual feedback,specs/sound/vocabulary.kmd § R4 mute contract.
P8 — Hearing · Situational
- *ay
inthe-life stub* TODO. - *ools* phone on silent in a meeting; ambient noise washing out
audio.
- *onstraints*
- Visual toast confirms every "sent / saved / error" action.
- Vibration available on mobile as a secondary channel.
- *inked specs*
errors/user-facing-messages.kmd,specs/sound/vocabulary.kmd.
R3 — Dayinthelife narrative (ownercurated)
Each persona ships with a 1paragraph dayinthelife describing the context in which they use Koder apps. This copy is *wner-curated*because it must:
- Avoid stereotypes / paternalistic framing.
- Use names + cultural references appropriate to Koder's audience
(Brazil-led, enptes trilingual).
- Be vetted with at least one community member matching the persona's
axis (FENEIS for P7, Conselho da Pessoa com Deficiência for P1/P3, etc.) before publication.
Until owner curates, the spec page renders the working title and constraints; the dayinthe-life paragraph displays a TODO banner.
R4 — Illustrations
Perpersona portraits — Vergestyled flat illustrations OR sourced CC0 imagery. Owner directs. Until illustrations land, the page uses a neutral silhouette placeholder.
R5 — Audit gates (when ratified)
koder-spec-audit personas (follow-up) walks every persona × every linked spec and asserts:
- Each linked spec has a test (T-section) that fails when the
persona's constraint breaks.
- No KDS page introduces a UI flow that breaks any persona's
constraint without a
data-persona-exempt="<P-code>:<spec-ref>"attribute.
R6 — Cross-references
specs/themes/high-contrast.kmd— P1 + P2 surface.specs/voice/wake-word.kmd— P7 + P8 visual-feedback requirement.specs/motion/reduced-motion.kmd— P5 baseline.specs/app-layout/safe-area.kmd— P4 thumb-zone.specs/i18n/contract.kmd— locale-aware persona copy.services/ai/signs/(Track B) — P7 sign-language overlay.
R7 — Open questions
- Should the persona set evolve over time (additive only) or remain
closed at 8? Recommendation: closed for v0, additive in minor versions on owner sign-off only.
- Do we ship a per-persona test fixture (e.g. for P1, run the page
under NVDA's headless mode) — or is per-spec testing sufficient?
- Trilingual rollout — does P1's working title translate, or stay
anglicized as a stable code?
Sign-off
| Role | Owner |
|---|---|
| Author | @rpm (2026 |
| Day |
pending owner_ |
| Illustrations | pending owner direction_ |
| Community review | pending_ (FENEIS, Conselho PCD, etc.) |
| Ratification | pending_ |