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>
7.7 KiB
7.7 KiB
tryst-reviews.screen
Tryst reviews list with per-review response affordances. Implements surface-tryst.brief.md §8. Reviews are ingested as engagement_events with kind=review. Cocotte never auto-responds; every reply is approval-card-gated. Voice: working; plain on negative reviews.
Layout (full-screen drawer)
┌─────────────────────────────────────────────────┐
│ ◄ Tryst ⚙ filters │ 56pt
├─────────────────────────────────────────────────┤
│ ★ 4.8 average · 32 reviews · 5 responded │ summary
│ [ All ] [ Unread ] [ Critical ] [ Responded ] │ state filter
├─────────────────────────────────────────────────┤
│ │
│ ─── Recent ─── │
│ ┌─────────────────────────────────────────────┐│
│ │ ★★★★★ @felix · "Best evening I've had..." ││ review row
│ │ posted 2d ago · ✓ verified ││
│ │ [ See full → ] [ Draft response → ] ││
│ └─────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────┐│
│ │ ★★ @anon · "Profile said one thing..." ││
│ │ posted 4d ago · ⚠ critical ││ critical chip
│ │ Strategist drafted a response — pending you ││
│ │ [ See draft → ] [ Flag to Tryst → ] ││
│ └─────────────────────────────────────────────┘│
│ … │
│ │
└─────────────────────────────────────────────────┘
Components
| Component | Notes |
|---|---|
| Summary | Average rating + count + responded count. Tappable → analytics-dashboard.screen.md T3 panel for trend. |
| State filter | All / Unread / Critical (≤2 stars) / Responded. |
| Review row | Rating + author + excerpt + verified chip + posted time. Action row varies per state. |
| Draft chip | If strategist (or content-onlyfans for cross-promoted reviews) drafted a response, chip surfaces. |
| Flag affordance | Reports review to Tryst moderation. |
States
- Default — all reviews, newest first.
- Unread — Quinn hasn't viewed.
- Critical (≤2 stars) — pulsed amber on row; specialist may have drafted a response.
- Responded — chip "you responded {date}."
- Empty (no reviews) — copy: "No reviews on your Tryst profile yet."
- Review hidden by Tryst (under moderation) — chip "Tryst is reviewing this — not visible to clients."
- Review flagged by Quinn — chip "flagged {time}"; status: pending Tryst response.
- Coop intel on reviewer — chip "🛡 coop report" per brief N.
- VoiceOver — summary first; each review reads rating + author + excerpt + time.
Per-review detail sheet (tap "See full")
┌─────────────────────────────────────────────────┐
│ ◄ Reviews │
│ ★★★★★ @felix · posted 2d ago │
│ │
│ Full text: │
│ "Best evening I've had in months. Smart, │
│ funny, exactly what was on the profile. I'll │
│ be back." │
│ │
│ ─── Response (Cocotte draft) ─── │
│ "Thanks for the kind words. Looking forward │
│ to seeing you next time." │
│ [ Edit ] [ Approve & post ] [ Set aside ] │
│ │
│ ─── Audit ─── │
│ • Ingested 2d ago by `triage` │
│ • Drafted response by `strategist` 1d ago │
│ [ See full audit → ] │
│ │
│ ─── Flag this review ─── │
│ [ Flag to Tryst → ] [ Block this reviewer ] │
└─────────────────────────────────────────────────┘
Interactions
- Tap review row → detail sheet (above).
- Tap "Draft response →" → produces a strategist-drafted reply; routes back to detail.
- Tap "Approve & post" → high-stakes confirmation: "Posting public reply to {reviewer}. Continue?"
- Tap "Flag to Tryst" → confirmation: "Tryst's moderators will review {reviewer}'s post. You won't hear back automatically."
- Tap "Block this reviewer" → add-blocklist-entry.screen.md pre-filled.
- Long-press review → "Star" / "Mark unread" / "Add to digest section."
Edge cases
- Critical review with no draft (strategist offline per brief M) — banner: "Strategist hasn't drafted yet. Tap to start manually."
- Review on a profile field Quinn changed since (e.g. complaint about rates that have since changed) — chip: "Profile changed since this review. Mention in response?"
- Reviewer is a coop-flagged subject — chip routes to coop-intel-detail.screen.md.
- Anonymous reviewer (Tryst allows) — Quinn can flag or block by review-ID only.
- Tryst removed the review (Quinn's flag accepted) — chip "removed by Tryst {date}"; review hidden from list but kept in audit per brief I append-only.
- Multiple reviews from same reviewer (rare but possible) — chip "this reviewer has N other reviews of you" to give context.
Generalization callout
Not all directories have reviews. Per-surface brief flags absence:
- TS4Rent: no public reviews.
- Slixa: limited review system; same pattern with simpler filter set.
- OnlyFans: no reviews — tips + comments instead; different shape entirely.
- Eros: optional reviews per provider.
Screen pattern reuses; presence + ingestion + moderation pathways vary per surface.
Related
- surface-tryst.brief.md §8 — parent.
- specialist-strategist.contract.md — response-draft source.
- Brief K §K1 — block-reviewer entry.
- Brief N — coop intel on reviewers.
- Brief I — every ingestion + draft + response = audit row.
- analytics-dashboard.screen.md — T3 trend.
- add-blocklist-entry.screen.md — block-reviewer route.
Out of scope
- Aggregated cross-surface review summary (defer).
- Quinn-initiated review-request prompts to clients (defer — Tryst's mechanism).
- AI review-classifier for proactive surfacing (defer).