We Just Met / flow

One-sided contact exchange. They install nothing. Demo at 17:00. Theme: Rivora Labz light (forest green on cream), this page IS the palette preview.

0. Finalized UI tokens (press the buttons)

nudge in 47h
bg #FAFAF7 cream brandGreen #0B3D2E brandPrimary #12573F hover #166B4E accentGold #D4AF37 text #0A0A0A
Primary CTA: 52dp, 12dp radius, green vertical gradient, pressScale 0.952 spring (MediumBouncy), 220ms fire delay

1. The 60-second demo flow (user + data)

flowchart TD
  classDef screen fill:#EAF3EF,stroke:#12573F,color:#0A0A0A,rx:12
  classDef backend fill:#EDF0FA,stroke:#4A5FC1,color:#0A0A0A,rx:12
  classDef external fill:#F4ECF9,stroke:#8E44AD,color:#0A0A0A,rx:12
  classDef judge fill:#FBF3DC,stroke:#B8961F,color:#0A0A0A,rx:12
  classDef once fill:#FFFFFF,stroke:#8F8F8F,stroke-dasharray:5 4,color:#0A0A0A,rx:12

  ONB["SCREEN 0: FIRST-RUN SETUP (one-time, skippable)
'This is you.'
my name, WhatsApp number, LinkedIn URL, photo
+ optional 'Enrich me' via Context.dev → feeds message template"]:::once A["HOME
'Meet someone. Hand them your phone.'
recent contacts + big green CTA"]:::screen B["CAPTURE
forest-green pulsing orb, gold ring while hearing
they speak name / number / company / topic"]:::screen CD["COUNTDOWN OVERLAY
'Ready for selfie, 3, 2, 1, go'
hides extraction latency"]:::screen CAM["CameraX front lens
AUTO-captures at zero
(tap thumb on Review to retake)"]:::backend C["REVIEW
card + selfie arrive PRE-FILLED
fields editable (safety net), shimmer if extraction in flight"]:::screen D["SEND
WhatsApp-style preview bubble
selfie + templated message (uses MY profile from screen 0)"]:::screen STT["Platform SpeechRecognizer (on-device, LOCKED)
dumb ears: rough transcript is fine,
live partials feed the orb
"]:::backend EXT["Convex action: LLM extraction
fixed JSON {name, phone, company, role, note}
runs in PARALLEL with countdown + selfie"]:::backend WA["WhatsApp
ACTION_SEND + EXTRA_STREAM + jid
fallback: contact insert or 1-tap picker"]:::external CVX["Convex
contacts table + selfie storage
+ 48h follow-up schedule"]:::backend CTX["Context.dev enrichment
name+company → role, LinkedIn URL"]:::external LI["STRETCH ONLY (hard cut 1)
Context.dev browser action:
find LinkedIn + send connect request"]:::external DASH["WEB DASHBOARD (judge screen)
live row appears → enrichment fills in
follow-up countdown chip"]:::judge WIN["SUCCESS MOMENT
full-screen Lottie burst, green + gold on cream
'Now they can't forget you.'
auto-dismiss 2.5s"]:::screen ONB -->|"first launch only, then never again"| A A -->|"tap 'We just met'"| B B -->|"silence / tap orb"| CD CD -->|"at zero"| CAM --> C B -.->|"parallel"| STT -.-> EXT -.->|"fields land"| C C -->|"name + phone present"| D D -->|"one tap"| WA D -->|"on return: save"| CVX CVX -->|"async action"| CTX CTX -->|"role + URL land"| CVX CTX -.->|"stretch"| LI CVX -->|"live subscription"| DASH D -->|"on return"| WIN -->|"2.5s / tap"| A
App screens Convex / device services External seams (risky) Judge-facing surface One-time onboarding

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