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>
74 lines
4 KiB
Markdown
74 lines
4 KiB
Markdown
# engagement-drawer.screen
|
||
|
||
The engagement-feed drawer — list of inbound engagement events (replies, DMs, mentions, prospects warming) per [brief B](./B-drawers.brief.md) §engagement. Sibling to unified-inbox; this drawer is the *prospect-funnel* view (typed by status × surface × specialist), where unified-inbox is the *raw thread* view. Voice: working.
|
||
|
||
## Layout (full-screen drawer)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ ◄ Chat 🔍 ⚙ filters │ 56pt
|
||
├─────────────────────────────────────────────────┤
|
||
│ [ All · 47 ] [ Hot · 12 ] [ Warm · 28 ] [ Cold]│ tier filter
|
||
│ via: [ any ▾ ] sort: [ tier desc ▾ ] │
|
||
├─────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ─── Today ─── │
|
||
│ 🔥 @felix · Tryst · "thinking about Berlin…" │ tier + handle + source + excerpt
|
||
│ drafted reply pending you · 14:02 │
|
||
│ 🔥 @mira · OnlyFans DM · "VIP rates?" │
|
||
│ drafted by content-onlyfans · 11:48 │
|
||
│ 🟡 @carl · X reply · "love the tease" │
|
||
│ no draft, low-tier · 10:32 │
|
||
│ │
|
||
│ ─── Earlier this week ─── │
|
||
│ 🟡 @vincent · TS4Rent · 2d ago │
|
||
│ ❄ @anon · OnlyFans · 4d (blocked: spam) │
|
||
│ … │
|
||
│ [ See all → ] │
|
||
│ │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Components
|
||
|
||
| Component | Notes |
|
||
|---|---|
|
||
| Top bar | Back + search (routes to global-search scoped to engagement) + filter cog. |
|
||
| Tier filter | Hot ≥0.7 / Warm 0.4–0.7 / Cold <0.4, per `prospect-classifier-claude` (brief J port). |
|
||
| Source filter | All / iMessage / Tryst / OF / X / … (24-surface roster). |
|
||
| Sort | Tier desc / time desc / unread first. |
|
||
| Row | Tier glyph + handle + source chip + excerpt + draft status + timestamp. |
|
||
|
||
## States
|
||
|
||
1. **Default** — list grouped by day.
|
||
2. **Filter active** — chip on top reflecting filter.
|
||
3. **Empty (after filter)** — "Nothing in this slice."
|
||
4. **Empty (truly)** — "No engagement yet. Quiet day."
|
||
5. **Refreshing** — pull-to-refresh spinner.
|
||
6. **Backend-degraded (M §M2b)** — banner: "Last-seen 14h ago; refreshing."
|
||
7. **VoiceOver** — sections + rows announce tier as "hot/warm/cold."
|
||
|
||
## Interactions
|
||
|
||
- **Tap row** → prospect-detail.screen.md.
|
||
- **Long-press row** → quick menu: Block / Mark cold / Approve draft / Counter-action.
|
||
- **Tap tier filter** → re-pull list.
|
||
- **Pull-to-refresh** → re-pull.
|
||
|
||
## Edge cases
|
||
|
||
- **Triage marked something as blocked (per brief K §K1)** — row shows "(blocked: reason)" muted.
|
||
- **Coop intel hit (per N) on the sender** — chip "🛡 coop flag" on the row.
|
||
- **Multi-thread prospect** (same person across surfaces) — single row with chip "+N threads"; tap expands.
|
||
|
||
## Related
|
||
- [Brief B](./B-drawers.brief.md) — parent.
|
||
- [unified-inbox.screen.md](./unified-inbox.screen.md) — sibling (raw thread feed).
|
||
- [prospect-detail.screen.md](./prospect-detail.screen.md) — row target.
|
||
- [Brief I](./I-audit-trust-replay.brief.md), [Brief K](./K-safety-blocklist.brief.md), [Brief N](./N-provider-coop.brief.md), [Brief P](./P-inboxes.brief.md).
|
||
- [triage contract](./specialist-triage.contract.md).
|
||
|
||
## Out of scope
|
||
- Composing a new outbound (composer is per-prospect from prospect-detail).
|
||
- Bulk operations (defer).
|