cocottetech/@platform/codebase/@features/ai-copilot/docs/O-surfaces-roster.brief.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

21 KiB
Raw Blame History

N — Surfaces roster (canonical)

Goal

Source-of-truth enumeration of every external platform / surface CocotteAI must operate on. Established from Quinn's lived inventory in v2 (~/Code/@projects/@lilith/lilith-platform.live/users/transquinnftw/agents/coworker-agent/data/business/registrations.md and data/context.md) — not from the design imagination.

Briefs A, F, H, K, L all reference "surfaces" or SurfaceKind. Until this brief, those references were under-enumerated. Use this list as the canonical roster; mirror it into enums.ts + the SQL surface_kind ENUM via a follow-up migration.

Designer skim

  • Headline UX: Quinn operates on 24 surfaces in 5 categories. Every brief that says "surface" or SurfaceKind reads this list.
  • Categories (5): N1 content (11) · N2 escort directories (12) · N3 brand sites (3, Quinn-owned) · N4 channels (6) · N5 commerce (4, P5+).
  • Implications: F §F5 iconography (24 marks; #12 ), H §H5 density (#13 ), K §K3 surface-combo rules (#14 ), L §L1 hybrid specialist count ().
  • Blocking Qs: OPEN-DECISIONS.md → O-Q1 Sniffies, O-Q2 Seeking, O-Q3 Bluesky/Reddit/Fansly priority.

In-the-wild copy

Settings → Surfaces row (plain — operational surface):

Tryst · live · last bumped 14m ago · policy 4h

Settings → Surfaces pending row (plain):

PrivateDelights · pending verification · last attempted Apr 14 · open verification

Settings → Surfaces blocked row (plain):

Eros · blocked · legal-name-change required · resume when cleared

Constraints

  • Naming uses platform-canonical (onlyfans, not "OF"; privatedelights, not "PD"). Display names diverge from IDs; brief F's SurfaceChip component renders display names.
  • Each surface has a category (drives which specialist owns it and what verb language briefs use — post / bump / list / etc.).
  • Each surface has a posting mode (real API vs web-session vs hand-composed) — drives risk envelope and which @ai/@skills/platform-*/actions/* shapes apply.

Categories

N1 — Content surfaces (post-driven)

Specialist axis: content-{surface}. Verbs: post, schedule, caption, cross-post. Lifecycle owned end-to-end by one specialist per surface (per brief L §L1 content axis).

ID Display Quinn-active? Posting mode NSFW-allowed Notes
onlyfans OnlyFans empty (P1 cold-start target) web-session adapter yes (canonical NSFW) Approved 2026-04; no content yet. Anchor surface.
x X (Twitter) thin presence real API restricted (per-region) Top-of-funnel into OF.
instagram Instagram thin presence real API + manual fallback no (NSFW bans risk) Visual; high ban risk. SFW only via specialist gates.
tiktok TikTok thin presence real API no Discoverability; needs video pipeline (P3+, @model-boss video).
threads Threads thin presence real API restricted Adjacent to X; cheap cross-post.
bluesky Bluesky not active real API (AT Protocol) yes (per-server policy) NEW (was missing from earlier enum). Sex-worker-friendly relative to X/IG.
reddit Reddit not active (subreddit posting only) real API yes (in NSFW subs) NEW. Per-subreddit rules; high engagement-per-impression.
fansly Fansly not active web-session adapter yes OF alternative; lower fees, smaller audience. P3+.
youtube YouTube not active real API no (creator-platform NSFW ban) SFW long-form; P3+ if Quinn signals.
twitch Twitch not active real API no Streaming SFW; P3+ if Quinn signals.
facebook Facebook not active real API no Defensive listing; low priority.

N2 — Escort directories (listing + availability + inbound inquiries)

Specialist axis: bookings-{directory}. Verbs: list, update profile, bump availability, announce tour, reply inquiry. Lifecycle owned per-directory (brief H1 policy + H2 profile + H3 tours).

ID Display Quinn-active? Posting mode Bump cadence Notes
tryst Tryst LIVE (Premium TLC, $45→$90/mo) web-session adapter ~4h (H1 canonical) Anchor directory. SF home; monthly location lock.
seeking Seeking LIVE (free tier) web-session adapter n/a — listing-not-bump Gold ~$30/mo for prioritized visibility + multi-location.
ts4rent TS4Rent LIVE (approved + verified) web-session adapter similar to Tryst Basic €69.95 / VIP €139.95. Sumsub KYC required (govt ID — deadname risk).
privatedelights PrivateDelights (PD) pending email verification web-session adapter listing-not-bump Verification: face+ID+DOB + paper-with-username.
tsescorts TSEscorts LIVE (Berkeley CA full ad) web-session adapter (TBD per directory) Directory-style stats-forward. Tour-dates field on first save only; website added on edit.
adultsearch AdultSearch LIVE (ID 3809904) web-session adapter (TBD) ~2800 char cap. Uses ✦ spacers (editor strips  /hr).
adultlook AdultLook LIVE web-session adapter (TBD) Plain text only (no HTML). ~500 char cap. Compressed 4-section format.
eros EROS needs name-change → new ID → registration web-session adapter listing-not-bump Premium upscale. Verification-heavy. Blocked on legal name change.
eroticmonkey EroticMonkey(s) email verified, verification video submitted web-session adapter (TBD) Aggregator. Photo upload Firefox-broken — use Safari.
skipthegames SkipTheGames verification photo rejected web-session adapter per-city posting Geo-indexed; SF / LA / Vegas variants.
megapersonals MegaPersonals not started web-session adapter per-city classifieds SF / LA / Vegas variants.
ts.live ts.live email-verify pending web-session adapter (TBD) 100 free credits on signup; signed up 2026-04-04.

N3 — Quinn-owned brand sites

Specialist axis: none directly — these are templates that the platform serves per the v4 plan (@features/{site-name}/web-fe instantiated per brand). ai-copilot doesn't bump them; they update when Quinn changes the underlying data.

ID Display Notes
transquinnftw.com tqftw.com Personal provider site. Gallery + tour pages. Linked from every directory ad.
adult-therapy-tours.com Adult Therapy Tours Tour-brand site (SF + San Jose stops). SKIP-port verdict per brief J — but the tour dates feed events-aggregator.
futa-waifu-tour FanimeCon brand site SKIP-port verdict per brief J — Quinn-specific, niche.

N4 — Direct-messaging surfaces (engagement only, not posting)

Specialist axis: triage (inbound) + notifier (outbound). No "post" verb — these are pure channels.

ID Display Posting mode Notes
imessage iMessage mac-sync send-queue (P0) Anchor channel; v2's whole AI engine is built around iMessage.
signal Signal manual / future MCP Encrypted; some prospects insist. P3+.
telegram Telegram future bot API P3+.
discord Discord future bot API Mostly community-server use; not a primary surface for Quinn.
email Email (Proton via mail-sync) mail-sync:4444 Brief C-notifications digest channel + inbound mail to engagement-ingestor.
sniffies Sniffies web-session Hookup app; mentioned in coworker-agent scan. Light surface.

N5 — Payment / commerce surfaces (P5+ — not in P0 scope but enumerated)

Specialist axis: TBD (commerce-{provider}?). No commerce actions until Quinn explicitly opts in per brief L §L3d.

ID Display Notes
venmo Venmo Mentioned in coworker scan; deposit-collection flow.
cashapp Cash App Standard deposit channel.
wishtender WishTender Wishlist + tipping; common with OF.
throne Throne Wishlist variant.

N6 — Client-screening surfaces (NEW — from v2 audit 2026-05-18)

Specialist axis: extends triage + new screening-coordinator (P2+). Verbs: lookup, submit-screening-request, accept-result, refer-prospect-to-platform. Safety-critical; see surface-screening.brief.md for deep dive. Distinct from N's coop intel (brief N) — these are third-party platform-managed screening services that providers subscribe to.

ID Display Posting mode Notes
preferred411 Preferred411 web-session Most-used industry screening service. Quinn submits a prospect; platform verifies + returns risk tier.
verifyhim VerifyHim web-session Newer competitor; same flow as P411.
safeforselect SafeForSelect web-session Subscription-based vetting.
notablacklist NotABlacklist web-session Community-maintained blocklist (read-only consumer).
providerscreening ProviderScreening web-session Per-prospect lookup service.
thelastresort TheLastResort web-session Heavy-vetting service for premium tier.
bookingblacklist BookingBlacklist web-session Community blocklist.
clientblacklist ClientBlacklist web-session Community blocklist.

N7 — Escort review sites (NEW — from v2 audit 2026-05-18)

Specialist axis: extends triage + read-only ingestion to engagement-ingestor. Verbs: monitor, ingest-review, draft-response, flag-fake. Distinct from per-directory native reviews (e.g. Tryst's own reviews per surface-tryst.brief.md §8) — these are third-party aggregator sites.

ID Display Posting mode Notes
theeroticreview TheEroticReview (TER) web-session (scraping) Canonical legacy reviews site; high signal, low frequency. Brand-reputation-relevant.
punternet PunterNet web-session UK-region equivalent.
usasexguide USASexGuide web-session US regional forum-style reviews.
tnaboard TNABoard web-session Trans-leaning review board.

Specialist axis: extends content-social. Verbs: update-link-tree, sync-from-surfaces-roster. Quinn aggregates her surface presence in a single shareable link; ai-copilot keeps it auto-synced with her active surfaces.

ID Display Posting mode Notes
beacons Beacons.ai web-session Visual link tree; image-heavy.
linktree Linktr.ee real API + web Most ubiquitous.
allmylinks AllMyLinks web-session Adult-friendly.
hoobe Hoo.be web-session Mid-tier.
lnkbio Lnk.bio web-session Lightweight.
carrd Carrd.co real API One-page site builder.
swiperxyz Swiper.xyz web-session Newer aggregator.
onlyfinder OnlyFinder web-session OF-discovery hub; includes link-tree.

N9 — Messaging surfaces (cross-reference with brief P unified inbox)

Specialist axis: triage (per brief L §L3c). Inbound + outbound DM channels. Distinct from N4 — N9 surfaces are full conversation channels, not engagement-events broadcast surfaces. Brief P unified-inbox aggregates these.

ID Display Posting mode Notes
imessage iMessage mac-sync (plum) Quinn's anchor channel; bidirectional via mac-sync.
whatsapp WhatsApp web-session (WhatsApp Web) Client-preferred internationally.
signal Signal desktop-bridge (defer) Security-conscious clients.
wickr Wickr desktop-bridge (defer) Pseudonymity-conscious clients.
telegram Telegram real API (bot) + web Common with international clients.
matrix Matrix (Element) real API Niche tech-savvy clients.
wire Wire desktop-bridge (defer) Niche.
session Session desktop-bridge (defer) Niche pseudonymous.
threema Threema desktop-bridge (defer) Niche (Switzerland).

N10 — Travel surfaces (cross-reference with brief R tours)

Specialist axis: bookings-hotels for hotels (per hotel-scout.screen.md) + a future bookings-travel for airlines / aggregators. Per brief R. Hundreds of platforms in v2's taxonomy — represented here in groups, not exhaustively.

Group Examples Specialist Notes
Airlines Delta, AA, JetBlue, UA, Emirates, Lufthansa, Singapore, … bookings-travel (future) Per-trip authentication; per-airline rules.
Aggregators Booking.com, Airbnb, Expedia, Hopper, Kayak, … bookings-hotels Comparison + booking; aggregators query multiple chains.
Hotel chains Marriott, Hyatt, Hilton, IHG, … bookings-hotels Loyalty-program-aware.
Vegas Strip MGM (Bellagio, Aria, …), Caesars (Caesars Palace, Flamingo, …) bookings-hotels Quinn's frequent tour-stop city.
Luxury collections Four Seasons, Ritz-Carlton, St. Regis, Aman, … bookings-hotels Premier tier; per surface-tryst §safety filters.

How this differs from current docs

Where SurfaceKind is currently enumerated Current set Missing
platform.db migration 0001_tenancy_and_content.sql surface_kind ENUM onlyfans, x, instagram, tiktok, threads, youtube, twitch, facebook, tryst, ts4rent, slixa, eros All of N1: bluesky, reddit, fansly. All of N2 missing: seeking, privatedelights, tsescorts, adultsearch, adultlook, eroticmonkey, skipthegames, megapersonals, ts.live. All of N4 (imessage etc. — though those may not belong in surface_kind at all; see open questions).
enums.ts SurfaceKind type Same 12 Same gaps
Brief K §K1K5 Implicit "surface" references Doesn't enumerate; OK — just inherits the ENUM.
Brief L §L1 content + bookings tables content-onlyfans, content-x, content-instagram, content-tiktok, content-threads + bookings-tryst, bookings-ts4r, bookings-slixa, bookings-eros Missing bookings-seeking, bookings-pd, bookings-tsescorts, bookings-adultsearch, bookings-adultlook, bookings-eroticmonkey, bookings-skipthegames, bookings-megapersonals, bookings-ts-live + content-bluesky, reddit, fansly
Plan file ports.yaml + monorepo skeleton Reserves 3791-3799 for @ai instances and a hand-wave at "P3 content surfaces" Needs port-range expansion or one process serving N specialists

Implications

Schema (engineering, not design — but flagging)

Need migration 0002_extend_surface_kind.sql:

ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'seeking';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'privatedelights';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'tsescorts';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'adultsearch';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'adultlook';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'eroticmonkey';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'skipthegames';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'megapersonals';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'ts_live';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'bluesky';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'reddit';
ALTER TYPE surface_kind ADD VALUE IF NOT EXISTS 'fansly';
  • corresponding SurfaceKind type extension in enums.ts.

Specialist proliferation

N2 has 12 escort directories in Quinn's actual roster, not 4. Two architectural options:

  • Per-directory specialists (one bookings-{directory} per row): clean separation, 12 processes, easy to demote/upgrade per directory. Expensive.
  • One bookings-directories specialist with per-directory adapter strategy: single process, surface-aware behavior via config. Cheaper. Recommend this for P1; split out only if a directory's behavior diverges enough to justify it.

Brief L §L1 currently leans per-directory. Decision needed before P1 implementation.

N1 specialist count

Same question, smaller scale: 11 content surfaces, but lifecycle for OF (high-stakes, NSFW) genuinely differs from X (real API, SFW, top-of-funnel). Keep content-onlyfans as its own specialist (P1 plan unchanged); fold most others into a content-social specialist with per-surface config until one demands a fork.

Brand sites + brand sites' tour pages

N3 brand sites are read by other specialists (tour announcement on Tryst pushes the same tour dates to tqftw.com's tour page). Need a brand-site-publisher action or treat brand sites as just another surface in the multi-surface fan-out card (brief H4) with their own adapter.

N4 channels are NOT N1/N2 surfaces

DMs are not posting surfaces — they're engagement channels. They belong in the brief C notification + brief I engagement axis, not surface_kind. But Quinn says "Tryst messages" and "iMessage messages" with the same noun. Suggest: keep surface_kind for the content/listing surfaces; introduce a separate channel_kind for messaging (iMessage, signal, telegram, etc.). Engineering call.

States / design implications

  • Settings → Surfaces page (probably under settings, not chat) — Quinn needs to see all 20+ surfaces with status (live / pending / not-active / blocked). Long list; consider grouped by category (N1/N2/N3/N4/N5).
  • Surface chip rendering (brief F) — F enumerates iconography for 12; needs to grow to ~20+. Either a generic word-mark fallback for less-recognizable directories (TSEscorts, AdultLook, ts.live) or a custom mark per surface.
  • Tour-announcement card (brief H3) — currently shows "Tryst, TS4Rent, Slixa, Eros, tqftw.com tours page". Reality is 8+ directories. Card needs to handle pagination or accordion when surfaces exceed ~6.
  • Diff card (brief H2) — same volume problem. Cross-surface bio sync across 12 directories is the actual use case, not 4.

Out of scope

  • Adding payment surfaces (N5) to P0/P1 — enumerated for completeness, not for design now.
  • Multi-tenant surface roster (per-org has its own list) — DESIGN §org-overlay covers this; out of scope for the surface roster itself.
  • Surface deprecation / archival flow — when a directory dies (ts.live in 18 months?), the data should remain readable but no new actions. Design later.

Open questions

  • Should bookings-* be per-directory or one specialist with adapter config? Resolved 2026-05-18 per brief L §L1 hybrid model: dedicated bookings-tryst + bookings-ts4rent + shared bookings-directories for the long-tail + bookings-hotels for hotel-scout.
  • Where does Sniffies fit? Resolved 2026-05-18 as N4 channel (hookup app — directly-messaging surface, not a content-or-listing platform). 0003 migration's channel_kind ENUM includes sniffies. F §F5d renders it with channel chip geometry, not surface circle.
  • Does seeking (Seeking.com) belong in N2 escort directories or its own category? Resolved 2026-05-18 as N2 with a dating_site_flag posture marker on its personas.facets[seeking] config. UX shape stays N2 (bumping, listing, inbox) but bookings-directories adapter treats it with longer message expectations + lower auto-cadence per dating-site norms. Visual: F §F5b monogram with a neutral-blue tint to differentiate from rose-tinted escort directories.
  • Brand sites (N3) — same surface_kind or separate enum? Resolved 2026-05-18 as separate enum (engineering decision deferred to brand-site publisher implementation; will land as brand_site_kind ENUM in a follow-up migration when N3 publishing surfaces ship). Until then, brand sites render via F §F5c rounded-square chip geometry distinguishing them from external surfaces; data lives in platform.db as Quinn-owned rows, not in the surface_kind ENUM space.
  • Bluesky, Reddit, Fansly priority Resolved 2026-05-18: kept in enum (per 0002 migration), default posture draft-only via content-social config until Quinn actively ships content there. Treated as speculative-but-allocated — no upfront design effort beyond the F §F5a iconography slot + K §K3a NSFW gate definitions. When Quinn activates one, it graduates to its own specialist per L §L1 promotion path (Reddit most likely first candidate given per-subreddit policy complexity).
  • v2 source: ~/Code/@projects/@lilith/lilith-platform.live/users/transquinnftw/agents/coworker-agent/data/business/registrations.md (the canonical tracker) + data/context.md (in-flight pending updates as of Apr 2026).
  • brief F §F5 — surface iconography needs to grow to match this roster.
  • brief H §H3 + §H4 — tour fan-out + multi-surface profile diff sized for ~4 surfaces; reality is 8+.
  • brief K §K3 — surface-combo rules need to grow with the roster.
  • brief L §L1 — per-directory specialist count decision blocks on the per-directory vs. shared-adapter question above.
  • brief Jclient-intel PORT verdict means we keep v2's provider-coop safety scoring; that data attaches per-prospect-per-surface, needs to match this roster.