cocottetech/@platform/codebase/@features/ai-copilot/docs/H-recurring-chores.brief.md

14 KiB
Raw Blame History

H — Recurring chores + multi-surface profile ops

Goal

The biggest single time-suck for Quinn is the maintenance loop — not posting content. Specifically:

  1. Tryst "I'm available" button — must be tapped every ~4 hours to stay visible in searches.
  2. TS4Rent equivalent — similar availability/bump pattern.
  3. About-me / description fields across every escort directory (Tryst, TS4Rent, Slixa, Eros, sometimes brand sites). Same idea, different copy per surface, drift over time.
  4. Tours — "I'll be in Berlin Oct 37, Paris 810" 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 the content-{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:0002: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 TuesdaySunday" → 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 composes platform-{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 37 and Paris 810."
  • 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_actions row.

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 37
─────────────────────────
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 H1H5

  • 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 37 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?