# second-member-invite.screen Invite a second (or Nth) member to an org. Implements [brief AC](./AC-second-member-onboarding.brief.md). P5+ — speculative. Reached from org-overlay-settings.screen.md → "+ Invite member." Voice: working. ## Layout (full-screen sheet) ``` ┌─────────────────────────────────────────────────┐ │ Cancel Invite to Demimonde Send │ 56pt ├─────────────────────────────────────────────────┤ │ │ │ ─── Their identity ─── │ │ Display name (their choice): │ │ ╭───────────────────────────────────────╮ │ │ │ Their working name │ │ │ ╰───────────────────────────────────────╯ │ │ Email or phone (for invite delivery): │ │ ╭───────────────────────────────────────╮ │ │ │ │ │ │ ╰───────────────────────────────────────╯ │ │ │ │ ─── Their role ─── │ │ ○ Owner (full org admin) │ │ ● Admin (manage members + brands) │ │ ○ Talent (operates under brand, no org admin) │ │ ○ Read-only (audit + analytics only) │ │ │ │ ─── What they can see ─── │ │ ☑ Their own engagement / audit │ │ ☑ Org-wide audit (per W §data-scope) │ │ ☐ Other members' private data │ │ │ │ ─── Specialists ─── │ │ Initial posture: ● Inherits org defaults │ │ ○ Custom │ │ ☑ All gates at "propose only" for first 14d │ safety default │ │ │ ─── Brand ownership ─── │ │ Will they operate a brand? │ │ ○ Quinn's existing brand (Cocotte umbrella) │ │ ● Their own brand (new sub-brand under org) │ │ [ Configure their brand → ] │ │ │ │ ─── Notes for them ─── │ │ ╭───────────────────────────────────────╮ │ │ │ "Looking forward to working with you" │ │ │ ╰───────────────────────────────────────╯ │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Identity | Display name (their pick, not real name) + delivery channel. | | Role | 4 levels: Owner / Admin / Talent / Read-only. | | What they can see | Data-scope overrides per W §data-scope. | | Specialists | Initial posture inheritance + 14-day "propose only" safety default. | | Brand ownership | They join an existing brand or get their own sub-brand. | | Notes | Personal welcome message in invite email. | ## States 1. **Default (admin invite)** — radio on Admin; sensible defaults selected. 2. **Talent invite** — most read-only checkboxes off by default; brand row defaults to "existing brand." 3. **Owner invite** — confirmation banner: "Owner role gives full org admin including billing. Continue?" 4. **Invalid delivery channel** — inline error; Send disabled. 5. **Existing CocotteAI user on this email** — chip: "This person already has a CocotteAI account. They'll see the invite as 'join org' on their next sign-in." 6. **Pending invitation already exists** — banner: "An invite to this address was sent on {date} (pending). Resend or cancel?" 7. **Org member cap reached** (per plan tier from brief Z) — banner: "Demimonde's plan supports {N} members. Upgrade to invite more." Routes to billing. 8. **Compliance flag** (jurisdiction conflict: e.g. talent in a jurisdiction the org can't operate in) — soft warning, doesn't block. ## Interactions - **Tap a role** → updates "what they can see" defaults. - **Tap "Configure their brand"** → brand-config sheet (sub-brand details: name, domain, voice lean). - **Tap "Send"** → sends invite + records audit; confirmation toast. - **Long-press a sent invite (in member list)** → "Resend / Cancel / Modify role." ## Edge cases - **Sending to a Coop-blocked address** (per N) — soft warning: "This address is flagged in your Berlin coop. Continue anyway?" - **Member accepts and immediately wants different role** — they request via chat; owner gets approval card. - **Invite expired** (14-day default TTL) — automatically marked expired; member list shows expired chip. - **Pre-existing personal account being upgraded to org member** — data migration prompt: "Their personal data will stay personal. They'll see org data after accepting." ## Related - [Brief AC](./AC-second-member-onboarding.brief.md) — parent. - [Brief W](./W-org-overlay.brief.md) — data-scope source. - [Brief Z](./Z-billing-payments.brief.md) — member cap source. - [Brief D](./D-onboarding.brief.md) — invite recipient's onboarding flow. - [Brief N](./N-provider-coop.brief.md) — Coop-blocked check. - [org-overlay-settings.screen.md](./org-overlay-settings.screen.md) — entry. ## Out of scope - Bulk invites (defer; per-member at P0). - Inviting to a coop (separate flow; brief N coop-invite mechanism). - Custom role definitions (4 fixed roles at P0).