2. Build order (back-to-front, green at every hour)
flowchart LR
classDef done fill:#EAF3EF,stroke:#12573F,color:#0A0A0A,rx:10
classDef risk fill:#FBE9E5,stroke:#C0392B,color:#0A0A0A,rx:10
classDef cut fill:#F4F4F0,stroke:#8F8F8F,color:rgba(0,0,0,.60),rx:10
S1["1. SEND SEAM hardcoded contact + bundled image test jid on real phone in 30 min"]:::risk
S2["2. CONVEX + DASHBOARD schema, mutation, storage, live page (seed via script)"]:::done
S3["3. CONTEXT.DEV ACTION test from dashboard button, decoupled from phone"]:::done
S4["4. SCREENS 0-4 nav + Rivora light theme + hardcoded data → demoable even w/o voice"]:::done
S5["5. STT + EXTRACTION flakiest input, editing = safety net"]:::risk
S6["6. COUNTDOWN SELFIE + WIRING CameraX auto-capture at zero, follow-up fn"]:::done
S7["7. POLISH + REHEARSE run the 60s demo 5x"]:::done
S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7
C1["cut 1: ContactsContract (unless jid fallback needs it)"]:::cut
C2["cut 2: real 48h schedule (chip stays, faked)"]:::cut
C3["cut 3: first-run setup screen (profile falls back to config)"]:::cut
NC["NEVER CUT: send seam, selfie, dashboard live update, inline phone edit"]:::risk
3. Failure modes rehearsed into the script
flowchart TD
classDef ok fill:#EAF3EF,stroke:#12573F,color:#0A0A0A,rx:12
classDef fail fill:#FBE9E5,stroke:#C0392B,color:#0A0A0A,rx:12
J["jid extra fires?"]:::fail
J -->|yes| J1["thread opens pre-targeted, zero extra taps"]:::ok
J -->|ignored| J2["share sheet, WhatsApp pinned, one tap on recipient, script absorbs it"]:::ok
N["STT mangles phone number?"]:::fail
N -->|yes| N1["demo person edits inline on Review in 2 seconds, looks intentional"]:::ok
N -->|no| N2["straight through"]:::ok