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

108 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 37) — 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+).