# tryst-home-cities.screen Tryst home-cities management — view + change Quinn's home cities, with cadence-gated change cooldown. Implements [surface-tryst.brief.md §7](./surface-tryst.brief.md). **Replaces** the earlier (incorrect) `tryst-location-lock.screen.md`, which mis-modeled Tryst as a fee-gated monthly lock; the real model is cadence-gated, N cities per tier, Y days between changes. Voice: working; plain on cooldown / tier-limit constraints. ## Layout (full-screen sheet) ``` ┌─────────────────────────────────────────────────┐ │ Cancel Tryst home cities Save │ 56pt ├─────────────────────────────────────────────────┤ │ │ │ ─── Your tier ─── │ │ TLC Premium · N home cities · change every Y d │ live tier info │ Tier supports: 3 home cities · 14-day cadence │ parametric — Quinn confirms │ │ │ │ ─── Current home cities ─── │ │ ┌─────────────────────────────────────────────┐│ │ │ San Francisco · primary · since 2026-04-12 ││ card per city │ │ [ Drop ] (after cooldown) ││ │ └─────────────────────────────────────────────┘│ │ ┌─────────────────────────────────────────────┐│ │ │ Berkeley · secondary · since 2026-04-12 ││ │ │ [ Drop ] (after cooldown) ││ │ └─────────────────────────────────────────────┘│ │ ⊕ Add a city (1 slot remaining) │ slot count │ │ │ ─── Change cooldown ─── │ │ Next change available: 7 days (2026-05-25) │ countdown │ ⓘ Tryst lets you change home cities every │ │ Y days. Cooldown applies to all slots. │ │ │ │ ─── Tours ─── │ │ Active tours don't count against home cities. │ │ • Berlin (Oct 3–7) — declared, doesn't consume │ │ a home-city slot │ │ [ Manage tours → ] │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Top bar | Cancel + Save (Save disabled until any pending change is valid + within cadence). | | Tier info | Live tier (basic / TLC / etc.) + the N + Y numbers for that tier. Pulled from Tryst on connect; cached. | | Home-city card | One per current city: name + role (primary/secondary/…) + since-date + Drop affordance (gated by cooldown). | | Add-a-city slot | When slots remain, this row appears as the affordance. Opens city picker. | | Cooldown countdown | Live timer + next-available date. Affects all home-city changes (not per-slot). | | Tours subsection | Read-only summary that tours are exception-layer; links to tour management. | ## States 1. **At slot count, no change pending** — full layout; no Save needed. 2. **Slot available, no change pending** — Add-a-city affordance prominent. 3. **Change pending, within cooldown** — Save disabled; banner: "Cooldown ends in N days. Save & schedule for then?" + opt-in scheduled-change affordance. 4. **Change pending, cooldown elapsed** — Save enabled. 5. **Saving** — banner: "Updating Tryst..." 6. **Saved** — sheet dismisses; receipt: "Home cities updated: SF + Berkeley → SF + Berkeley + Oakland." 7. **Save failed (Tryst-side)** — banner with retry per brief M. 8. **Tier upgrade detected mid-flow** (rare; Quinn upgraded between sheet open + save) — banner: "Your tier now supports {new-N} cities. Refresh." Adjusts slot count. 9. **Tour conflict** (Quinn adds a home city for a date her tour is in that same city) — soft warning: "You're touring {city} that week. The tour declaration already makes you visible there. Use a different home-city slot?" 10. **Cooldown reset detected** (Tryst's policy changed, e.g. promo) — banner: "Tryst opened up changes early. Cooldown waived." Save enabled. 11. **VoiceOver** — tier info first; each city card announces role + since-date + drop-availability. ## Interactions - **Tap city card** → opens city detail (rare — defer). - **Tap "Drop"** → confirms (medium-stakes); if cooldown elapsed, removes the city; if within cooldown, surfaces banner. - **Tap "Add a city"** → city picker (autocomplete from Tryst's city list); placeholder if no city matches. - **Tap "Manage tours →"** → [tour-leg-detail.screen.md](./tour-leg-detail.screen.md). - **Tap Save** → commits any pending diffs; writes audit row per brief I. - **Swipe-down with dirty** → "Discard pending changes?" ## Edge cases - **Tier info not fetched yet** (Quinn just connected) — placeholder copy "Loading your tier..." with skeleton. - **Slot count = 0 (basic tier?)** — UX collapses to "single home city only at your tier; upgrade to add more." - **Cooldown crossing daylight-savings / TZ boundary** — uses Tryst's server time, not Quinn's local; display in both formats. - **Trying to drop the only home city** — Save blocked: "Tryst requires at least 1 home city." - **City not in Tryst's autocomplete list** — placeholder fallback ("Tryst doesn't have this city. Try a nearby one?"). - **Tour declared in a city Quinn already has as home** — chip: "{city} is already a home city; tour declaration is redundant but harmless. Skip declaring?" - **Cooldown reset to zero from Tryst-side admin action** — banner shows the reset event. ## *Generalization callout* Home-city / location-lock models vary widely across escort directories: - **TS4Rent**: documented in surface-ts4rent (TBD). Different model. - **Slixa**: documented in surface-slixa (TBD). Different model. - **Eros**: per-city listings (Quinn can list in N cities with separate ads each, no unified "home"). Different model. - **Most content surfaces (OF, X, IG, …)**: no city model — global presence. Per-surface brief **must** flag the exact mechanic. Do NOT reuse Tryst's screen layout assuming the model carries over. ## Related - [surface-tryst.brief.md §7](./surface-tryst.brief.md) — parent (corrected 2026-05-18). - [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md) — sibling profile-level editing. - [tour-leg-detail.screen.md](./tour-leg-detail.screen.md) — tour-as-exception layer. - [Brief I](./I-audit-trust-replay.brief.md) — every home-city change = audit row. - [Brief M](./M-error-degraded-modes.brief.md) — save-failure pattern. ## Out of scope - The exact N + Y per Tryst tier — Quinn confirms once apricot is reachable + we've connected. - Multi-account home-city management (single-account at P0). - Predictive home-city suggestions based on tour patterns (defer; P3+).