14 KiB
H — Recurring chores + multi-surface profile ops
Goal
The biggest single time-suck for Quinn is the maintenance loop — not posting content. Specifically:
- Tryst "I'm available" button — must be tapped every ~4 hours to stay visible in searches.
- TS4Rent equivalent — similar availability/bump pattern.
- About-me / description fields across every escort directory (Tryst, TS4Rent, Slixa, Eros, sometimes brand sites). Same idea, different copy per surface, drift over time.
- Tours — "I'll be in Berlin Oct 3–7, Paris 8–10" needs to update on every directory + her own bio sites + sometimes brand pages.
These are the kind of chores Quinn currently does manually, repeatedly, in slightly different shapes per surface. CocotteAI should make them feel like one decision — said once, approved once, done across surfaces.
Designer skim
- Headline UX: "Set policy, get a digest, snooze when needed." Tryst bumps run on a 4h policy not per-event approval. Multi-surface profile + tour fan-out arrive as one diff card → one approve → N adapter dispatches.
- Sections (5): H1 recurring auto-actions · H2 multi-surface profile editor · H3 tours · H4 multi-surface approval-card pattern · H5 density (groups / compact rows / anchor-and-rest / no-pagination / split-card) for 8+ surfaces.
- Blocking Qs: OPEN-DECISIONS.md → H-Q1 tour-vs-vacation-overlap timing.
Constraints
- These ops live on a different axis from content posting: they belong to
bookings-{directory}specialists (escort-directory axis from the plan), not thecontent-{surface}axis. ai-copilot fronts both for Quinn. - Profile / about-me editing changes a stable resource (not a stream of posts). UX should reflect edit, see diff, approve — not approve a one-off post.
- Availability bumping is recurring on a schedule (cadence per-surface; see e.g. surface-tryst.brief.md §canonical-facts for Tryst's tier-dependent cadence) — wrong UX is "approve every cycle." Right UX is "I trust you to do it" with visibility + override.
- Tours are bursty — Quinn declares one tour, the system fans it out to N surfaces in one shot.
Three UX patterns to design
H1 — Recurring auto-actions (Tryst available-bump, TS4Rent bump, etc.)
The bump-button-every-4-hours is not a per-event approval. Design it as an automation policy with these knobs:
Per-surface policy card (lives in settings AND surface-able in chat):
- ON / OFF master toggle
- Cadence (default 4h, editable: 2/3/4/6/8h)
- Active hours (e.g. 10:00–02:00 local) — no bumps overnight if Quinn doesn't want them
- Active days (M-F vs every day vs custom)
- Snooze (1h / 4h / today / until I say so) — quick-access from chat
- "Currently bumping" status indicator + countdown to next bump
- Last 10 bumps log (timestamp + success/fail per surface)
Chat-side affordances:
- Quinn says "pause Tryst bumps for today" → ai-copilot confirms + toggles policy.
- Quinn says "stop the bumps, I'm taking the week off" → suggests vacation mode (pauses all surfaces).
- Daily morning digest card: "Bumped Tryst 6× and TS4Rent 6× since you woke up yesterday."
- Failure surfaces: if a bump fails 2× in a row → notification with retry/escalate (treat as a high-stakes interrupt, the listing isn't visible).
Vacation mode (because manual snooze gets forgotten):
- "I'm off Tuesday–Sunday" → mass-pause bumps + auto-set tours to "not in city" wording on all directories.
- Auto-resume on Monday.
First-time vacation-mode explainer (only fires the first time Quinn invokes it):
- Card has a small "What this means" expander before the approve button.
- Spells out the side effects in plain prose: "Bumps pause on Tryst, TS4Rent, Slixa. Your tour wording shifts to 'returning Monday' on directories that support it. DM auto-replies switch to 'away' mode. Posts you've already scheduled still publish — vacation pauses future drafts, not the queue."
- "Don't show this again" toggle (defaults off — Quinn opts out, not in).
- Subsequent invocations skip the explainer and go straight to the confirmation card with a tiny "?" affordance to re-read the explainer if she wants.
H2 — Multi-surface profile editor (about-me / description fields)
Quinn's profile copy lives in ~6 places (each directory + her brand sites). Today she keeps them in her head and edits manually. CocotteAI replaces that with one editor.
Conversational entry:
- "Quinn, change my Tryst bio — make it less corporate." → ai-copilot drafts new copy → returns a diff card.
- "Tighten my about-me everywhere — drop the 'professional' line." → ai-copilot drafts per-surface variants → returns a multi-surface diff card (see H4 pattern).
Diff card (single-surface):
- Side-by-side current vs proposed (or above/below on iPhone narrow width).
- Inline edit on the proposed side before approving.
- Approve =
bookings-{directory}specialist composesplatform-{directory}/actions/update-profile. - Reject = nothing happens.
- Show: surface badge, character count + limit, last-edited timestamp.
Profile inspector drawer:
- Lives in chat-accessible drawers (brief B).
- One row per surface showing current copy excerpt + "edit" affordance + last-updated.
- "Sync from canonical" affordance: pick a canonical surface, push its copy to others (with per-surface ai-copilot rewrite for tone/length).
H3 — Tours (declare once, fan out to many)
The tour case is the cleanest example of "say it once, see one approval, done."
Conversational entry:
- "I'll be in Berlin Oct 3–7 and Paris 8–10."
- ai-copilot understands two trips, asks confirmation if ambiguous, then drafts updates for every surface that supports tours.
Tour approval card (multi-surface):
- City + dates header.
- List of surfaces (with per-surface visibility): "Will update Tryst, TS4Rent, Slixa, transquinnftw.com tours page, Eros (currently OFF — toggle to include)."
- Per-surface checkbox lets Quinn skip a surface if she doesn't want that audience to know.
- Approve = fans out updates via each
bookings-{directory}/actions/*. - Each per-surface update emits an
agent_actionsrow.
Tour calendar drawer (in brief B family):
- Timeline of upcoming + past tours.
- Tap a tour → see per-surface sync status (all green = listed everywhere; any red = needs attention).
- Edit a tour → re-runs the multi-surface diff approval.
H4 — The "multi-surface approval card" pattern (composable, used by H2 + H3)
A pattern that recurs across H2 and H3 deserves its own design treatment:
Anatomy:
- Header: action verb + target ("Update bio on 4 surfaces" / "Add Berlin tour to 5 surfaces").
- Per-surface row: surface chip + per-surface preview (the actual copy / dates being written) + checkbox.
- Bottom: confidence (aggregate across surfaces) + stakes (always medium minimum for profile; high if anything brand-sensitive flagged).
- Approve = bulk dispatch; loading state shows per-surface progress; final state is per-surface ✓/✗ with retry on failures.
This pattern replaces N individual approvals with one that fans out — central to the "say it once" promise.
H5 — Density: handling 8+ surfaces on a multi-surface card
Brief O's roster shows Quinn operates on 12 escort directories (N2) and 11 content surfaces (N1). The H2 profile-diff and H3 tour-fan-out cards must remain readable when fanning out to 8, 10, 12 rows. A flat list of 12 per-surface rows on iPhone breaks the card model — Quinn has to scroll inside the card, can't see the approve button, can't compare per-surface previews at a glance.
Three coordinated patterns solve this:
H5a — Default: category-grouped accordion (≥6 rows)
Threshold: when surface count > 5, switch from flat list to grouped accordion. Groups inherit brief O categories.
Header row per group:
- Group label ("Escort directories · 8" / "Content surfaces · 4" / "Brand sites · 2").
- Aggregate state: ✓ N enabled / ⓘ M with notes / ⚠ K flagged.
- Expand/collapse caret. Collapsed by default above 8 total; expanded by default if the group has ≤3 rows.
- Per-group bulk toggle: "All on / All off / Custom" — flips every checkbox in the group at once.
Inside an expanded group: per-surface rows as in H4 (surface chip + preview + checkbox + char count).
Approve button stays pinned to card bottom regardless of accordion state — never scrolls off-screen. Card max-height = 70% of viewport; internal scroll only inside the body, not the whole card.
H5b — Compact-row variant (≥12 rows)
When even grouped, a single category has ≥8 rows (the N2 directory case), switch that group's rows to a compact format:
- One line per surface:
[chip] surface-name · char count · ✓(or short note). - Tap row → expands inline (only one row at a time) to show the full per-surface preview + edit.
- Reduces visual mass ~3× while keeping every row addressable.
The compact variant is automatic based on row count, not a Quinn-toggleable preference — predictability beats configurability for a card she sees daily.
H5c — Anchor-and-rest split (tour fan-out specifically)
For H3 tour cards, Quinn's mental model is "Tryst, TS4Rent, my site, and the rest." Treat the anchor surfaces (Tryst, TS4Rent, tqftw.com — those Quinn touches by hand most) as a separate top group above the accordion:
Add Berlin tour · Oct 3–7
─────────────────────────
Anchors [3/3]
◉ Tryst "in Berlin Oct 3-7"
◉ TS4Rent "Berlin · Oct 3-7"
◉ tqftw.com "tour: Berlin · Oct"
Other directories (8) [6/8 ▾]
Brand sites (1) [1/1 ▾]
─────────────────────────
[ Approve 10 surfaces ]
Anchors are always expanded, never collapsed. The "rest" stays collapsed by default — Quinn glances at the count, approves, moves on. Tap to expand and curate when she actually wants to.
H5d — Cross-cutting rules
- Never paginate (no "page 2"). Quinn must see all affected surfaces from one screen — pagination hides risk.
- Per-group failure banners after dispatch: if 2 of 8 in the "Other directories" group failed, show a single inline "2 failed — tap to retry" affordance at the group header, not 2 separate banners.
- Aggregate confidence in the card footer averages across enabled surfaces only; disabled rows don't drag confidence down.
- Stakes escalation: if any single row's stakes would be 'high' standalone, the whole card stakes = 'high' (kill-switch boundary; see brief K K3).
- Search-within-card: above 12 rows, add a one-line search input above the accordion ("filter surfaces…"). Filters across all groups simultaneously; never hides the approve button.
H5e — When NOT to use a multi-surface card
If the per-surface drafts diverge enough that no single approval makes sense (e.g. one surface's draft is brand-sensitive while another's is rote), ai-copilot must split the card at draft time:
- Routine surfaces → one auto-approval card (medium stakes, batchable).
- Brand-sensitive surfaces → individual single-surface diff cards (H2 shape).
This decision is the specialist's, not Quinn's — encoded in bookings-{directory} policy. Quinn sees the split as two cards stacked in chat with a connector ("These 8 go together · This 1 wants your eyes").
States to design across H1–H5
- Policy card idle (currently bumping; next bump in N min).
- Policy card paused (snoozed; resume affordance prominent).
- Vacation mode active (banner across chat + all per-surface cards greyed).
- Diff card with no proposed changes (ai-copilot's draft was identical → "nothing to change").
- Diff card with edit-in-place.
- Multi-surface card mid-dispatch (skeleton per row).
- Multi-surface card post-dispatch with one surface failed (retry that one).
- Bump failure escalation (full-screen interrupt for "Tryst stopped accepting bumps for 30min").
- Density variants (H5): card with 5 flat rows; card with 8 rows grouped + collapsed; card with 12 rows compact-variant; tour card with anchor-and-rest split; search-filtered card at 12+ rows; split-card (H5e) showing routine + brand-sensitive stacked.
In-the-wild copy
H1 · policy card, currently bumping (hearth):
Bumped Tryst at 11:02. Next one's simmering for 3:02.
H1 · vacation-mode first-time explainer (working — Quinn is committing):
Vacation pauses bumps on Tryst, TS4Rent, Slixa. Tour wording shifts to "returning Monday" where directories support it. DM auto-replies switch to away. Scheduled posts still publish — this pauses future drafts, not the queue.
H1 · bump failure escalation (plain — full-screen interrupt):
Tryst rejected the last two bumps. You are not visible there right now. Re-auth or pause?
H2 · diff card, tightened bio (working):
New about-me for Tryst. The line about "corporate" is gone. Approve to push, edit before you send, or set aside.
H3 · tour-announcement multi-surface card (working):
Berlin Oct 3–7 ready to announce on 4 directories. Eros is off — flip it on if you want them included.
H5 · split-card connector (working):
These 8 go together. This 1 wants your eyes.
Daily-morning digest header (hearth):
Bumped Tryst 6× and TS4Rent 6× since you woke up yesterday. All steady.
Out of scope
- Synchronizing actual physical scheduling (Quinn's calendar) with tour declarations — that's a P5+ integration with calendar peers.
- Multi-account directories (Quinn → multiple identities on same platform).
Open questions
- Vacation mode wording per directory: ai-copilot drafts or template?
- Bump-failure threshold: 2 failures or 1 failure within 30min triggers escalation?
- Should the policy card live in settings, in chat as a card, or both? (Probably both — settings is authoritative, chat is convenient.)
- Tour conflicts (declared tour overlaps a "vacation mode" date range) — flag at declare time or at vacation declare time?