cocottetech/@platform/codebase/@features/ai-copilot/docs/tryst-profile-preview.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

7.1 KiB
Raw Blame History

tryst-profile-preview.screen

Rendered "as a Tryst client sees it" preview. Implements surface-tryst.brief.md §3. 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).

┌─────────────────────────────────────────────────┐
│ ◄ 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.

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.

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