Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ElthonJohan/comunitea/llms.txt

Use this file to discover all available pages before exploring further.

Getting the child profile right is the foundation of the entire ComuniTEA experience. Every vocabulary set shown on the communication board, every audio category unlocked, and every sensory accommodation the app makes — from quieter animations to reduced volume on sound effects — flows directly from what you enter here. The profile is captured during first launch through the onboarding wizard and can be revisited at any time from the Settings screen. Because the goal is zero friction on day one, only four steps are mandatory; the remaining five are optional personalisation steps that the caregiver can complete later or skip entirely to jump straight into communication practice.

Who Configures the Profile

The first mandatory step of the onboarding wizard asks who is setting up the app. ComuniTEA uses this role to adapt the language and depth of the configuration fields that follow.
RoleAdultRole valueExperience
Parent / Mother or Fatherpadre_madrePlain-language descriptions, everyday examples
Therapist (SLP / speech-language pathologist)terapeutaClinical terminology, therapy-oriented prompts
Psychologist / PsychopedagoguepsicologoClinical terminology, diagnostic framing
Teacher / Therapeutic aidedocenteClassroom-oriented prompts
The role is stored in the role column of the profiles table (added by migration 20260331000003_phase1_child_profiles.sql). It is never shown to the child.

Onboarding Flow

1

Privacy consent (step 0)

The caregiver reviews what data ComuniTEA collects — phrase history, usage statistics, and the child’s profile — and accepts the GDPR-compliant consent. This step is mandatory and cannot be skipped.
2

Role selection (step 1)

The caregiver selects their role from the ROLES list. The selection is mandatory and determines whether clinical terminology appears in subsequent steps.
3

Child's basic data (step 2)

The caregiver enters the child’s name (minimum 2 characters, stored as name in child_profiles) and optionally adds a profile photo and gender. This step is mandatory.
4

Communication level (step 3)

The caregiver selects the child’s current verbal communication level using the CommunicationLevel type. This step is mandatory because it determines the initial VocabLevel shown on the board.
5

DSM-5 diagnosis level (step 4, optional)

The caregiver selects the child’s DSM-5 ASD level using functional descriptions. The field is optional; if skipped, the app uses sin_diagnostico.
6

Usage environments (step 5, optional)

The caregiver selects where the app will be used — home, school, therapy, or other. Multiple environments can be selected.
7

Sensory preferences (step 6, optional)

The caregiver indicates whether the child is sensitive to loud sounds. Enabling this activates quiet mode — reduced volume and no music during celebrations.
8

Preferred activities (step 7, optional)

The caregiver selects activities the child enjoys from a preset catalogue, and can add custom ones. These become pictograms in the “Le gusta” (Things I like) subcategory on the board.
9

Important people (step 8, optional)

The caregiver adds names and emojis for the people in the child’s life (e.g. 👩|Mamá, 👨|Papá). If at least one entry is added, these replace the default placeholder people on the communication board.

Profile Fields

Name and Photo

The child’s name is displayed on the communication board header and in usage reports. The profile photo (avatar_url) is used as the “Yo” (I/Me) identity pictogram on the board — the very first pictogram the child sees. Photos are uploaded to the avatars bucket in Supabase Storage.
// From context/ChildProfileContext (used in settings.tsx)
const { id: _id, user_id: _uid, ...editable } = childProfile;
await saveChildProfile({ ...editable, name, avatar_url: url } as ChildProfileInput);

Date of Birth and Gender

birth_date is stored as a date in Supabase (nullable — the app does not require it during onboarding). Age is not explicitly stored; it is calculated from birth_date when needed. Gender (Gender type) is an open selection:
type Gender = 'masculino' | 'femenino' | 'otro' | 'prefiero_no_decir';
The gender field uses the labels “Niño”, “Niña”, “Otro”, and “Prefiero no decir”. It is fully optional and visible only to the caregiver.

DSM-5 ASD Level

ComuniTEA presents DSM-5 levels with functional descriptions rather than numbers alone, making the selection approachable for caregivers without a clinical background. Internally the selection is stored as the diagnosis field using the Diagnosis type.
Diagnosis valueLabel shownFunctional description
dsm5_nivel1Nivel 1 — Needs supportCan communicate some things but struggles in social or unfamiliar situations; needs targeted support
dsm5_nivel2Nivel 2 — Needs substantial supportVerbal communication is very limited or absent; responds better to clear routines and visual supports
dsm5_nivel3Nivel 3 — Needs very substantial supportSpontaneous communication is minimal or absent; ComuniTEA functions primarily as a basic-needs communicator
sin_diagnosticoNo diagnosis / Not specifiedNo formal diagnosis yet, or not relevant at this time
Selecting a diagnosis level does not change which vocabulary items appear on the board — that is controlled by the VocabLevel (see below). The diagnosis field exists to help caregivers and therapists track clinical context over time.

