cocottetech/@platform/codebase/@features/ai-copilot/docs/second-member-invite.screen.md
natalie 1b719e1fd7 chore(bootstrap): initial V4 commit
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>
2026-05-18 08:11:41 -07:00

6.3 KiB

second-member-invite.screen

Invite a second (or Nth) member to an org. Implements brief AC. 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."

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).