cocottetech/@platform/codebase/@features/ai-copilot/docs/tryst-profile-preview.screen.md

106 lines
7.1 KiB
Markdown
Raw Normal View History

# tryst-profile-preview.screen
Rendered "as a Tryst client sees it" preview. Implements [surface-tryst.brief.md §3](./surface-tryst.brief.md). The canonical "what does my listing look like right now" surface. Reached from tryst-profile-editor.screen.md "Preview" CTA, from chat-home when Cocotte proposes profile updates, or directly via surfaces-settings.screen.md. Voice: working (UI scaffolding around the rendered preview; the preview content itself is in Quinn's Tryst-audience voice per §13).
## Layout (full-screen, rendered to roughly match tryst.link's layout)
```
┌─────────────────────────────────────────────────┐
│ ◄ Editor Approve & push │ 56pt
├─────────────────────────────────────────────────┤
│ Preview · what clients see │ label
│ [ Live ▼ ] [ Proposed ▼ ] [ Side-by-side ] │ variant picker
├─────────────────────────────────────────────────┤
│ │
│ ╔═══════════════════════════════════════════╗ │ simulated Tryst frame
│ ║ [ Hero photo ] ║ │
│ ║ @transquinnftw · TLC · ✓ verified ║ │
│ ║ San Francisco · available now ║ │
│ ║ ║ │
│ ║ About ║ │
│ ║ Independent escort based in the Bay ║ │
│ ║ Area. Trans, femme, real, no rush. ║ │
│ ║ ║ │
│ ║ Rates ║ │
│ ║ Incall 1h $400 / 2h $700 ║ │
│ ║ Outcall 1h $500 / 2h $850 ║ │
│ ║ Overnight $2,500 ║ │
│ ║ ║ │
│ ║ Services ║ │
│ ║ GFE · Companionship · Tours · Multi-hour ║ │
│ ║ ║ │
│ ║ Hours · Mon 1002 · Wed 1222 · … ║ │
│ ║ ║ │
│ ║ Touring ║ │
│ ║ Berlin (Oct 37) ║ │
│ ║ ║ │
│ ║ Photos · 8 in gallery ║ │
│ ║ [ thumbnails row ] ║ │
│ ║ ║ │
│ ║ ★ 4.8 (32 reviews) ║ │
│ ╚═══════════════════════════════════════════╝ │
│ │
│ ⓘ Cocotte's render — actual Tryst layout │
│ may differ slightly. │
│ │
└─────────────────────────────────────────────────┘
```
## Components
| Component | Notes |
|---|---|
| Top bar | Back + Approve-and-push (commits proposed state to Tryst via adapter). |
| Variant picker | "Live" (what Tryst is currently showing), "Proposed" (what's about to ship if approved), "Side-by-side" (compare). |
| Simulated frame | Best-effort visual match of tryst.link's profile page layout. Uses real photo data when connected; placeholder otherwise. |
| Disclaimer chip | "Cocotte's render — actual Tryst layout may differ slightly." Honest about preview fidelity. |
## States
1. **Live mode** (default if no pending changes) — shows current Tryst-fetched state. Approve disabled.
2. **Proposed mode** — shows about-to-ship state. Approve enabled.
3. **Side-by-side** — split-screen; live on left, proposed on right (or stacked on iPhone narrow).
4. **Diff highlighted** — in any mode, changed fields pulse softly with a chip "changed."
5. **Fetching live** — banner + skeleton on the live variant.
6. **Live unavailable** (Tryst session expired or rate-limited) — banner: "Couldn't fetch live state. Showing last-cached from {time}. [Refresh]"
7. **Approval mid-flight** — banner: "Pushing to Tryst…" 15s.
8. **Approved** — sheet dismisses; receipt as per editor.
9. **Approval failed** — banner with retry.
10. **VoiceOver** — frame contents read top-to-bottom as a structured profile.
## Interactions
- **Tap "Approve & push"** → high-stakes confirmation (per brief M §M3 if anything brand-sensitive changed): "Pushing N changes to your Tryst profile. 3 things changing: rates, about-me, hero photo. Push?"
- **Tap variant picker** → switch between Live / Proposed / Side-by-side.
- **Pinch-zoom on frame** → larger render.
- **Tap a field in the frame** → opens the editor scoped to that field.
- **Tap a photo thumbnail** → opens [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md).
## Edge cases
- **Live mode requested but Tryst session expired** — fall back to cached live; chip explains. Re-auth route available.
- **Proposed mode with no pending changes** — banner: "Nothing changed. Live and proposed are identical."
- **Photos changed but new photos not yet uploaded to Tryst** (upload pending) — chip on each unmigrated photo: "uploading…"
- **Listing archived (per surface-tryst §12)** — top banner: "Your listing is archived. Approving will re-activate it. Confirm?"
- **K2 phrase still present in proposed** — Approve disabled until resolved.
- **Reviews count or rating changed** (Tryst ingested new review) — chip: "1 new review since you last opened the editor."
## *Generalization callout*
Per-surface preview screens follow this exact pattern — simulated frame in the surface's native layout + Live/Proposed/Side-by-side picker + disclaimer + Approve-and-push. The frame's *visual schema* differs per surface but the meta-UX (picker, diff-pulse, approve-flow) reuses.
## Related
- [surface-tryst.brief.md §3](./surface-tryst.brief.md) — parent.
- [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md) — editor entry.
- [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md) — photo thumbnail target.
- [Brief M §M3](./M-error-degraded-modes.brief.md) — high-stakes confirmation pattern.
- [Brief I](./I-audit-trust-replay.brief.md) — push action = audit row.
- [Brief H §H4 multi-surface card](./H-recurring-chores.brief.md) — parent for the approve-and-push fanout.
## Out of scope
- Pixel-perfect Tryst clone (the disclaimer chip is the safety hedge — close-enough render).
- Editing from within preview (preview is read-only-with-jump-to-editor; never an editor).
- Cross-surface preview comparison (defer).