Commit 96f813

2026-08-07 11:31:46 admin: init
/dev/null .. 04-user-journeys.md
@@ 0,0 1,107 @@
+ ---
+ title: User Journeys
+ aliases: [Journeys, User Flows]
+ tags: [3netra/wiki, ux, journeys, diagrams]
+ product: 3netra Meta Android App
+ source_repository: 3Netra-ai/3n_meta_android
+ source_ref: origin/prod
+ source_revision: b48aada8fd5427b5db0c02945569963c4ae543c8
+ last_verified: 2026-08-06
+ up: "[[Home]]"
+ ---
+
+ # User Journeys
+
+ ## Journey Map (Aiden's campus day)
+
+ ```mermaid
+ journey
+ title Aiden's campus day with 3netra
+ section Morning arrival
+ Onboard & pair glasses: 5: Aiden, Instructor
+ Campus navigation cue: 4: Aiden
+ section Class
+ What do I see (scene): 5: Aiden
+ Read lecture slides/whiteboard (OCR): 5: Aiden
+ Classroom/lecture mode + PDF notes: 4: Aiden, Instructor
+ Who's here (face ID): 5: Aiden
+ Feelings (emotion): 4: Aiden
+ section Campus life
+ Library/quad description: 4: Aiden
+ section Afternoon
+ Lecture notes + AI summary: 4: Aiden
+ Today's Story recap: 5: Aiden
+ ```
+
+ ## Glasses Gesture Map (product specification, not hardware verification)
+
+ | Gesture | Action | Mode | Status |
+ |---|---|---|---|
+ | Single tap (right temple) | "What do I see?" | Scene | 🟑 callable method; Home invokes it, but no DAT callback registration was found |
+ | Double tap (right temple) | "Read what's written" | OCR/Read | 🟑 callable method only |
+ | Hold 2s (right temple) | "Who is in front of me?" / voice command | Person ID / mic | 🟑 callable method starts Android recognition; no DAT callback found |
+ | Single tap (left temple) | "What is happening here?" | Activity | ⏳ |
+ | Double tap (left temple) | "How does that person feel?" | Emotion | 🟑 callable method only |
+ | Voice "Hey Netra" | Wake word activation | β€” | ⏳ planned (service removed) |
+
+ ## Journey 1 β€” First-Time Setup (~3 min)
+
+ 1. Student/disability support coordinator installs app β†’ Login/Signup (email+password, OTP, or Google)
+ 2. Permission rationale screen (BT, location, camera, mic, notifications) with FERPA/COPPA banner
+ 3. Onboarding: Netra welcome β†’ academic level selection (tunes vocabulary for high school/college) β†’ glasses pairing (Meta View app must be paired first; auto-connect scans for "Meta"/"RB Meta" devices)
+ 4. (Optional) companion selection + nickname β€” see [[05-Avatars-Companions]]
+ 5. Home: "πŸ‘‹ Hey, {name}! Ready to explore your campus?"
+
+ ## Journey 2 β€” Student core loop (hands-free)
+
+ 1. Gesture or voice triggers `BluetoothService` headless pipeline (no UI needed)
+ 2. When hardware capture succeeds, the app invokes Supabase `chat-vision`; the Android client currently discards its answer and substitutes fixed success text
+ 3. Scene UI speaks through Android TTS. Speaker routing and Sarvam behavior are not device-tested
+ 4. Every result logged β†’ feeds My Story
+
+ ## Journey 3 β€” "What do I see?" (UI path)
+
+ Home β†’ πŸ” β†’ `scene_description/Scene` β†’ the student taps a mode chip β†’ capture attempt β†’ fixed `"AI response received"` on a successful Edge Function call β†’ Android TTS + attempted session log. First-load auto-capture is commented out. Mode chips let the student select Scene/Read/Emotions/People.
+
+ ## Journey 4 β€” Reading the board (Classroom mode)
+
+ Home exposes a Classroom quick action, but `SceneDescriptionScreen` has no Classroom chip/prompt branch and falls back to generic scene behavior. `BluetoothService` contains a Classroom/PDF branch, yet no verified UI or gesture route reaches it. The PDF helper uses legacy public external-storage writes and is not a reliable modern-Android export flow.
+
+ ## Journey 5 β€” Recognizing a classmate or professor
+
+ Instructor/disability support coordinator (PIN-gated) registers classmates & faculty: Friends tab β†’ + β†’ Admin PIN β†’ name β†’ CameraX capture β†’ FaceNet embedding β†’ Supabase.
+ Student: πŸ‘€ Who's here? β†’ FaceNet calculates an embedding and fetches registered embeddings from Supabase for cosine comparison (>0.5). A match is read aloud locally; otherwise the code invokes the Edge Function. It is neither local-only nor verified as instant, and successful Edge calls still resolve to fixed success text in this client.
+
+ > [!warning] Privacy caveat
+ > The active enrollment path stores embeddings in Supabase (`face_embeddings`), while the encrypted on-device store exists but is secondary in this flow β€” see [[11-Security-Privacy-Compliance#Critical gaps]].
+
+ ## Journey 6 β€” "Be My Eyes" chat
+
+ Chat tab β†’ type question and/or attach gallery image or video β†’ `askAssistant` samples/compresses media β†’ Supabase `chat-vision` β†’ fixed success text on client-side success. Trash clears in-memory history. No response-time target has implementation or test evidence.
+
+ ## Journey 7 β€” Lecture notes
+
+ Home β†’ πŸ“ Notes β†’ Start Recording (device speech recognizer) β†’ live transcript pane β†’ Summarize Now β†’ `SupabaseAiService.summarizeLecture`; the current client returns fixed success text rather than decoding the model summary.
+
+ ## Journey 8 β€” End-of-day "Today's Story"
+
+ My Story tab renders the day's sessions as an academic timeline (mode emoji, time, narration). **πŸ”Š Read My Day Out Loud** compiles "Here is your day so far… That's everything I saw today!" and speaks it β€” designed for review or sharing.
+
+ ## Journey 9 β€” Educator & Disability Support Specialist
+
+ - **Face library management** (PIN-protected): register/remove classmates & professors
+ - **Settings:** some preferences persist locally; server settings synchronization is attempted. The high-contrast and reduce-motion preferences are explicitly local-only.
+ - **Dashboard layer** (`SupabaseDashboardRepository`): code exposes settings/audit calls, but no active educator surface or authorization workflow is verified.
+ - **Planned:** web Educator Portal, Disability Support Portal summaries, weekly academic reports
+
+ ## Journey 10 β€” Emergency SOS (scaffolded)
+
+ Intended: hold temple 2s β†’ `EmergencyAlertManager` (`TRIGGER_SOS` intent) β†’ payload `{student_id, GPS, recent_summaries, status:"active"}` β†’ Supabase `emergency_alerts` β†’ emergency contact notified.
+
+ > [!warning] Current state
+ > Service exists, GPS + summaries are TODO stubs, and no UI/gesture triggers it yet. Do not represent as operational β€” see [[12-Risks-Decisions]].
+
+ ---
+
+ > [!tip] Navigation
+ > ⬅️ [[03-Frontend-Navigation|Frontend & Navigation]] Β· 🏠 [[Home]] Β· ➑️ [[05-Avatars-Companions|Avatars & Companions]]
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9