Communication Profile and Vocabulary Level

The communication level step is the single most important configuration decision, because it automatically sets the initial VocabLevel for the communication board via the COMM_TO_VOCAB mapping.
CommunicationLevelLabelVocabLevel
sin_lenguajeNo words yet (signs, gaze, vocalisations)BASICO
palabras_aisladasIsolated words (mamá, agua, más…)BASICO
frases_simplesShort phrases (quiero agua, no quiero…)INTERMEDIO
frases_complejasLonger phrases, 4+ wordsAVANZADO
If the caregiver also selects a therapy frequency separately, that detail is noted in the profile but does not modify the board configuration in the current version.

Vocabulary Level (VocabLevel)

VocabLevel is a three-tier system that controls the breadth of the communication board:

BASICO

Essential vocabulary for daily basic needs: food, emotions, bathroom, sleep, toys, and the “Quiero / No quiero” intention buttons. Ideal for children who are just beginning with AAC.

INTERMEDIO

Adds more categories and contexts: clothing, places, daily routine (“Mi día”), social phrases, numbers, and colours. Suited for children building multi-word communications.

AVANZADO

Full vocabulary including verbs, school items, week-day agenda, multi-turn conversation starters, and help phrases. For children constructing 3–4 pictogram sentences.
The level can be changed at any time from Settings → Control parental → Nivel de vocabulario without touching the child profile.

Environment Contexts

ActiveEnvironment lets caregivers switch the app’s context between sessions. The selected environment is surfaced in usage reports and can influence which vocabulary subsets are highlighted.
ActiveEnvironmentLabelIcon
hogarHogar (Home)home-outline
escuelaEscuela (School)school-outline
terapiaTerapia (Therapy)medical-outline
The active environment is changed from Settings → Control parental → Entorno activo and does not require re-entering the onboarding flow.

Important People

During onboarding step 8, caregivers add family members or key adults using an emoji + name format, stored as pipe-separated strings in the important_people array:
// Format: "emoji|Name" — e.g. "👩|Mamá" or "👨|Papá"
formatImportantPersonLine('👩', 'Mamá'); // → "👩|Mamá"
parseImportantPersonLine('👩|Mamá');      // → { emoji: '👩', name: 'Mamá' }
At runtime, mergePersonasRow() in features/tablero/buildMergedBoard.ts inserts these as custom pictograms in the “Personas” subcategory of the communication board, replacing the default placeholder people. The child’s own avatar pictogram (“Yo”) is always placed first.

Sensory Preferences

The sound_sensitive boolean on the child profile flags whether the child has heightened sensitivity to loud sounds. When true, ComuniTEA activates a quiet mode from the start:
  • Volume on sound effects is reduced
  • Celebration animations after phrase playback play without music
  • The default animation_intensity is set lower
This preference is also surfaced in the parental settings as animation_intensity (see Parental Controls).

How the Profile Is Stored

The child profile is persisted in the child_profiles table in Supabase (Postgres), protected by Row Level Security so that only the authenticated caregiver can read or modify their child’s data.
CREATE TABLE IF NOT EXISTS public.child_profiles (
    id                   uuid        PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id              uuid        NOT NULL REFERENCES public.profiles(id) ON DELETE CASCADE,
    name                 text        NOT NULL,
    birth_date           date,
    gender               text        CHECK (gender IN ('masculino','femenino','otro','prefiero_no_decir')),
    avatar_url           text,
    diagnosis            text        CHECK (diagnosis IN ('dsm5_nivel1','dsm5_nivel2','dsm5_nivel3','sin_diagnostico')),
    communication_level  text        NOT NULL
                         CHECK (communication_level IN ('sin_lenguaje','palabras_aisladas','frases_simples','frases_complejas'))
                         DEFAULT 'sin_lenguaje',
    environments         text[]      NOT NULL DEFAULT '{}',
    preferred_activities text[]      NOT NULL DEFAULT '{}',
    important_people     text[]      NOT NULL DEFAULT '{}',
    sound_sensitive      boolean     NOT NULL DEFAULT false,
    onboarding_completed boolean     NOT NULL DEFAULT false,
    created_at           timestamptz NOT NULL DEFAULT now()
);
After onboarding completes, onboarding_completed is set to true and AsyncStorage.setItem(STORAGE_KEYS.ONBOARDING_COMPLETED, 'true') is written locally so that subsequent app launches skip directly to the communication board (or the tutorial if not yet completed).
Each authenticated account holds exactly one child profile. The profile can be edited at any time from Settings → Perfil del niño (tablero AAC) or by tapping Repetir configuración inicial to re-run the full onboarding wizard.

Build docs developers (and LLMs) love