Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.3 KiB
D — Onboarding + persona-seed interview
Goal
First-run experience: get Quinn from cold-install to a working ai-copilot in under 5 minutes, with a seeded personas row that ai-copilot + content-* specialists can lean on from day one.
Designer skim
- Headline UX: 5-minute first-run. SSO device-link → conversational persona-seed interview (8–12 Qs via voice or text) → ai-copilot summarizes + Quinn approves → handoff to chat-home.
- Flows (3): D1 SSO device-link · D2 persona-seed interview · D3 first-run empty state.
- States (7): splash · device-link in progress · device-link error · mid-interview turn · persona summary review · persona save error · onboarding complete.
- Pair-with:
persona-seed-interview.screen.md. - Blocking Qs: OPEN-DECISIONS.md → D-Q1 voice-vs-text default, D-Q2 interruptible TTS.
Constraints
- Auth via SSO device-link against
quinn.sso(federated, P0); will migrate toplatform.ssolater — UI should be auth-provider-agnostic. - Persona-seed interview is voice + text: Quinn can speak answers (TTS prompts; STT capture) OR type. Mixing is fine.
- Persona is written via
PATCH /api/v1/personas/:user_idonce the user record exists. - Reuse
lilith-messenger-ios/Core/Auth/{AuthManager,SSOAuthenticator,KeychainService}.swift— port unchanged.
Flows
D1 — SSO device-link
- Splash with brand mark (CocotteAI).
- Tap "Sign in" → opens device-link QR / code displayed on iPhone.
- Quinn scans on a trusted device OR enters the code in
quinn.sso's portal. - Device link confirmed → JWT issued → Keychain storage → home.
- If user has no
personasrow → push to D2.
D2 — Persona-seed interview
A guided conversation, ~8–12 questions, surfaced as a chat thread with ai-copilot. NOT a form.
Question shapes (designer to refine wording):
- "What's your brand voice in one sentence?" (free text, ~140 chars)
- "Pick 3–5 words your audience would say about you." (chip select with custom-add)
- "Who's your audience? Walk me through a typical fan." (free text / voice)
- "What surfaces do we plan for? OF / X / IG / TikTok / Tryst / TS4Rent / others?" (multi-select)
- For each selected surface: "Different voice here than your default? (yes/no — if yes, how?)"
- "What's off-limits? Topics, kinks, places I should never bring up." (free text, multiline)
- "What's a typical week like? When do you shoot? When do you post?" (free text / voice)
- "Anything I should know to not embarrass you?" (catch-all)
After: ai-copilot summarizes the persona back to Quinn and asks for sign-off. On approval → write personas row.
D3 — First-run empty state (after persona seed)
- "Welcome — strategist is drafting your first 14 days. Back in ~30 seconds."
- Progress indicator while strategist runs (post-P0 — for P0 this state is "We're ready when you upload your first shoot or DM us a question").
States to design
- Splash (signed-out).
- Device-link in progress (waiting on QR scan).
- Device-link error (timeout, wrong code).
- Mid-interview turn (question + voice/text input options).
- Persona summary review.
- Persona save error.
- Onboarding complete → handoff to chat home.
In-the-wild copy
Splash CTA (hearth, dialed warmer — first impression):
Welcome. Set the kitchen up.
Device-link in progress (working):
Scan the code on a trusted device. Cocotte will know it's you.
Mid-interview question, voice or text (hearth):
Two more, then she'll let you go. What's a typical week? When do you shoot, when do you post?
Persona summary review (working — Quinn is deciding):
Here's what Cocotte heard. Voice: warm, dry, no marketing. Off-limits: real name, ex, Vegas. Surfaces: OF, X, Tryst, TS4Rent. Save and start, or rework anything?
Onboarding complete, handoff (hearth):
She's ready. Drafts will be in the drawer by morning.
Out of scope
- Multi-account switching (Quinn's only operator P0).
- Reset-and-redo persona (lives in persona-editor drawer, brief B5).
Open questions
- Voice-first or text-first as the default input mode?
- Should the interview accept Quinn typing while ai-copilot is still speaking the next question (interruptible TTS)?
- Skip-to-end affordance, or force completion?