cocottetech/@platform/codebase/@features/ai-copilot/docs/tryst-inbox.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.9 KiB

tryst-inbox.screen

Tryst-native thread list + thread-detail view. Implements surface-tryst.brief.md §5. Sibling to unified-inbox.screen.md; Tryst-specific because of metadata (verified-only filter, listing-rank of sender, city). Voice: working.

Layout (split: thread list + thread detail; iPad/web side-by-side, iPhone stack)

Thread list (iPhone primary)

┌─────────────────────────────────────────────────┐
│ ◄ Inboxes                    🔍   ⚙ filters    │ 56pt
├─────────────────────────────────────────────────┤
│  Tryst · 12 unread · 47 threads total           │   header
│  [ All ] [ Unread ] [ Verified-only ]            │   state filters
│  [ City: any ▾ ]  [ Rank: any ▾ ]                │   Tryst-specific filters
├─────────────────────────────────────────────────┤
│                                                 │
│  ✓ @felix · SF · rank #18 · 14:02                │   thread row
│    "thinking about Berlin..."                    │
│  ✓ @marko · Berlin · ✓ verified · 11:08          │
│    "Hi! Are you available next week?"            │
│  • @anon · LA · 06:55                            │   not-verified
│    "rates?"                                     │
│  …                                              │
│                                                 │
└─────────────────────────────────────────────────┘

Thread detail (iPhone push view)

┌─────────────────────────────────────────────────┐
│ ◄ Tryst                          ⋯ menu        │ 56pt
├─────────────────────────────────────────────────┤
│  @felix · San Francisco · rank #18              │   prospect header
│  [ ✓ verified · since 2024 ]                    │
│                                                 │
│  ─── thread ───                                 │
│  felix: thinking about Berlin                   │   inbound
│  cocotte (draft): "Berlin Oct 3-7 — let me…"    │   drafted reply
│  [ Edit ] [ Send ] [ Set aside ]                │   approval row
│                                                 │
│  felix: about the rates                         │   earlier in thread
│  you: thanks for asking, rates are on profile   │
│                                                 │
└─────────────────────────────────────────────────┘

Components

Component Notes
List header Tryst inbox name + counts.
State filters All / Unread / Verified-only (Tryst-specific: filter by Tryst-side verified clients).
Tryst-specific filters City (sender's listed city) + Rank (sender's listing rank — gives Quinn signal that this client is also a Tryst-active member of the audience).
Thread row Read state · handle · city · rank · time · 1-line excerpt.
Thread detail header Prospect handle, city, Tryst-listing rank, verified-since chip.
Thread Native iOS message bubbles (inbound left, outbound right). Drafted replies appear inline with the approval row.

States

  1. Default — list of threads, newest first.
  2. Unread filter — only unread threads visible.
  3. Verified-only filter — only Tryst-side verified clients shown.
  4. Empty (after filter) — "Nothing in this slice."
  5. Empty (truly) — "No Tryst threads yet. They'll appear here when clients reach out."
  6. Thread with drafted reply — approval row inline; tap Edit / Send / Set aside.
  7. Thread blocked sender — banner: "You blocked this sender. Their messages don't trigger Cocotte." Re-enable affordance.
  8. Coop intel on sender (per brief N) — chip: "🛡 Berlin coop flagged this handle." Tap → coop-intel-detail.
  9. Tryst session expired (per surface-tryst §12) — top banner: "Lost connection to Tryst. Inbox may be stale."
  10. Reduced motion / Dynamic Type XXL — list wraps; filters stack.

Interactions

  • Tap thread row → thread detail (push).
  • Long-press thread row → "Mark read / Block sender / Mute thread / Counter-action."
  • Tap "Edit" on a drafted reply → compose sheet with the draft pre-filled.
  • Tap "Send" → high-stakes confirmation (per brief M §M3) since outbound to Tryst is hard to retract.
  • Tap "Set aside" → moves to pending-approvals; thread stays in inbox.
  • Pull-to-refresh → re-pull from tryst.link.
  • Tap city / rank filter → cycle.

Edge cases

  • Multi-thread prospect (same Tryst handle, multiple threads opened over time) — collapses into a single row with chip "+N threads"; tap expands.
  • Tryst attachment in thread (photo from client) — inline thumbnail; tap → full-screen viewer with download.
  • Read receipt synced (Tryst marks thread read on Quinn's open) — chip "marked read on Tryst at {time}."
  • Tryst-side block — when Quinn enables Tryst-side block (per surface-tryst §10), thread becomes hidden from this inbox; chip in audit.
  • Reply drafted by triage but sender on K1 blocklist — shouldn't happen (triage prevents this); if surfaced, error banner: "This sender is blocklisted — draft suppressed."

Generalization callout

Per-surface inbox screens (ts4rent-inbox.screen.md, slixa-inbox.screen.md, onlyfans-inbox.screen.md) follow this layout pattern but with surface-specific filters + metadata. unified-inbox.screen.md is the parent feed; per-surface inboxes are the deep-dive views.

Out of scope

  • Composing a new outbound thread (Tryst doesn't support unsolicited outbound).
  • Per-thread analytics (defer).
  • Multi-attachment compose (single-photo at P0).