331 lines
29 KiB
Markdown
331 lines
29 KiB
Markdown
# surface-tryst — Tryst as a managed surface
|
||
|
||
The deep brief for **Tryst** specifically. Maps the generic patterns (H1 bumps, H2 profile edits, H3 tours, K1 blocklist, P inbox, T metrics, I audit) onto Tryst's actual UI, data model, and operational reality. **Written as a per-surface template** — every section carries a *Generalization callout* describing which pattern reuses across other directories and which is Tryst-specific.
|
||
|
||
Subsequent per-surface briefs (`surface-ts4rent.brief.md`, `surface-slixa.brief.md`, `surface-eros.brief.md`, `surface-onlyfans.brief.md`) inherit this structure.
|
||
|
||
## §1 Surface identity
|
||
|
||
- **What Tryst is**: a TLC (top-tier curated) escort directory; ranking is partly visibility-cadence-driven (the "I'm Available" heartbeat), partly review-driven, partly profile-completeness-driven.
|
||
- **Audience**: Tryst-side clients are middle-to-upper-tier with stronger discretion expectations; their first-touch is browsing search filters by city + body type + services.
|
||
- **Quinn's positioning**: hyper-femme, real-trans-futa, Bay Area-resident with quarterly Berlin / NYC / LA tours. Quinn is a **TLC tier subscriber** (monthly TLC-credit spend per §canonical-facts; home-city changes cadence-gated, not fee-gated).
|
||
- **Why Tryst is the first surface to ship**: highest time-cost per Quinn (frequent bumps per §canonical-facts) + highest revenue funnel + clearest pattern to template against.
|
||
|
||
*Generalization callout*: every per-surface brief opens with surface identity. Other directories may not be TLC-tiered, may not have ranking, may not have home-city cadence. Map the specific positioning, ranking model, audience type, and tier-subscription posture per surface.
|
||
|
||
## §canonical-facts (SSOT — sourced from v1 `.quinn/platforms/tryst/research.md` 2026-03-29, Quinn-direct corrections 2026-05-18)
|
||
|
||
This section is the **single source of truth** for Tryst platform mechanics. Other sections (and dependent screens / contracts / specialists) MUST reference these values via `§canonical-facts` instead of duplicating numbers inline. Per SSOT.1 discipline (see [_engineering-talent-scout-port.md §0](./_engineering-talent-scout-port.md)).
|
||
|
||
### Tier table
|
||
|
||
TLC = "Tryst Love Credits" — the platform's currency. You buy TLC with real money; TLC is spent to activate a subscription tier. There is **no separate credits product** — TLC + tier are one knob.
|
||
|
||
| Tier | TLC/mo | USD/mo (~) | Photo slots | Tour slots | Home bases | Bump cadence | Native analytics |
|
||
|---|---|---|---|---|---|---|---|
|
||
| Basic | 35 | $40.71 | 16 | 1 | 1 | Every 3h | — |
|
||
| Standard | 75 | $87.24 | 24 | 5 | 1 | Every 3h | Rolling 30-day |
|
||
| Premium | 100 | $116.32 | 32 | 10 | 1 | Every 2h | Rolling 30-day |
|
||
| Premium+ | 150 | $174.48 | 40 | 10 | 3 (simultaneous) | Every 2h | Rolling 30-day |
|
||
|
||
### Tryst-platform invariants (not tier-dependent)
|
||
|
||
- **No native reviews system** (corrected 2026-05-18). Aggregator reviews are N7 surfaces (TER / PunterNet / USASexGuide / TNABoard), not Tryst.
|
||
- **No "location-lock fee"** — there is no $45 re-lock charge. Home-city changes are cadence-gated only (Y days between changes; **Y to confirm with Quinn**).
|
||
- **Verification (Sumsub)**: enforcement inconsistent; re-verification delays can exceed 14 business days. Maintain verified status proactively — don't let it lapse.
|
||
- **Payment-processor friction**: Visa/Mastercard refuse Tryst transactions for some clients; crypto / alternative payment expected.
|
||
- **Fraud baseline**: 70–90% of profiles estimated to be scams/abandoned (per Ho-Work Research Group). Verified-and-responsive is a strong differentiator.
|
||
- **Founded 2018 by Assembly Four** (Australian sex worker tech collective). Community-respected mission.
|
||
- **Location pulse strategy**: update home base 10–14 days before tour arrival to catch local search traffic in advance.
|
||
|
||
### Quinn's current state (snapshot 2026-03-29)
|
||
|
||
- Tier: **Basic** (TLC 35/mo) — upgrading before photos go live.
|
||
- TLC purchased one-time: 150 credits on 2026-03-28 (~$170).
|
||
- Tour itinerary: SF → LV → Chicago (Premium+ would cover all three home-base slots simultaneously without swaps).
|
||
|
||
### Consumers of this table (auto-update when §canonical-facts changes)
|
||
|
||
- §3 Profile data model (photo-slot count)
|
||
- §4 Visibility heartbeat (bump cadence)
|
||
- §7 Home cities (N + Y)
|
||
- §9 Native metrics (tier-gated rolling-30-day analytics)
|
||
- §14d Cross-surface participation (photo + rates adaptation)
|
||
- [policy-card.screen.md](./policy-card.screen.md) — cadence picker
|
||
- [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md) — slot count
|
||
- [tryst-home-cities.screen.md](./tryst-home-cities.screen.md) — N + Y
|
||
- [analytics-dashboard.screen.md](./analytics-dashboard.screen.md) T3 row — visibility tier-gated
|
||
- [specialist-bookings-tryst.contract.md](./specialist-bookings-tryst.contract.md) — Auto rules
|
||
- [tryst-connect.flow.md](./tryst-connect.flow.md) — tier-specific transcripts
|
||
- [brief H §H1](./H-recurring-chores.brief.md) — generic pattern; Tryst specifics here
|
||
|
||
## §2 Auth & connect — two paths, one runtime
|
||
|
||
- **Tryst auth shape**: web-only (no public API); username/password + optional 2FA + occasional captcha. Cocotte supports **two auth-grant paths** ([tryst-connect.screen.md](./tryst-connect.screen.md) covers both). Either way, runtime actions execute through the same container adapter ([_engineering-surface-adapter-container.md](./_engineering-surface-adapter-container.md)) — the modes differ only in *how the session was originally established* and *how re-auth recovers*.
|
||
|
||
### §2a Cookie-paste mode (fast onboarding)
|
||
- Quinn signs in to tryst.link in Safari, copies her session cookie, pastes it into Cocotte's connect screen.
|
||
- Cocotte loads the cookie into a persistent container browser context. From that moment, all actions run through the same fingerprinted Playwright session.
|
||
- **Trade-off**: zero setup-time captcha exposure (Tryst already authenticated Quinn in Safari). When the cookie expires (~30 days, or earlier on Tryst-side rotation / IP flag / password change), Cocotte **cannot self-recover** — it surfaces a degraded-state banner ([brief M §M2a](./M-error-degraded-modes.brief.md)) and Quinn re-pastes.
|
||
- Best for: getting Tryst connected in 30 seconds when Quinn doesn't want to enter her password or doesn't have a captcha-solver service up yet.
|
||
|
||
### §2b Full-credentials mode (autonomous re-login)
|
||
- Quinn enters username + password + optional TOTP secret once.
|
||
- Cocotte verifies via a real container login: Playwright spins up, navigates tryst.link, fills the form, handles 2FA via auto-generated TOTP, handles captcha via the 3-tier solver (below).
|
||
- Subsequent re-auths happen automatically. Quinn rarely sees them.
|
||
- **Trade-off**: setup-time captcha exposure (Tryst presents a captcha on first login from a new IP/fingerprint — Cocotte must solve it during initial verify). Requires Tier 2 ML solver OR Tier 3 HITL.
|
||
- Best for: long-haul; this is the recommended default once captcha-solver is bootstrapped.
|
||
|
||
### §2c Captcha handling (3-tier per `_engineering-surface-adapter-container.md` Layer 5)
|
||
- **Tier 1** — anti-detection (stable fingerprint, human-like timing, Tor circuit rotation) tries to avoid captcha trigger. Both auth paths benefit from Tier 1 on ongoing actions.
|
||
- **Tier 2** — ML captcha solver, ported from v1 `talent-scout` (per [archive map](./../../../../../.archive/ARCHIVED.md)) — 3.8GB model rebuilt in `@applications/@ml/`. Tier 2 is only invoked in full-credentials mode at login + during recurring actions that hit captcha walls.
|
||
- **Tier 3** — HITL: when Tier 1 + Tier 2 both fail, Cocotte pings Quinn's iOS with the challenge image; she taps to solve; adapter resumes. Available in both modes.
|
||
|
||
### §2d Runtime convergence
|
||
- After successful connect via either path, ongoing actions are identical: Playwright + Tor + fingerprint manager + persistent browser context per (user_id, surface).
|
||
- The container reuses the same browser context across all actions. Re-auth path only matters when the *session itself* dies; ongoing actions don't care which mode established the session.
|
||
|
||
### §2e Mode-switching post-connect
|
||
- Quinn can switch modes anytime via settings → Surfaces → Tryst → "Switch auth mode" — per `tryst-connect.screen.md`. Archived auth-state is kept for switch-back.
|
||
|
||
### §2f Credentials at rest
|
||
- Both modes' artifacts encrypted in `platform.db` `credentials` table (per-user `user_id` + optional `org_id`; AES-256-GCM with custodian-delivered session keys; never plaintext on disk). Cookie-mode rows have `auth_mode='cookie'` + a `cookie_blob_enc` field; full-mode rows have `auth_mode='credentials'` + standard `username` / `password_enc` / `totp_secret_enc`. Per `_engineering-credentials-vault.md`.
|
||
|
||
*Generalization callout*: dual-mode auth (cookie-fast + full-creds) generalizes to every operate-on surface that accepts session cookies. Per-surface variants:
|
||
- **TS4Rent / Slixa / Eros / OF**: identical dual-mode shape.
|
||
- **X / Threads / Bluesky**: OAuth-only — neither cookie nor creds; different connect screen.
|
||
- **WhatsApp / Telegram / Signal**: QR-pair only (Android emulator container).
|
||
- **Bio-link aggregators (beacons, linktree)**: typically dual-mode.
|
||
|
||
Per-surface brief documents which modes are supported + the captcha frequency / fingerprint sensitivity differences.
|
||
|
||
## §3 Profile data model
|
||
|
||
Tryst's profile schema (what Cocotte writes to via the adapter):
|
||
|
||
| Field | Type | Editable | Constraints |
|
||
|---|---|---|---|
|
||
| about-me | text | yes | ~500 chars, plain text |
|
||
| services list | enum chips | yes | from a fixed Tryst-side taxonomy |
|
||
| rates table | tabular | yes | tiered: incall-1hr / incall-2hr / outcall-1hr / overnight |
|
||
| hours | weekday schedule | yes | per-day windows |
|
||
| location (current city) | enum from Tryst's city list | yes (monthly lock) | locked per month except for declared tours |
|
||
| tour cities | list of (city + dates) | yes | per H3 multi-surface fan-out |
|
||
| photos | slots: 1 hero + N gallery | yes | N is tier-dependent — see §canonical-facts (16 / 24 / 32 / 40 by tier); per-photo flags (NSFW-allowed, public, expiration, face-blurred) |
|
||
| age verification | Sumsub status | read-only via Tryst | renew per Tryst cadence |
|
||
| reviews | read-only | no | Tryst-side reviews ingested, response affordances per §8 |
|
||
| native metrics | read-only | no | profile views, search rank |
|
||
|
||
Screens consuming this model: [tryst-profile-preview.screen.md](./tryst-profile-preview.screen.md), [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md), [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md).
|
||
|
||
*Generalization callout*: every surface has a profile schema. Map it. Tabular fields (rates, hours) need structured editors; brief H2's diff-card pattern is for *free-text* — extend it for tabular per [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md). Other directories will have different field sets (e.g. OF has subscription pricing tiers; TS4Rent has separate gov-name handling).
|
||
|
||
## §4 Visibility heartbeat (Tryst bumps)
|
||
|
||
Inherits [brief H §H1](./H-recurring-chores.brief.md) policy-card. Tryst-specific:
|
||
|
||
- **Cadence**: tier-dependent — see §canonical-facts. Basic/Standard get "Available now" every 3h; Premium/Premium+ every 2h. Cocotte schedules per Quinn's tier; never exceeds Tryst's own rate limit.
|
||
- **Bump endpoint**: cookie-authed POST to a specific tryst.link route (specific URL captured in the upstream adapter; not in this design doc).
|
||
- **Down-rank triggers**: no bump in 24h → drops below recently-bumped tier; no bump in 7d → archived from filter; failed bumps don't down-rank but cap at 2 per hour to avoid bot detection.
|
||
- **Tour exception**: when Quinn is in a declared tour city, bumps run on that city's listing instead of base-city.
|
||
- **Cocotte's policy-card** (per [policy-card.screen.md](./policy-card.screen.md)) is the canonical Tryst surface for cadence + active window + vacation. Tryst's specific failure language ("session expired" / "rate-limited by Tryst" / "listing archived") is in §12.
|
||
|
||
*Generalization callout*: most directories have a bump-equivalent. Cadence rules vary (TS4Rent 6h, Slixa 8h, Eros tier-dependent). Per-surface brief documents the specific cadence + rate-limit + down-rank triggers; the policy-card.screen.md generalizes to all directories.
|
||
|
||
## §5 Inbox / DM mechanics
|
||
|
||
Tryst's thread model:
|
||
|
||
- Threads start from a client's direct contact (form-based or DM-equivalent). Tryst stores them on tryst.link.
|
||
- Read receipts: yes (Tryst marks read state).
|
||
- Attachments: photos only.
|
||
- Tryst-side blocked clients see "this provider isn't accepting inquiries" — they can't message.
|
||
- Per-thread states: new / read / replied / blocked / archived.
|
||
|
||
Cocotte renders Tryst threads in [tryst-inbox.screen.md](./tryst-inbox.screen.md) — sibling to unified-inbox.screen.md but Tryst-specific because: (a) verified-only filter (Tryst-side verified clients), (b) listing-rank of sender shown for context, (c) location-of-sender chip (city) since Tryst routes by city.
|
||
|
||
Replies post via tryst.link's DM mechanism through the adapter; same approval-card flow as other surfaces.
|
||
|
||
*Generalization callout*: unified-inbox.screen.md is the parent feed; per-surface variants (tryst-inbox, ts4rent-inbox, slixa-inbox, etc.) add surface-specific metadata + per-surface reply mechanics. Some surfaces have richer thread models (OF has tip-attached DMs; Reddit has subreddit context); per-surface brief documents.
|
||
|
||
## §6 Verification (KYC)
|
||
|
||
Tryst's verification is **Sumsub-backed**: government ID + selfie + (sometimes) liveness check. Renewal cadence is roughly 12 months; Tryst notifies via in-app banner + email.
|
||
|
||
**Deadname risk** (per [specialist-bookings-tryst.contract.md](./specialist-bookings-tryst.contract.md)): Quinn's gov-name on her ID differs from her display name; the verification flow surfaces gov-name to Sumsub, then to Tryst's compliance team. Cocotte never surfaces this to Quinn's customers, never logs it visibly.
|
||
|
||
The [tryst-verification.screen.md](./tryst-verification.screen.md) screen handles re-up: ID-upload, status dashboard, deadname-risk acknowledgement.
|
||
|
||
*Generalization callout*: each directory's KYC differs. TS4Rent shares Sumsub; Slixa uses a different vendor; OF uses its own internal verify. Per-surface brief flags the verifier + cadence + any privacy concerns.
|
||
|
||
## §7 Home cities (cadence-gated, not fee-gated)
|
||
|
||
**Correction 2026-05-18**: an earlier draft described Tryst as having a "monthly location-lock" with a $45 re-lock fee. That's wrong. Tryst's actual model:
|
||
|
||
- Each Tryst account has **N home cities** that appear in city-filter searches. **N is tier-dependent — see §canonical-facts** (Basic/Standard/Premium = 1; Premium+ = 3 simultaneous).
|
||
- Home cities can be changed **every Y days** — cadence-gated, not fee-gated. **Y to confirm with Quinn** (research suggests 10–14 days; not yet authoritative).
|
||
- **No re-lock fee** for normal changes; the gate is the cadence cooldown, not money.
|
||
- Tours are an **exception layer**: declared tour cities make Quinn searchable in those cities for the tour dates without consuming a home-city slot. Tour-slot count is tier-dependent — see §canonical-facts (1 / 5 / 10 / 10).
|
||
|
||
[tryst-home-cities.screen.md](./tryst-home-cities.screen.md) (renamed from `tryst-location-lock.screen.md`) handles: viewing current home cities, requesting a change (gated by cadence countdown), and conflict resolution with declared tours (per [tour-leg-detail.screen.md](./tour-leg-detail.screen.md)).
|
||
|
||
*Generalization callout*: home-city models vary widely across directories. Some have no city model (post once, visible everywhere). Some are fee-gated. Some are cadence-gated. Per-surface brief documents the exact mechanic; this is the Tryst-specific version. **Don't assume Tryst's model applies to TS4Rent / Slixa / Eros — each has its own.**
|
||
|
||
## §8 Reviews & testimonials — N/A on Tryst
|
||
|
||
**Correction 2026-05-18**: an earlier draft claimed Tryst surfaces reviews. **Tryst does not have a reviews system.** Reviews of providers happen on *third-party* aggregator sites (TheEroticReview, PunterNet, USASexGuide, TNABoard — see [O §N7](./O-surfaces-roster.brief.md)) — those are not Tryst.
|
||
|
||
For Tryst specifically:
|
||
- No 1–5 star ratings.
|
||
- No client-visible profile testimonials.
|
||
- No "respond to review" affordance.
|
||
|
||
Cocotte's reviews UX lives in **`reviews-list.screen.md`** (renamed from `tryst-reviews.screen.md`) and serves the N7 reviews-aggregator category, not Tryst.
|
||
|
||
*Generalization callout*: reviews-on-the-provider-profile is **rare** among escort directories. Most don't have them. The "reviews" pattern is owned by N7 aggregator sites + content-platform comment/tip systems (OF, Fansly). Per-surface brief MUST flag explicitly whether the platform has native reviews — incorrect assumptions here are costly.
|
||
|
||
## §9 Native metrics
|
||
|
||
**Tier-gated** — see §canonical-facts. Standard / Premium / Premium+ tiers receive Tryst's native **rolling 30-day analytics**: profile views, search-rank in filter, click-through to message form. **Basic tier has no native analytics** — Cocotte's T3 row displays an "Upgrade to Standard for Tryst analytics" empty-state.
|
||
|
||
Cocotte ingests via the adapter into `surface_metrics` table (per [_engineering-talent-scout-port.md §0.2](./_engineering-talent-scout-port.md)); [analytics-dashboard.screen.md](./analytics-dashboard.screen.md) T3 panel "Per-surface · top movers" reads from this. A Tryst-specific drill-down (not yet a dedicated screen) lives in analytics-dashboard's filter scope.
|
||
|
||
The `bookings-tryst` adapter polls Tryst's analytics endpoint only when Quinn's tier ≥ Standard — tier-detection lives in the adapter; specialist surfaces "Tryst metrics last refreshed N min ago" in T3.
|
||
|
||
*Generalization callout*: every surface exposes some analytics. Vary in shape (OF: subscriber count + revenue + tip stats; X: follower count + impressions + engagement-rate). Per-surface brief documents schema. **Per-surface briefs MUST flag whether native analytics are tier-gated** — incorrect assumption here means showing empty states to free-tier users.
|
||
|
||
## §10 Tryst-side blocklist
|
||
|
||
Tryst has its **own** client-blocklist on tryst.link. This is **distinct from** Quinn's personal K1 blocklist:
|
||
|
||
- **K1 personal**: stops Cocotte from drafting replies; client can still see Quinn's listing.
|
||
- **Tryst-side**: hides Quinn's listing from the specific client entirely.
|
||
|
||
When Quinn blocks a client in CocotteAI (via [add-blocklist-entry.screen.md](./add-blocklist-entry.screen.md)), the action defaults to K1-only with an opt-in chip "Also block on Tryst (they won't see you)." Tryst-side block-actions surface as separate audit rows.
|
||
|
||
*Generalization callout*: most surfaces have a native blocklist distinct from K1. Per-surface brief documents the surface-side block API + recommended default (K1-only with surface-side opt-in vs both).
|
||
|
||
## §11 Rate / service editing UX
|
||
|
||
Tryst's rates table is structurally tabular (incall-1hr / incall-2hr / outcall-1hr / overnight × USD). Free-text editing breaks the schema. [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md) renders it as a structured table with currency-formatted inputs.
|
||
|
||
Services list is a chip-multi-select from Tryst's fixed taxonomy.
|
||
|
||
*Generalization callout*: tabular fields (rates, hours, schedules) need structured editors. Brief H2's diff-card is for free-text; this brief extends it for tabular. Other directories may have richer or simpler structured fields.
|
||
|
||
## §12 Failure modes
|
||
|
||
Tryst-specific failure dictionary (consumed by [policy-card.screen.md](./policy-card.screen.md), [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md), brief M):
|
||
|
||
| Failure | Detection | UX surface | Voice register |
|
||
|---|---|---|---|
|
||
| Session expired | 401 on any action | banner + re-auth route | plain |
|
||
| Rate limited | 429 from tryst.link | banner "Tryst's slowing me down; backing off" | plain |
|
||
| Listing archived (no recent bump) | profile fetch returns archived state | high-stakes interrupt | plain |
|
||
| Verification expiring soon (<14d) | Tryst-side notice ingested | banner on profile screens | working |
|
||
| Verification expired | Tryst hides listing | high-stakes interrupt | plain |
|
||
| Photo rejected | adapter response on upload | inline error on photo slot | working |
|
||
| Location-lock conflict | declaring tour overlaps lock | tour-leg-detail conflict pill | working |
|
||
| Bumped but invisible | bump succeeds but profile-fetch returns hidden | escalation: re-auth or platform-side issue | plain |
|
||
| Sumsub re-verify mid-action | tryst.link redirects to Sumsub during bump | high-stakes interrupt | plain |
|
||
|
||
*Generalization callout*: every surface has its own failure dictionary. Per-surface brief documents the surface-specific symptoms + UX response. Brief M's three-tier degradation playbook (soft / backend / device) is the parent pattern.
|
||
|
||
## §13 Voice register on Tryst
|
||
|
||
When Cocotte speaks **as Quinn on Tryst** (drafted replies, profile copy, tour announcements), the voice register differs from Cocotte's own:
|
||
|
||
- **Tryst-audience voice**: warmer than working, more knowing than hearth. Slightly suggestive without being explicit (Tryst is SFW-leaning on profiles, NSFW-friendly in DMs). Avoids clinical / medical / corporate registers.
|
||
- **Cocotte-to-Quinn-in-chat voice** about Tryst: working register when discussing operations; hearth in receipts; plain on failures (per §12).
|
||
- **Persona binding**: the `cocotte-book` persona (ported from v2, per brief J) holds Quinn's Tryst-public voice. The `cocotte` persona is more general-purpose customer-facing.
|
||
|
||
*Generalization callout*: each surface has an audience-specific persona that Cocotte writes *as Quinn* in. The Cocotte-to-Quinn voice is consistent across surfaces (per [00-system-voice.md](./00-system-voice.md)); only the audience-facing persona shifts per surface.
|
||
|
||
## §14 Conversational management (canonical entry points)
|
||
|
||
Per [00-system-conversational-ux.md](./00-system-conversational-ux.md), Tryst is managed primarily through conversation in chat-home. The screens enumerated below (§14d) are tools Cocotte invokes when richer input/output is needed; they're not the canonical path.
|
||
|
||
### §14a Verbs Quinn uses
|
||
|
||
Quinn-says → Cocotte routes to `bookings-tryst` specialist (per [specialist-bookings-tryst.contract.md](./specialist-bookings-tryst.contract.md)):
|
||
|
||
| Quinn says | Action | Screen invoked? |
|
||
|---|---|---|
|
||
| "bump tryst" / "bump my tryst now" | Manual bump (out-of-policy) | No — chat receipt only |
|
||
| "pause tryst" / "pause tryst for an hour" / "pause overnight" | Policy-card snooze | No |
|
||
| "stop tryst bumps" / "vacation tryst" | Vacation mode | No |
|
||
| "bump every 3h not 4" | Cadence change | No (in-chat confirm) — *unless* the request is ambiguous, then Cocotte invokes [policy-card.screen.md](./policy-card.screen.md) for structured edit |
|
||
| "rewrite my tryst bio" / "make my bio less corporate" | Profile-copy draft | Cocotte drafts in chat; if Quinn wants to fine-edit, invokes [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md) inline |
|
||
| "hike tryst rates 10%" / "set tryst incall 1h to $400" | Rates change | Cocotte drafts the diff in chat; complex multi-tier edits invoke the structured editor |
|
||
| "set my tryst hero to the red dress" | Hero photo swap | Cocotte invokes [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md) for photo selection |
|
||
| "add a tryst photo" / "remove the office photo from tryst" | Photo CRUD | Photo manager invoked (visual selection is screen-shape) |
|
||
| "add berkeley as a tryst home city" / "drop SF" | Home-city change | Cocotte handles in chat if straightforward; cooldown surfaces inline. Quinn taps to expand [tryst-home-cities.screen.md](./tryst-home-cities.screen.md) for full slot view |
|
||
| "show me my tryst profile" | Preview | Invokes [tryst-profile-preview.screen.md](./tryst-profile-preview.screen.md) |
|
||
| "what's my tryst verification status" / "re-verify tryst" | Verification | Cocotte answers status in chat; re-verify triggers [tryst-verification.screen.md](./tryst-verification.screen.md) (Sumsub flow needs a screen) |
|
||
| "show me tryst messages" / "any new tryst inquiries" | Inbox | Invokes [tryst-inbox.screen.md](./tryst-inbox.screen.md) |
|
||
| "reply to felix on tryst" | DM reply draft | Cocotte drafts in chat; inbox screen optional for thread context |
|
||
| "connect tryst" / "set up tryst" | Auth-grant | See [tryst-connect.flow.md](./tryst-connect.flow.md) — conversational; [tryst-connect.screen.md](./tryst-connect.screen.md) is the fallback |
|
||
|
||
### §14b Pure-chat actions (no screen)
|
||
|
||
These resolve in chat-bubble exchange without invoking any screen:
|
||
|
||
- Bumping (manual + policy edits at simple parameter level)
|
||
- Pause / snooze / vacation
|
||
- Status queries ("what's my tryst doing right now", "when was my last bump", "is my profile live")
|
||
- Simple replies to inbound DMs
|
||
- Single-field bio rewrites that don't need diff-viewing
|
||
- Cadence + active-window simple adjustments
|
||
- Adding / removing a tour declaration
|
||
|
||
### §14c Screen-invoking actions (rich input or output needed)
|
||
|
||
These trigger a screen because chat-shape can't carry the data efficiently:
|
||
|
||
- Photo selection / reorder (visual gallery; [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md))
|
||
- Multi-field profile edits (about-me + rates + services + hours in one pass; [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md))
|
||
- Profile preview render (visual layout; [tryst-profile-preview.screen.md](./tryst-profile-preview.screen.md))
|
||
- Home-cities slot management (tiered constraint surface; [tryst-home-cities.screen.md](./tryst-home-cities.screen.md))
|
||
- KYC re-up (Sumsub vendor flow; [tryst-verification.screen.md](./tryst-verification.screen.md))
|
||
- Inbox thread browse (per-thread context with metadata; [tryst-inbox.screen.md](./tryst-inbox.screen.md))
|
||
|
||
In each case, Cocotte invokes the screen *as part of her turn* — e.g. "Drafted three rate variants — [opens diff editor inline]" — and the conversation resumes after Quinn acts.
|
||
|
||
### §14d Cross-surface participation
|
||
|
||
Tryst is a **full participant** in cross-surface fanouts (per [cross-surface-fanout.brief.md](./cross-surface-fanout.brief.md)). When Quinn says "apply to all escort platforms" or "hike rates 15% everywhere," Tryst is included in the resolved audience. Tryst-specific adaptations applied via `personas.facets[tryst]`:
|
||
|
||
- About-me copy adapted to Tryst's 500-char limit + hearth-voice-lean
|
||
- Rates rendered into Tryst's tabular schema (incall/outcall × 1hr/2hr/overnight)
|
||
- Tour announcement composes the Tryst-specific phrasing convention
|
||
- Photo changes respect Tryst's hero + tier-dependent gallery slot model (see §canonical-facts) + face-blur rules
|
||
|
||
**NOT fanout-participants** for Tryst (Tryst-only): home cities (tier-gated; doesn't generalize), Sumsub KYC (per-surface verification), connect/auth (per-surface auth-grant).
|
||
|
||
### §14e Voice-mode adaptations
|
||
|
||
Per [voice-input-settings.screen.md](./voice-input-settings.screen.md), Tryst management over voice works identically with two adaptations:
|
||
- Visual-shape outputs (preview render, photo gallery) are summarized verbally + offered as "tap to see" if Quinn wants the screen.
|
||
- Secure inputs (cookie paste, password during connect) prompt for iOS-native secure entry; voice continues for everything else.
|
||
|
||
*Generalization callout*: every per-surface brief MUST include a §14 documenting (a) verbs Quinn uses, (b) pure-chat actions, (c) screen-invoking actions with reasons, (d) cross-surface participation flags, (e) voice-mode adaptations. The shape of §14 is the same across all per-surface briefs; only the per-surface verb + screen lists differ.
|
||
|
||
## Related
|
||
|
||
- [Brief H](./H-recurring-chores.brief.md) — bump policy + multi-surface profile + tour patterns.
|
||
- [Brief K](./K-safety-blocklist.brief.md) — K1 personal blocklist (companion to §10 Tryst-side block).
|
||
- [Brief P](./P-inboxes.brief.md) — unified-inbox parent.
|
||
- [Brief I](./I-audit-trust-replay.brief.md) — every Tryst action is an `agent_actions` row.
|
||
- [Brief M](./M-error-degraded-modes.brief.md) — degradation playbook (§12 instantiates).
|
||
- [Brief T](./T-analytics-dashboard.brief.md) — §9 metrics consumer.
|
||
- [Brief N](./N-provider-coop.brief.md) — coop intel may flag Tryst clients (companion to §10).
|
||
- [Brief V](./V-data-portability-erasure.brief.md) — exporting Tryst credentials + history.
|
||
- [specialist-bookings-tryst.contract.md](./specialist-bookings-tryst.contract.md) — specialist consuming this brief.
|
||
- [policy-card.screen.md](./policy-card.screen.md) — H1 instantiation for Tryst.
|
||
- [tryst-connect.screen.md](./tryst-connect.screen.md), [tryst-inbox.screen.md](./tryst-inbox.screen.md), [tryst-profile-preview.screen.md](./tryst-profile-preview.screen.md), [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md), [tryst-photo-manager.screen.md](./tryst-photo-manager.screen.md), [tryst-home-cities.screen.md](./tryst-home-cities.screen.md), [tryst-verification.screen.md](./tryst-verification.screen.md) — Tryst-specific screens. (Reviews UX at [reviews-list.screen.md](./reviews-list.screen.md) serves N7 aggregators, not Tryst.)
|
||
|
||
## Out of scope
|
||
|
||
- Actual Tryst adapter code (lives in `@cocottetech/@platform/codebase/@features/bookings-tryst/adapter/` per [_engineering-surface-adapter-container.md](./_engineering-surface-adapter-container.md) + [_engineering-talent-scout-port.md](./_engineering-talent-scout-port.md)).
|
||
- Per-surface engineering migration (e.g. `surface_credentials` schema details).
|
||
- Subsequent per-surface briefs (TS4R, Slixa, Eros, OF) — they inherit this structure but get their own files.
|