Shows up on Instagram · TripAdvisor
Sells on the site · WhatsApp
The founder’s knowledge page — a shelf of two books, then it stays true.
Desktop — one scenario, one strip. Swipe sideways: 1.1 → 1.2 → … then scroll down for Scenario 2.
Tablet — scroll down. Each screen is its own page.
Mobile — scroll down. Each screen is its own page.
The Brain is the founder's single knowledge page — the place every assistant reads from, so teaching it once is what beats a VA who churns. One link ("Research my business", D1) starts a research pass that reads their true presence; findings land as drafts on the playbook in place (D4 — the playbook is read-only, edits live in each section's detail sheet); the founder confirms rather than authors ("sounds like you — because you confirmed it does"); passive health verdicts keep it honest from there (D3 — "Research again" is the only re-run). This file is the pixel contract for that whole journey: drawn FROM prd-pl-brain.md (master), with branding, FAQ-generation and gather-inputs sub-PRDs cited per frame.
research-shared-material is #3129's target state, not this contract (see f15 status note).detail →, or (sound)/(look) on Branding). Provenance rides each zone head once as a chip-origin; a row marks only what differs (+ you told us · ✓ you confirmed · ◐ thin). A still-drafted row keeps its draft block ("draft" eyebrow + ✓ Use); FAQ coverage reads "1 of 2 answered", dots only while mixed. Sheets: f13/f14.prd-pl-brain.md §"Playbook state flow".Locked in prd-pl-brain.md §“The build flow — how a founder fills the Brain” (Peyton, 2026-07-15), reproduced verbatim. Every frame below sits in one of these phases.
┌ PHASE 1 · IMPORT ────────────────────────────────────────────────┐
│ One door: read my site / screenshots / docs / paste. │
│ Research reads their true presence — info, tone, reputation. │
└──────────────────────────┬───────────────────────────────────────┘
▼
┌ PHASE 2 · RECOGNIZE ─────────────────────────────────────────────┐
│ Playbook fills as DRAFTS (ghost text + provenance chips). │
│ Persona confirmed via the read's guess (one tap) → peer layer │
│ activates. [ Use all ] or per-section ✓. │
└──────────────────────────┬───────────────────────────────────────┘
▼
┌ PHASE 3 · CUSTOMER-READY ────────────────────────────────────────┐
│ The MISSING list drains EXTERNAL gaps first, one at a time, │
│ framed as the customer question they block. Peer default │
│ offered on every blank. │
└──────────────────────────┬───────────────────────────────────────┘
▼
┌ PHASE 4 · TEACH THE INSIDE ──────────────────────────────────────┐
│ Internal sections, 🔒 "Only you see this". Half pre-filled from │
│ persona packs — founder corrects rather than authors. │
└──────────────────────────┬───────────────────────────────────────┘
▼
┌ PHASE 5 · LIVE ──────────────────────────────────────────────────┐
│ Re-research anytime → per-field diff (keep mine / use new). │
│ Brain history = undo. (Diff is future scope. History is drawn — │
│ f18's version button; ONE history, of the confirmed playbook.) │
└──────────────────────────────────────────────────────────────────┘
prd-pl-brain.md:1314)S1 IMPORT S2 RECOGNIZE S3 CUSTOMER-READY S4 TEACH INSIDE S5 LIVE (loop)
blank /brain ▶ drafts landed ▶ playbook ▶ internal 🔒 ▶ complete & running
research runs “sounds like me” confirmed, gaps (UNDER-DRAWN health verdicts,
drained = named gap) re-research ▶ back to S2
/brain, before signing up AC-BRAIN-08 · AC-BRAIN-15 ↑ top view at 375 ↑↓/brain with no account, I can see exactly what the playbook would hold and open a finished example before I ever sign up — but nothing about MY business renders until I do.BrainIntakeScreen renders identically for guest and member; only the header and the CTA behavior change (onGuest prop, BrainIntakeScreen.tsx). Promise-list zones (see f2) omitted here as a drawing-once cross-reference, not a real difference.useAuth().isGuest, shell RS1/RS3 — no GUEST badge, retired 2026-07-24).Example playbooks · 5 → hairline row under “Teach your Brain more” (CPO + Chief Designer 2026-08-16, V3 lock 2026-08-18 — #3608), reopening the same cover carousel as a sheet; a standing second shelf under her books stays rejected.The example shelf is the 4-persona SUBSET with authored playbooks (examplePlaybooks.ts: Retreat host / Bloom Retreats · Workshop host / The Clay Room · Drop maker / Ember Goods · Custom-order / Stitch & Story) plus a drawn example Our-read cover (AC-BRAIN-98). Not the full 8-persona picker roster (1b).
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
WaitlistModal directly (useGuestGate.tsx); “early access” leads because most visitors are new founders.AuthModal in login mode, one level up so it sits above this dialog.Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
How should we reach you? (fill at least one)
Already got private access? Sign in
.pb-hint descriptor and no CTA, keeping “nothing unfinished is visible” true while answering “what am I getting?”. Research → stays the single action on the screen.BrainIntakeScreen.tsx no longer expands ShareInline in place; the mockup and the build now agree: both doors open the ONE share sheet (f15, R6-3) instead. Code repoint happens at build; full detail in parity/parity-brain.md.Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
Business playbook
On the current start, not the retired promise-list. Miri (The Offline Club | Bali) is about to research. Same cover shelf as f34. Then a URL we can read (Luma), two we refuse immediately (Notion, a Google Doc), and the next-step after the site read. One walkthrough — Share anything — for Instagram, screenshot, PDF, and connect Google and link a Doc. Not a tour of five tools. The f2-walk frames are history.
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
Grab your Instagram profile plus 3–4 posts — captions visible. Instagram only shows profiles when you’re logged in — screenshot from your own account.
The playbook we build, by how you run. Tap a book to read it.
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
The playbook we build, by how you run. Tap a book to read it.
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
✗ Notion doesn’t let us read pages like that. Screenshot or PDF it in Share anything — we’ve opened that door.
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
✗ That’s a Google Doc — we don’t read it as a website. Connect Google and link it in Share anything.
useGooglePicker · “Link a Google Doc”). Do not tell her to screenshot the Doc as the primary. A Drive / Sheet URL uses the same refuse, Sheet wording.brain_documents, retrievable by assistants) BEFORE any playbook sorting runs. Playbook proposals are a SECOND, optional step on top of a save that already succeeded. “We only take bank transfer in Bali” — knowledge with no playbook section — is now a first-class thing to share, not something that falls out the bottom.organize-content.ts:588 returns proposals UNPERSISTED; anything the classifier can’t map to a section hits “Read it — couldn’t sort it yet” or the dropped overflow (:323-378) and is gone. This door has never written the retrievable corpus at all — brain-ingest is the only writer, and nothing here calls it.{ target: whole-brain | section:<id> | inventory-row:<id> }; title + top pane render from it, the composer never changes (BrainShareSheet.tsx:175). ShareInline survives INSIDE this sheet only. The first-run header chip’s step 5 (9c) is one more door into this same sheet (/brain?teach=1) — opening it once dismisses the chip; visiting /brain does not.BrainShareSheet.tsx:113-129): scoped section:how-you-show-up → “Teach your Brain — how you show up”; everything else → “Share anything”. “Teach your Brain — Instagram” / “— rates.pdf” have no code path and are corrected throughout this frame — both intake doors (BrainIntakeScreen.tsx:209/:233) call onOpenShare() with no argument, so the Instagram door opens the UNSCOPED sheet.ai_usage · brain_embed · ×2.0), so save-first means every drop now costs — the standing floor holds: ONE screen-level wallet line (present even when empty) + confirm-before-charge, and no per-action “Metered” pill (retired platform-wide, kit 2026-07-25). Voice: we read and fold in — never “scan”/“ingest”/“train”; per read, never monthly.Archetype: sheet-slide-panel.md.
whole-brain and the 40% pane shows the promise-list zones, not confirmed values.BrainShareSheet.tsx:267 mounts ONE ShareInline that is ALWAYS present (hidden only behind the honest-empty panel). Empty composer is what a door actually opens.ShareInline.tsx:1512 / :1668.StagedItemRow still renders the picker — retirement rides the build.origin/main): the read path DOES exist — brain-ops ships a list-items action over the list_brain_documents RPC, consumed today by useBrainItems.ts (already mounted in PlaybookPage.tsx:176 for the “sources:” line), and remove-item.ts deletes a whole document group, user_id-scoped, with no orphaned chunks. What was missing was a founder-facing LIST, not the API: DocumentsCard was retired as collateral when its only mount went dead (useBrainComprehension.tsx:4-14).BrainItem.title is nullable, so the untitled row is a REAL state and is drawn as one.useBrainComprehension.tsx:4-14): “ONE gap analysis per page; known = the playbook itself, missing = the gap queue.” A playbook SECTION listing notes is legal under it; a page-level roll-up of what the Brain knows is NOT — that recreates the deleted ComprehensionOverview. No coverage/completeness framing, no “your Brain knows N things across M sources”, no second inventory competing with the playbook. Row grammar reuses the surviving VoiceExemplarList.tsx pattern rather than inventing one.shareHonestEmpty (BrainShareSheet.tsx:230-258) currently renders “Read it — couldn’t sort it yet” and HIDES the composer underneath. Under save-first it must (a) never fire when the corpus save succeeded — that is 15h, a saved state — and (b) stop hiding the composer, since a save that landed has nothing to retry.ai_usage · brain_embed · ×2.0), when the share sheet is open, then exactly ONE screen-level line states that saving draws from the wallet, it is present even with nothing staged, no charge fires before an explicit confirm, and no per-action metered pill is rendered.brain-ops has no list-documents action and no Brain surface reads brain_documents. Until it does, the saved panel is the ONLY evidence a save happened, and material she can never see or delete is a privacy and trust problem as much as a UX one.Real AC ids stop at AC-BRAIN-75 in docs/product/platform/brain/prd-pl-brain.md. Nothing above is assigned an id here on purpose — ids are minted in the PRD, never in an artifact.
BrainSplitHost drops the 40% page pane entirely below modalTokens.slide.split.engageBreakpoint (1024px), so 768 renders the 375 composition at a wider measure — one column, stacked digest, same ladder. There is no third distinct composition to draw. If the build ever moves the engage breakpoint below 1024, this frame owes a real 768 tier.whole-brain auto-sorts into sections; everything still lands as drafts behind D4 confirm — never silently saved.whole-brain or that inventory row. The AC-BRAIN-40 known-unreadable-host intercept (paste blocked before the crawl fires, platform named inline, matching door opens) is drawn once, at f2’s own inline error variants — not redrawn here.section: how-you-show-up.whole-brain or that section.ShareInline is deleted or converted to a → f15 door; the FAQ inventory row alone routes to the ask-sheet (f14) instead.whole-brain)Nothing here belongs in a playbook section — that’s fine.
Put it in a section yourself →
Byte-identical saved block to the panel on the left — sameness is the mechanism. A distinct “couldn’t sort it” panel is what made this read as a failure.
Neutral monochrome, never red. Composer stays VISIBLE with everything staged — today’s honest-empty panel hides it, which is why “try again” currently means re-dropping.
prd-pl-brain.md §“Playbook state flow.” A state map, never a duplicate: row grammar lives in f9, sheets in f13/f14, checklist owned by 1b (below — the standalone research-checklist frame folded in here, Peyton catch 2026-07-30). No state draws its own 768 tier.whole-brain — it never expands a composer in place.parity/parity-brain.md.spec-brain-identity-gate-sheet.md) — drawn in full at 1f, seated below in this frame’s own sequence; the “while we research” persona picker rides alongside as the one-tap “while we wait” moment, never auto-decided. Playbook shell below stays unchanged from f2 (every section still shows only its promise line). Consent language stays visible in the checklist caption (draws-from-your-wallet, already confirmed at f2, restated here so it’s never out of sight).BrainReadingProgress.tsx/AC-URLX-08). A walled source never gets bespoke copy, it points at the ONE share sheet (f15) — these walled/failed rows are live projections of the same registry drawn in full at f5, one mechanism rendered mid-research here.Persona-picker chips are DB-driven (mf_personas selector via the persona_roster view, ADR-022) — this drawing reflects the ready roster as of 2026-07-30 (Peyton catch, corrects the invented “Retreat & workshop host” / “Studio or space owner” chips). Never hardcode-extend this list in the artifact; the DB is the source.
ModalWrapper presentation="sheet" with the .sheet.co 40:60 geometry, the same one f14 uses. No new component. The inline card was a ~600px column that shoved the whole page down; what ships today (BusinessIdentityGate.tsx, #2339) keeps every behavior below — only the seat changes..co-main); the five-line “once you confirm, we’ll map” is read-only reassurance — the single biggest thing pushing content down in the card — and moves beside the decision (.co-pane). Semantic note (open, confirm before build): f14’s documented pane job is “where does this sit”; using it for “what you’ll get” is a defensible extension of that contract, not a precedent it already covers.ShareInline composer EMBEDS in the editor under a short lead — Wrong business? Show us the right one. (Peyton, 2026-08-02 — supersedes the door-as-link + example-nouns copy: drop a link, file, image, or text with zero extra taps). Verbatim component reuse (f15 grammar; the composer never changes by context) — a recorded SCOPED EXTENSION of the R6-3 “ShareInline survives inside BrainShareSheet only” lock: the identity-gate editor is the second sanctioned host; no second composer exists. Material saves on arrival (save-first, shipped). Decision 9 (Peyton, 2026-08-02): dropped material triggers a re-find, not a blind ride-along — the primary becomes Find my business ✦, the free-class peek re-resolves from what she shared, and the sheet re-presents Here’s what we found — is this you? (1f″) for a fresh That’s me — run ✦ BEFORE anything paid. Typed fixes skip the re-find — her correction IS the confirmation (Confirm & run ✦). The paid bundle fires exactly once, after the final confirm; the re-find is the free-class peek plus the already-metered share-save, capped ×2, then “Start over — no charge” (stays nested here). f27 stays deferred as the guard for POST-read re-runs.editing is ONE shared toggle (the pencil on any row flips all three fields; the value itself is the button; Contact is not editable) · “Not quite” opens the same basics editor and, once open, becomes cancel — it never proceeds to the paid run. AC-BRAIN-75’s delta (editable “You do” + optional founder-name query line) has shipped, incl. the ✎ on the founder-name row (BusinessIdentityGate.tsx:244) this artifact previously omitted. Shipped labels still read “Name” / “Your name · optional” — the 2026-08-02 renames below ride the build.brain-entity-scope-confirm.md.claim_brain_gate_refind_attempt, PR #3122). At cap the editor offers typed fixes and “Start over — no charge” only — the pre-read loop can never grind. f27 stays deferred as the guard for POST-read re-runs; decision 9 pulls exactly one capped PRE-read iteration forward (spec-brain-identity-gate-sheet.md).inventory-row: instagram, composer opens EMPTY (f15 ruling), save-first wallet floor verbatim, and the lit row ticks emerald on land (C12), resolving f12’s walled-platform line.BrainReadingProgress.tsx, AC-URLX-08); this surfaces it mid-research. The “sources, not pipeline stages” ruling holds — counts live in meta, never as their own rows.ImageConfirmBlock as ordinary per-image section-fill proposals, not the whole-research synthesis pass; “Research it ✦” is a label swap on the existing organize/save handler with zero dispatch to research-shared-material (built + deployed, #3122, just uncalled). The in-app ask copy above (§ share sheet) reflects this — it no longer claims “feeds the whole research” or “stand in for a website.” The two notes describe the TARGET state; #3129 (P1) is what makes them true again.A second scenario, not Uglywoo. Miri researched theoffline-club.com — a site we can read. The free peek found two faces: the Bali chapter she runs, and the parent club. Uglywoo 1f never sees this (Bali & Portugal is two offerings, one studio). Same identity-gate sheet — one extra question before That’s me — run ✦. Nothing paid until she picks and confirms. 768 = the same 40:60 sheet as 1f (named, not redrawn).
confirmed_scope and searches the Bali name — never Amsterdam HQ by default.theoffline-club.com.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
We draft your voice first — you keep it — then fill the rest to match. Each run draws from your wallet; you review every draft before it's saved.
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
examplePlaybooks.ts) — not invented for this preview.Our-side failure · free · no price shown. 2 of 3 free tries consumed server-side — the founder never sees a counter.
Routes to f15, context inventory-row:pricing-page · still no price.
drive.file migration, I’m asked to reconnect before linking a Doc/Sheet to my Brain, so a pick never silently 403s..banner.warn strip (connects.html f7 / pulse.html) — glyph ring, title + one-line description, amber-tint CTA. The old boxed card (rounded-xl amber glass + 40px AlertTriangle tile + outlined button) is RETIRED. Shipped 2026-07-30 (#2921) — DriveFileScopeBanner.tsx now renders the flat strip (15px glyph ring, amber tint on the strip never the copy, compact CTA); its own comment names the boxed card retired. This frame is a match, not a target..cta treatment, NEVER an embedded ConnectionStatusButton — REQ-C2-01 (connects PRD) is row-scoped; full ruling in connects.html 7b. Verb ledger holds: Reconnect Google. CTA opens IncrementalScopeModal with DRIVE_FILE_SCOPE — the sheet itself, the confirming/hand-off states, and the return are drawn below in 26b (previously undrawn anywhere).BrainWorkspace). It is the ONLY thing that may sit between the jump-nav and “Your playbook” since the per-assistant capability panel retired from /brain (f30 folded 2026-08-13).sm 640..sheet/.sheet-handle/.sheet-title/.sheet-context chrome already established above (frame 13’s confirm sheet) — never a new sheet shape for this frame.DriveFileScopeBanner.tsx’s own string tables. Wizard context artifact remains mockup debt per frame 26’s own note.Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
Paste your website. We read your pages, then look up what else is public. ~5 min · draws from your wallet.
How should we reach you? (fill at least one)
Already got private access? Sign in
Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
Business playbook
Paste anything, drop a file, or link a doc — we keep it in your Brain, and suggest what belongs in your playbook.
/brain, before signing up AC-BRAIN-08 · AC-BRAIN-15 ↑ top view at desktop ↑↓Paste your website. We read your pages, then look up what else is public. ~5 min · draws from your wallet.
MobileActionBar).Or send me a magic link instead
AuthModal’s login tab (Google + email/password + magic-link fallback), same modal shape as the waitlist form.Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
Business playbook
Paste your website. We read your pages, then look up what else is public. ~5 min · draws from your wallet.
Grab your Instagram profile plus 3–4 posts — captions visible.
The playbook we build, by how you run. Tap a book to read it.
✗ Notion doesn’t let us read pages like that. Screenshot or PDF it in Share anything.
✗ That’s a Google Doc — we don’t read it as a website. Connect Google and link it in Share anything.
section: how-you-show-up, two screenshots staged, nothing charged yetBrainShareSheet.tsx:113-129). Every other door, including the Instagram doors on the intake screen, opens the UNSCOPED sheet titled “Share anything”; “Teach your Brain — Instagram” was never a string the code could produce.StagedItemRow still renders the picker — retirement rides the build..ds-top grammar and light up as proposals land — they only ever gain, never lose a confirmed line.spec-brain-identity-gate-sheet.md) — NOT built; today the checklist stacks every done row. The walled Instagram row survives the collapse on purpose — it is her only available action during the wait.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
parity/parity-brain.md; this page state is the “research partially failed” case.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
.missing-item anatomy as the rail, with a red ✗ substituting the neutral dot to mark failure.Draws from your wallet — you only pay for the read we run, nothing charged yet.
spec-brain-identity-gate-sheet.md).sm:flex-row pair); money subline verbatim (#2749). AC-BRAIN-75 delta has SHIPPED — the amber pending tags this frame carried were stale and are cleared; ✎ on the founder-name row matches BusinessIdentityGate.tsx:244; labels renamed 2026-08-02 (Business name / Founder full name · optional) — the rename rides the build. Decision 9 ladder applies at 375 too: face That’s me — run ✦; the editor and re-proposal states follow the desktop frames (1f″) — the sheet stacks, same ladder.Pick one first. Nothing charged yet.
We’ll save The Offline Club | Bali — not the whole club.
Pick one first — then the full read only saves what belongs to it. Nothing charged yet.
Bloom Retreats runs small, capped women's wellness retreats in Ubud — twenty seats, four times a year. It's for founders and creatives who need to unplug, not first-timers looking for a party.
The five-day Ubud retreat is $1,450, all in — room, food, sessions, airport pickup. A $435 deposit holds the seat; the balance is due 14 days before arrival.
A 30% deposit confirms a seat; the rest is due two weeks out. Cohorts run in March, June, September and November, capped at 20. A sold-out cohort routes straight to the waitlist for the next date.
Warm, first-person, and present — you sell presence, not a transaction. Never brochure-speak, never hype adjectives, never push the deposit before a guest is ready. Earthy neutrals, soft film-grain photography, a quiet serif for headings — the same calm the retreat itself promises.
Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
window.location.href), not a MystFlo
surface. Out of scope for this artifact.
oauth-callback redirects to /connects?status=success, then back to Brain; useGoogleScopeStatus re-checks, finds drive.file present, and the banner unmounts. Nothing else on the playbook moves..draft-block rows on the sections they belong to (f9’s row anatomy verbatim) — no confirm screen.OurReadSheet.tsx is superseded — the report slide-over (f18) is the ONE Our-read surface..pb-row grammar for every section and state — title + chip + 1–3-line summary + “detail →”; the old section-vs-summary-row fork is dead.·. ROLL-UP (what you sell) = count + price range, never names. COVERAGE (FAQs) = “N of M answered”. Safety net only: line-clamp-2 on .pb-value — no hard character cap in the UI. Color stays --fg-70 (D7 reaffirmed); the “faded” feeling was undefined content, not the token. NEVER on the index: full FAQ answers, offering enumerations, verbatim policies. Those live in f33 (the book) and the detail sheets (one chapter).--fg-70 (D7), 26px row breathing room; right rail: “What’s missing” then “Preview template”, prices from props..pb-section-title 15/500) · the founder’s words (.pb-value 14/300 fg-70) · ONE door (detail →, or (sound)/(look) on Branding). Nothing else by default. Provenance rides each ZONE head once as a chip-origin (V-11’s letter — the page-level “sources:” line RETIRES from this frame; its inventory job lives in the Teach sheet). A row marks only what DIFFERS from its zone default: + you told us on What you sell, ✓ you confirmed beside the sound line (the honesty mark — the full “sounds like you — because you confirmed it does” sentence lives in f22, said once, where the voice is), ◐ thin on Where you’re headed (the one genuinely thin row — verdicts render by exception only). Retired from the page: 8 per-row chip-origins · the complete-state FAQ dot string · Branding’s three quiet meta-lines (readiness detail → f22/f24) · the “optional” chip once the row holds content (it still renders on the EMPTY row, where it informs the skip decision) · the per-row “N to answer →” entry word (gaps have one home: the rail + ask flow) · the rail’s two explainer notes (“never counted”, “can’t be typed”) — the ✦ CTA’s own sub-line already says the section only fills by research. The word “still” appears zero times..pb-sub-title, one register below the section title) — each closed by the STANDARD detail → door; the (sound)/(look) paren doors RETIRE. “Customer questions & policies” splits the same way: retitled What customers ask with Questions + Policies subs. Title pass: “Where & how you operate” → Where you operate. Index dividers are V3 Thread (U12), not a plain hr.design-foundations.html “Platform · Proposed — Playbook (Brain)”. A chapter is one .pb-row.pbk: Edge (2px left bar) · mark · title + one meta line · detail → on the right. The left Edge is the same solid 2px bar on empty and filled rows — it is the row’s spine, not a filled-only decoration. Dotted Edge is only when the double wrote it (doc or draft). The mark is what changes: Seal = confirmed (external). Node you = she typed it (internal). Node graft = empty. Lantern + dotted Edge + .need wash = a draft waiting (the one gold moment). Thread is the zone rule only — under “Your playbook” and the internal-zone seam. Empty day-one carries the f34 example-cover carousel on the page (Preview template rail retired) and the 2026-08-17 jump chips; populated demotes examples to Example playbooks · 5 →. Jump chips: About · Where you operate · What you sell · Why you · Questions · Branding / Revenue · Who you serve · How you run · Where headed. How you show up is not a playbook row or chip.n of 5, and the chip carries its own progress line — a chip-wide .12 track 7px under the caption, lit white + glow to the required-%. v4 lit the header’s existing bottom hairline instead; Peyton on production: at 1440 that read as a bar under the whole chrome — “just the progress line, not the full bar.” The header hairline stays dark; the determinate line is chip anatomy (same two-layer edge as the band, at caption scale). Tier rule: desktop treatment at lg (1024px) and up only; everything below — tablet included — uses the 375 band as a second header row (was sm/640, which left tablets a center chip reading as detached). 375 (2026-08-16, third pass — Peyton rejected both the stacked caption and the inline line): progress BAND — a full-bleed tone-step zone (--surface-el, the active-nav “you are here” tone) as a second header row; its bottom edge is a real determinate line, lit white + quiet-active glow to the required-%, against a .12 track. One line inside the band: living mark 9×12 (assemble once, then rest) · n of 5 · words · →; whole band is the 44px tap. Amends the no-fill caption lock — band, not pill: full-bleed, zero radius, borderless, nothing pressable-looking. Still not a pill, still monochrome (Preview keeps the only amber).Example playbooks · 5 → hairline (AC-PLAYBOOK-16 — no standing shelf under her books). 9a-m / 9c-m carry the first-run progress band. 9a-away-m on the same section is the Assistants away line (Make them sound like you · 88%) so the cramped live shot can be scored here. Replaces the “no separate 375 tier” gap formerly flagged on the parts cut.PlaybookPage.tsx now renders row grammar v2 — the shipped index matches 9b/9b-m: title · her words · one detail → door (Branding keeps (sound)/(look) only), provenance on the zone heads with exception marks only, no pencils / per-row ProvenanceChips / AskEntryWord / page-level “sources:” line, the hug-content Read the whole playbook button under “Your playbook” (→ /brain/book), the quiet “The live playbook · last change …” line, and the hairline Our read · Teach group. Remaining drawing debt was on THIS file, not the live page: the sibling full-page twins (f1/f4/f11/f12/f16/f17/f31 and their 375 gallery copies) drew pre-v2 chrome until they were synced to 9b/9b-m on 2026-08-15. Still specified-not-built: f18’s four-block analyst-note copy (the research-mint engine) — a content hold behind the Our-read door, not index chrome; do not restyle it.listing{} key, the brain-generate branch id 'listing', channel_registers.listing, and the spec/PRD term “general product listing” all stay unchanged — renaming the data model to match the label is a defect, not consistency. Code note: the LIVE page still renders the pre-merge specified-not-built row (PlaybookPage.tsx `listingCopy` anchor, #2978) until the #3028 build lands — that residual is build lag, not contract; builders draw from f28./brain/book and /brain/read bounce to /brain.Example playbooks
The playbook we build, by how you run. Tap a book to read it.
Bloom Retreats
Tap to read
The Clay Room
Tap to read
Bali Offline Club
Tap to read
Ember Goods
Tap to read
Stitch & Story
Tap to read
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Edit a chapter
Edit a chapter
9c is a truncated twin of 9b — first three chapters, to show the step-5 Teach chip on the same page.
The live playbook · last change Aug 12
.pb-row.pbk: Edge · mark · title + gist · detail →). The rail’s “Where you stand” collapses to the single 44px “What’s missing · N →” row above zone 1 (BR1 / playbook-grid__missing-mobile); tapping it jumps to the first open section. Populated pages carry the Example playbooks · 5 → hairline, never a standing colored shelf (AC-PLAYBOOK-16). The ✦ research CTA lives behind that jump on mobile, never stacked on the page head. “Our read” drops its date chip at 375 — the report shows it.mark · n of 5 · words · →. 9a-m = step 4 on Brain, line at a day-one sliver. 9a-away-m = the Assistants away line, lit at 88% to match the words. 9c-m = step 5, full-lit (no % in the words — honest at threshold-A). 9b-m = band gone after Teach opens once; the page below returns to pure black, so the lit line is also the header/page boundary while the band lives.detail →) is the index grammar for all ten editable chapters — not a FAQ or Brand Voice special. How you show up is not a playbook row. E1 is Your business. Thread sits under “Your playbook”. One lantern per view; this populated cut has none./brain/book. Tap Our read → the editorial slide deck at Our read · Slides / /brain/read (40/60 overlay on desktop). The ink cover is no longer a reserved slot — the interior is drawn.space-between, which stretched the two books to opposite edges of the column and read as a layout hole.Example playbooks · 5 →, opening the same 5-cover carousel as f34 (a sheet/overlay at build). Text row, not mini-covers — a second shelf of colored tomes under hers would make her scan for which book is real (white cover = uniquely hers). Rail keeps only “Where you stand”. Same treatment on slim and f33-over’s backdrop.brain_profile unchanged.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Edit a chapter
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
Tap the cover to read
Edit a chapter
.brand-interval; 06 Branding stays her insert when hexes exist. No Look tokens → no cream, no interval. Numeral is an 11px letterspaced running head above the title. No emoji, no fake page numbers, no magazine grid.See a finished example → (closes the book, opens the example shelf — never a second shelf under the book). Cover shows N chapters still empty when any public chapter has no blocks. Private empties: Seal · idle pill only. Export / Save a copy never mounts the next-step or the count. Drafts waiting get ONE lantern moment on the cover (“Review drafts”). Thread sits under the cover title and under each zone eyebrow — not a plain hr (U12). No lantern on chapter prose.detail →, D4). Close / Escape returns to /brain. Overlay is fixed inset-0 over the still-mounted Brain — not a 40/60 split. Drawn at 33-over. Dense copy (long About, 6 offerings, 8 FAQs) at 33-dense — a scroll, never invented spreads. Empty book at 33b: cover + ghost TOC, no invented content. No regenerate on the book. Private zone is a tone-step slab, not a second invert.Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
Your places, hours, and how you deliver
Your offers, prices, and what's included · 3 offerings
6 days · A slow week of yoga, food and nothing urgent
5 days · Studio days plus one long table every evening
The house, the week, your people
What makes people pick you
The only small-group week that asks nothing of you — not a party, not a program.
Your FAQs, deposits, refunds, and rules · 3 of 3 answered
Depends on the cohort — I check and answer straight.
Yes — 30% holds the seat. Balance due 14 days before arrival.
Room, food, sessions, airport pickup. Flights are yours.
Your voice, your colours, your type — edited from (sound) and (look) on the index
Warm, direct, a little playful — you sell presence, not a transaction.
What only you see
Where the money actually comes from
Your people, in your own words
Post-30s professionals craving a reset — people who will pay for a week that asks nothing of them.
What the web already says about you
Not filled in yet
Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
The weeks are hosted in two houses we return to — one above Ubud, one on the Lisbon coast. Guests arrive on a Sunday and leave the following Saturday.
We cook, we sit, we do not fill the calendar. Most people come alone. Most people come back.
The work is presence, not a program: two yoga sessions if you want them, one long table every night, and the rest of the day left empty on purpose.
Your places, hours, and how you deliver
Your offers, prices, and what's included · 6 offerings
6 days · yoga, food, nothing urgent
5 days · studio days + one long table
7 days · the quieter house, no workshops
6 days · two people, one room, the same table
You bring the group. We run the house.
The house, the week, your people
What makes people pick you
The only small-group week that asks nothing of you — not a party, not a program.
The house is the offer. The table is the offer. We do not fill the calendar to prove the week was worth the ticket.
Your FAQs, deposits, refunds, and rules · 8 of 8 answered
Depends on the cohort — I check and answer straight.
Yes — 30% holds the seat. Balance due 14 days before arrival.
Deposits are non-refundable inside 14 days; they can move to another date once.
Room, food, sessions, airport pickup. Flights are yours.
Most people do. The table is built for that.
Full refund up to 45 days out. After that, credit toward another week within a year.
Yes — DPS or LIS, on the arrival Sunday. One van, one time.
Yes. The sessions are optional and paced for people who have not been on a mat in years.
No — the week is one group, one arrival, one leaving. A couples week exists if you both want the whole thing.
Your voice, your colours, your type — first line at pull, the rest on her paper
Warm, direct, a little playful — you sell presence, not a transaction.
Write like you are sitting across from them. Short sentences. No brochure words. No “journey,” no “transformational,” no exclamation marks. If a line could sit on a hotel website, cut it. The voice is the same in chat, on the site, and in the email that confirms the deposit.
What only you see
Your people, in your own words
Post-30s professionals craving a reset — people who will pay for a week that asks nothing of them.
They are not looking for a party and they are not looking for a teacher. They have already done the loud retreat. They want a house, a table, and permission to be quiet. Assistants use this to decide tone, never to invent a persona.
fixed inset-0, Brain still mounted. Dimmed page visible at the edge of the story./brain. Save a copy stays on the book header only.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
Tap the cover to read
Edit a chapter
6 chapters still empty — public chapters only; hides once every public chapter has a block.See a finished example →. Private empties stay Seal · idle only. Thread under the cover title and each zone eyebrow (U12). Never grey body text (Peyton 2026-08-16 / 18).Nothing confirmed yet
6 chapters still empty
What your assistants say for you
What you do, and who it's for
Not filled in yet
Teach your Brain, or open this chapter on the index.
Your offers, prices, and what's included
Not filled in yet
Teach your Brain, or open this chapter on the index.
Your voice, your colours, your type
Not filled in yet
Teach your Brain, or open this chapter on the index.
BrainPromiseList) and the “See what you’d get” text rows are replaced by a shelf of the five persona example covers — the covers ARE the promise. Nothing extra sits under the shelf (Peyton pick: no “11 chapters” line). The 11 section hints are NOT lost: they relocate into every book as the structural deck line under each chapter title (see f33 and f35).Example playbooks · 5 → hairline row on the populated index (9-preview, both tiers) — as a sheet/overlay, never a standing second shelf under her books. Post-playbook the “Build mine” foot of f35 loses its persona-tagging side effect (persona already set) and reads as a plain back-to-Brain door.EXAMPLE (never wrapped persona strings); the TITLE is the persona (“Retreat host”) — who the book is for, readable before any fictional name; the business is a small credit line under it; “Tap to read” pinned at the foot. Each cover wears its persona’s own fictional Look palette (the same palette its Branding chapter shows) — cream/charcoal, stoneware/kiln, deep sage, char/ember, linen/indigo — so the shelf reads as five differently designed books, which IS the pitch that her book gets her colours. White stays uniquely HER real playbook (sharpens the one-invert lock): an example cover is never white. Tap a cover → that persona’s template book (f35), same Ink & Air system, same colored cover.lg:hidden fork), and a new persona later is just one more book on the shelf — no rail redesign. Not an option-picker: Research → stays the single hero action, vertically first; browsing books sideways is how a shelf works (the shelf metaphor is the locked index grammar, 2026-08-15) — the covers never become config radio buttons.persona_slug is unset — records that persona as hers, so the tailored/generic question map follows her pick. Choosing does NOT change the generated book’s design (one design; her content, her Look).Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
.ink-* grammar as f33 (shared InkChapterBody, AC-BRAIN-83) inside the existing ExamplePlaybookPanel shell (left slide panel / mobile full-screen push; Back, Esc, z-order unchanged). Per-persona variation is Look content, never layout: each fictional business gets its own swatches + type in chapter 06 (Bloom’s warm paper vs Ember’s char-dark vs Clay Room’s stoneware vs Lamp Light’s garden sage) — which demonstrates personalization without forking a second book design. Same interval lock as her book: 02 / 04 sit on that example’s Look paper; 06 stays her-insert. Same Q/A marks. Examples always have a Look, so they always interval. Event-host example in-app is Lamp Light Club (named pilot, not Bali / Offline Club). This frame still draws The Clay Room as the workshop-host interior — same chrome, different Look.ExampleTemplateBook — Bloom Retreats, The Clay Room, and Lamp Light Club open it; Ember Goods and Stitch & Story stay cover-only · soon. Do not draw five full interiors in this file; Clay Room remains the one specimen.Example — The Clay Room) + cover kicker (EXAMPLE · WORKSHOP HOST). The AC-BRAIN-14 generic-map disclosure renders as a quiet cover colophon — only for personas with tailoredSpine=false (workshop-host, custom-order-maker, event-host); Bloom Retreats and Ember Goods never show it.examplePlaybooks.ts (+ one optional look field per persona) — no DB, additive never load-bearing (AC-BRAIN-15).Class seats booked from the DM, no more back-and-forth.
This example shows the shape of your playbook. Workshop hosts build with our general question set today — a tailored one for your craft is on the way, so a few questions may be broader than what you see here.
What your assistants say for you
What you do, and who it's for
The Clay Room is a pottery studio in Lisbon running beginner wheel-throwing classes on weeknights and weekends. It's for people who want to make something with their hands after work, not for trained ceramicists.
Every seat gets booked from an Instagram DM that you walk to a payment link by hand.
Your places, hours, and how you deliver
If a class fills, the assistant offers the next open date instead of leaving someone on read.
Your offers, prices, and what's included · 2 offerings
You're not selling a class; you're selling the first time someone's hands actually centre the clay.
Two hours. Clay, tools, firing, and two finished pieces.
Collect glazed work in about three weeks.
No experience. Every intro night assumes it's their first time.
Six or more. Same studio, same first-timer pace.
Payment in full holds the room.
What makes people pick you
The whole first class is built around it being fine to make a wonky bowl.
You started teaching because the studio had quiet wheels in the evenings and friends who kept asking to try. The thing a first-timer worries about is looking clumsy in front of strangers.
Your FAQs, deposits, refunds, and rules · 5 of 5 answered
None — every intro class assumes it's your first time.
About three weeks, once they're fired and glazed.
Yes, up to 48 hours before. Inside that the seat is held but not refunded.
Clothes you can get dusty. Aprons are at the studio.
Six or more is a private session at €55 a head. Payment in full holds the room.
Your voice, your colours, your type
Friendly, hands-on, and unfussy — the way you'd talk to someone nervous about being bad at it.
Reassure first, book second. No art-school jargon, no pressure; if someone's not sure, point them at the next beginner night.
What only you see · yours to fill
Where the money actually comes from
Your people, in your own words
Deposits, booking rhythm, day-to-day
Your north star
What the web already says about you
Filled from your research and your own notes — never shown to customers.
Yours gets built from your own site, Instagram, and files — then you review and edit every line.
section: how-you-show-up — no second, ad-hoc uploader. Door copy is live shipped-in-artifact.OutwardReputation.tsx:924 used to draw a numbers-only screenshot extractor that charged and returned nothing on profile screenshots (QA Bug 2). It is now the plain door this mockup prescribes; review-count extraction survives as a backend capability inside the read. Recorded in the f21 ledger.The live playbook · last change Aug 12
edit → on the book (#3608). How you show up is not a chapter — it lives in Our Read. Destination, not a task sheet. Preview template stays other people’s examples. “Our read” is a different species — the analyst note (f18), never a recap of this book.edit → per chapter (#3608). The door keeps the book open and raises the combination slide over it (2.3-edit) — it is not a second editor inside the book, and it does not bounce to /brain. Close sheet → book. Close book → playbook page. Index detail → still skips this preview and opens 2.5. No regenerate / refine on the book — that collides with Teach your Brain and Read again. No “read by” chips (those teach on f20 only). Private zone is in — this is her book, authenticated — with the lock eyebrow and “never read aloud to customers.”Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
Your places, hours, and how you deliver
Your offers, prices, and what's included · 3 offerings
6 days · A slow week of yoga, food and nothing urgent
5 days · Studio days plus one long table every evening
The house, the week, your people
What makes people pick you
The only small-group week that asks nothing of you — not a party, not a program.
Your FAQs, deposits, refunds, and rules · 3 of 3 answered
Depends on the cohort — I check and answer straight.
Yes — 30% holds the seat. Balance due 14 days before arrival.
Room, food, sessions, airport pickup. Flights are yours.
Your voice, your colours, your type — edited from How you sound and How you look on the index
Warm, direct, a little playful — you sell presence, not a transaction.
What only you see
Where the money actually comes from
Your people, in your own words
Post-30s professionals craving a reset — people who will pay for a week that asks nothing of them.
/brain/book. The book itself is still a full takeover (AC-PLAYBOOK-11) — this frame is the edit sheet rising over it, not the book becoming a 40/60. Close sheet → book. Close book → playbook page. Escape with the sheet open closes the sheet, not the book (same as Save a copy).detail → still skips any book preview (goes to 2.5).Close · Your playbook stays visible above the slide. ✕ on the sheet is “close sheet”, not “close book”.section: how-you-show-up — no second, ad-hoc uploader. Door copy is live shipped-in-artifact.OutwardReputation.tsx:924 used to draw a numbers-only screenshot extractor that charged and returned nothing on profile screenshots (QA Bug 2). It is now the plain door this mockup prescribes; review-count extraction survives as a backend capability inside the read. Recorded in parity/parity-brain.md.--fg-55. Coverage dots are Node (you = covered / graft = partial / double = gap). One lantern moment per sheet (unkept listing draft), never gold on field chrome.DraftCompare/BrandVoicePreview render as this row, never a separate screen (absorbs f8).Archetype: sheet-slide-panel.md.
PlaybookDepthSheet + FaqCandidateChips); only the hosting chrome changes, to BrainSplitHost (page pane LEFT 40% and FIRST in the DOM, work pane RIGHT 60%).useIsSplitViewport) the page pane is omitted from the DOM entirely — today’s single-pane sheet, unchanged (the 375 twin IS the spec, not a downgrade).order in production).Archetype: sheet-slide-panel.md. Host contract: src/components/brain/BrainSplitHost.tsx.
surface-hairline card around Name / Price / Dates / Description. “How you describe it” loses the inner rounded-lg nest — lantern wash only while a draft is unkept (the sheet’s one lantern moment). Inputs stay inputs; we do not invent a second form kit.listing{}, the brain-generate branch id 'listing', channel_registers.listing and the spec term “general product listing” are unchanged — renaming the data model to match the label is a defect, not consistency.text-eyebrow, never pb-section-title. How you run / How you sound / Who you serve are playbook ROWS; this is a SUB-BLOCK. The name deliberately borrows the top-level register, so weight is the only thing keeping it a layer — at row weight this frame visually re-creates the sibling section the merge retired.✦ Draft it for me first AI draft (PAID) · ✦ Refine subsequent AI edit (PAID) · fix plain-text edit (FREE). ✦ never appears on a free action, and the label stays a plain verb — never “with AI”, which is redundant with the glyph and diverges from this file's shipped vocabulary (✦ Draft, ✦ Rewrite, ✦ Refine). Charge visibility = ✦ + a wallet line in the same block (+ the inline price where the family prices on the button). Mechanical check: count(✦ controls) == count(wallet-lines). Free verb goes first where the two sit adjacent.
✦ drafted for you · In your words. · Built from what you've told us. — the third carried “— nothing AI-written yet” in these frames and in shipped code until 2026-08-11. Rule of thumb: if removing every ✦ from the screen would leave the founder unable to tell what was AI-written, the glyph is under-used; if a sentence repeats what a nearby ✦ (or its absence) already says, the sentence loses.ready / you refined this / not written yet); what's still open is the “Still open on this one” block. A write-up shown with no still-open read is under-drawn. Per-offering depth inside ONE sheet — never a page-level roll-up (canon hard-lock boundary).no photos shared yet · written before you taught your voice). Ruled 2026-08-10, applied to code the same day; these frames drew chips until 2026-08-11 and now match. The warning is also the LAST resort, not the first move: the capture mandate says the read fills these facts, so for most founders it should never appear at all (#3321).not written yet, the line “Nothing here yet — add what you sell above and this fills in.”, and the “Still open on this one” warning “Still missing what's included and a description — add them above and this fills in.” The middle two are mutually implied — the body is empty only when the facts are missing, which is exactly what raises the warning, so no state exists where one appears without the other; they even shared a trailing clause. Resolution: keep the state word (it is the header's status, one word, typographic) · delete the “Nothing here yet” line outright · keep ONE amber sentence under “Still open on this one”, rewritten so it no longer ends “add them above and this fills in” — the door is now mounted directly beneath it, so pointing “above” is both redundant and, since 2026-08-11, wrong.BrainSplitHost drops the 40% pane below the 1024px engageBreakpoint, so 768 renders the 375 composition at a wider measure. If the build moves that breakpoint below 1024, this frame owes a real 768 tier.channel_registers.listing, inside Branding → (sound) (f22) — it does not return here.✦ Draft it for me · Draws from your wallet — $2.00 on an offering with zero facts. That was wrong, and wrong in a specific way: it charged a founder to have the AI invent a product listing out of nothing. It is the never-invent boundary (D1) with a price tag on it, and it contradicts the CAPTURE MANDATE directly above — the read is supposed to FILL those facts, not sell around their absence. The corrected shape is two states, in order:
+ Add files, links, or paste anything affordance once a write-up exists. Peyton's “reachable either through the share-anything component or by filling the form” describes two ways to ADD MATERIAL that both arrive at ONE rewrite ask — it is not licence for a second paid button (one-surface rule, playbook §3, codified 2026-06-06). Mechanically: count(✦ controls) ≤ 1 per offering detail, and == 0 when nothing is gathered.ShareInline, offering-scoped; NOT a LaunchKitRewriteComposer-style sibling. The launch-kit rewrite box is deliberately a purpose-built sibling because its material is per-run context that must never persist (AC-GEN-04). Here the requirement is inverted: what she shares IS facts, and facts must land in the Brain — so the real composer, with its corpus save and playbook proposals, is the correct door and the divergence from that precedent is the persistence requirement itself. The 28e refine steer keeps the launch-kit reading — per-run, never persisted. Two boxes, two licences; don't collapse them.ai_usage brain_embed, ×2.0), so a mounted composer carries the f15 .wallet-floor line verbatim — not the per-control .wallet-line, which stays paired 1:1 with a ✦. Drawing the empty state as costless would be a different lie in the same place. What changed is the bargain, not the meter: she now pays to have what she actually has read, never to have something invented.#3324 (merged and deployed same day) ships an INTERIM state: no composer yet (its own PR — ShareInline writes to a SECTION and scoping it to one services[] row is new plumbing, not a mount), no body text either. Production today reads eyebrow + state word not written yet only — the amber facts warning in the FACTS layer above already says what's missing and what to do about it, so the write-up block adds nothing else. This frame is the TARGET this interim state is walking toward, not a second drawn state — don't add a third frame for the interim; the note here is the record.“Fill in the details above and this writes itself — free.”) is deleted outright rather than reworded — it was a third restatement of one fact the amber warning and the state word already carry, the same violation that got the old “Nothing here yet” line deleted. (2) The draft-edit helper drops its throat-clearing preamble: “yours to edit — tap fix to change any word before you keep it” → “Tap fix to edit any word before you keep it.” — the instruction survives, the preamble didn't add one. NOT cut, deliberately kept as information rather than duplication: every wallet/billing disclosure, including the unkept-draft money tip (“Keep this one first and later changes cost from $0.05”) — the one line in this layer that tells a founder rerunning costs $2.00 twice instead of $2.00 once. 140 words → 126 across the layer's scenario copy.Archetype: sheet-slide-panel.md. Spec: docs/product/platform/brain/_specs/spec-brain-general-listing-layer.md §4/§5 — this frame draws the RECOMMENDED options; open calls Q5 (28b assembled-default resolution) · Q6 (28e billing shape — drawn in the reversible per-run form, see the 28e note). RULED 2026-08-10: Q3 per-offering only · Q4 keywords row OUT (body is three parts: headline · bulleted body · highlights). Q8 + the entry-point option RULED 2026-07-31 (merged; guided from-zero loop). Q1 (product-sheet source) has no UI surface in this frame.
ai_usage brain_embed, ×2.0), so ① carries the screen-level .wallet-floor. ②–③ genuinely spend nothing. The honest line is no ✦ before ④, not “free before ④”..step-ic.active) — never a fake timer. The draft lands in the SAME editable field the founder reads, never locked. ✓ Keep writes it to services[i].listing via apply_pending_sync — persisted only here (spec INV-4) · refine opens 28e · discard throws it away, the row returns to its prior state, nothing recorded (spec §5, “founder navigates away mid-preview”).origin: 'typed' with the “you told us” chip — never stamped “generated” (spec §5, AC-LISTING-21)..review-box in Part II — a builder reading Part I would never have seen it seated in the page. Promoted 2026-08-10; the extra states (loop, stale, blocked) sit in this same step.+ Add files, links, or paste anything row is the SAME composer that is the whole content of 28b′, at its second density. It sits BELOW the free write-up and ABOVE the paid ask — gather before rewrite, free before paid, in reading order.✦ Draft it for me · Draws from your wallet — $2.00 in this exact position on an offering with zero facts — a paid door with nothing to draft from. That is the never-invent boundary (D1) sold back to the founder, and it argues against the CAPTURE MANDATE this same frame carries: the read exists to FILL these facts. Both the artifact and the shipped page had it; this is a design correction, not a build-fidelity gap.listingFactsWarning inside the listing block (PlaybookDepthSheet.tsx, under the “Still open on this one” eyebrow). Under this ruling the fact sentence belongs to the FACTS layer and the eyebrow renders only for non-fact states. listingGapChips stays as the computation; only its mount point and its label move.LaunchKitRewriteComposer is deliberately NOT ShareInline because its material is per-run context that must never persist (AC-GEN-04). Here the requirement inverts — what she shares IS facts and must land in the Brain — so ShareInline's corpus save and playbook proposals are the point, not machinery to avoid. The launch-kit reading still governs the 28e refine steer. Two boxes, two licences..persona-chip CSS): ● filled = selected · ○ hollow = not · ★ Main = primary. "Set as main" MOVES the star rather than adding a second one — exactly-one-primary is a DB invariant (persona_classification EF), so the UI makes it a move, never a multi-toggle. HowYouRunCard.tsx, re-homed here into PlaybookHowYouRunSheet.tsx.persona_classification EF (keeps vertical_slug synced, single-persona runtime stays byte-identical); ADD a non-primary / REMOVE writes directly to the brain_profile_personas junction (useBrainPersonaSelection, RLS-scoped).useBrainPersonaSelection has exactly ONE consumer in the repo (this picker). There is no lens row on the playbook (AC-BRAIN-11), no "grew a chapter" recognition copy (AC-BRAIN-12), and readiness does NOT scope per persona (AC-BRAIN-13) — verified against origin/main, and tracked in #2947 as "the multi-persona lens family is wholly unbuilt." Those three ACs are named here as the DESTINATION this control feeds, never as satisfied. Draw and build the picker; do not read this frame as licence to claim the lens.get_business_context_for_assistant(), so it is already read on every assistant reply. That is why the picker must not be downgraded to single-select to match older drawings in this file.Archetype: sheet-slide-panel.md. Split chrome: f13b's family rule (AC-BRAIN-74). RecommendedKitLink (T1177) rehomed under this picker.
brand_voice_v2 / brand_style_card), two provenance regimes, two confirm mechanics, two consumers, ~4:1 length asymmetry. One row because “does this sound and look like me?” is one question.channel_registers when a Generate produced them, else the authored preset × place matrix (voiceRegisterFallbacks.ts) — never five blank forms. The website is its own register: her site is her talking, a listing is her selling.red_pen exemplar. Capture rides the confirm; there is no extra founder step.HowYouSoundSheet.tsx hosts it all. Pre-voice, the sheet leads with the “Pick it by ear · 2 min” door (→ f23’s game, shipped as VoiceCalibrationSheet.tsx) and the free “Hear how you sound” articulate-back card (22c); live-voice, the shipped block order is BrandVoiceLive (tweak · add a real reply · regenerate) → VoiceRegistersPanel (one-line · how-you-write · tuned-per-place · phrases) → VoiceExemplarList → VoiceMatchScore; the LAST row is always “Anything else about how you come across” (personality_notes, rehomed lane 4c). Split hosting rides f13b’s family rule (AC-BRAIN-74, B13b lane).Archetype: sheet-slide-panel.md. Row grammar: frame 13’s EDIT mode, unchanged.
Host pattern: frame 14, verbatim. Shipped 2026-07-30 catch-up (#2977): VoiceCalibrationSheet.tsx — zero AI holds (authored scenarios, deterministic nearest-preset assembly, picks banked as calibration_pick/founder_text exemplars). Entry door shipped: frame 22’s pre-voice “Pick it by ear” card (a sibling sheet inside HowYouSoundSheet, never inside the generate engine).
HowYouLookSheet.tsx, and it already rides BrainSplitHost — the first playbook sheet shipped on f13b’s split family rule.useBrandStyleCard → brain-scrape style_harvest) → her own moodboard → web guess (BrandSignalBlock, reused verbatim — use/discard only, never corrected in place). Never a red/green tint (T1203).useBrandLookReflect): metered read → free “Yes, that’s the vibe” APPENDS to visual_tone (never overwrites) → typed “fix” steer; 48-hour retention line verbatim in-surface.Archetype: sheet-slide-panel.md. Web-mined signal originates in frame 12’s outward-presence read.
The live playbook · last change Aug 12
Looks at reviews, mentions and your public profiles, then lands the findings as drafts you confirm. Draws from your wallet — it’s the only way this section fills.
What research understood — not a recap of the playbook.
Uglywoo is a founder-led retreat studio. Six people at a time, one person in the room. The site sells presence, not a wellness mill and not a solo pilgrimage.
How the web talks about you — not researched yet. The Press page on your site didn’t load.
BrainReadReport.tsx still recaps playbook fields. Stands-out / what-changed synthesis is a write-path cost at research mint, not a CSS restyle. Do not restyle live until this drawing is signed off.Archetype: same fill-the-panel book as f33, different job.
What research understood — not a recap of the playbook.
Uglywoo is a founder-led retreat studio. Six people at a time, one person in the room. The site sells presence, not a wellness mill and not a solo pilgrimage.
How the web talks about you — not researched yet. The Press page on your site didn’t load.
found row has already landed.BrainSplitHost (rail covered). Clickable walk-through: our-read-v2-preview.html. Mint data is still { thesis, stands_out, changed, cant_see }; web-talk reads the latest brain_reputation_reads row — not a note field, ADR-036 untouched.BrainSplitHost, engage at 1024). LEFT = the Ink & Air shelf in context, Our-read cover lit. RIGHT = the deck. Production covers the rail (PRD split lock — a 200px rail at 1024 leaves the co-pane under the 375 floor). The preview rail is review chrome so Peyton can see context, not a third production shell. Below 1024 the left pane is omitted — that is the phone/tablet frame, not a third composition.stands_out[] as stacked cards — one claim per card, same grammar as can't-see. No lede inventing a chapter the writer didn't write. "How you come across" as its own slide is Future (18·v2-f).changed[]. Drawn only when the array has items. Pass 1 / empty changed[] omits this slide entirely (Little) — never filler copy.found mode on the CURRENT note; absent/ambiguous/thin omit the slide. Sourced from the latest brain_reputation_reads row — not a mint field.cant_see[] plus server seeds (failed pages). When web-talk is absent, the “not researched yet” seed lives here — not as a dead web-talk slide.diagnosis.mode. Add reviews opens HowYouShowUpSheet. Review drafts returns to the playbook. No confirm, no generate, no inputs on this slide.found row lands after the note, the open deck gains that slide (pass 1 becomes five). If the row is absent/ambiguous/thin, the slide stays omitted and the cant_see seed ("not researched yet") is the honest line.The live playbook · last change Aug 12
We draft your voice first — you keep it — then fill the rest to match. Each run draws from your wallet; you review every draft before it's saved.
A guest asks: “What happens at a breakfast?”
e.g. “Coffee + intros, one founder shares a 10-min story, then open networking” — how most breakfast hosts run it
Already written down somewhere? Share a screenshot or doc instead →
← Back · doesn’t apply to me · skip
BrainAskSheet.tsx): the separate one-question-at-a-time GAP ceremony on the D4 40:60 sheet — top ~40% the section filling in live (sticky, internal scroll), bottom ONE structured question, never a form. On build, f32 replaces the ceremony: gap questions become ○ open rows on the categorized surface, 32b’s Save auto-advances, and the Back / skip / doesn’t-apply row dies (“doesn’t apply” survives as a quiet editor link). Drawn once here as width-agnostic anatomy (f11/f16 precedent) — the full 14a–14f frame family is retired.example_answer, founder-only facts as dashed fact-blanks, the fact written ONCE and the answer derives (AC-FAQGEN-13) · 14f groundedness decline — no prose, no accept row, monochrome ✎ yours to answer per D3 (AC-FAQGEN-07, #3071). The 14e/14f grammar lives on in f32’s rows (32b-s state note).BrainAskSheet.tsx:709 gates “Already written down somewhere?” on currentKey === 'faqs'; extending it to every gap question (voice, basics, and the f28 listing gaps reuse this sheet verbatim) is open cross-cutting scope, tracked as its own follow-up (drafted 2026-08-04). Peyton ruling 2026-08-07: corpus/peer-generic material never mixes into this queue — it arrives as 32c’s set card and per-group offers.Archetype: sheet-slide-panel.md.
FaqCoverageDots (the ●/◐/○ legend + “N/M offerings tagged”) and the per-row AskEntryWord (“N to answer →”). Peyton’s Option C ruling (2026-08-17, PR #3594/#3625) does NOT restore either to the index row — f9 stays exactly as #3459 shipped it. Both remount one level deeper instead: inside the EXISTING “Customer questions & policies” depth sheet (PlaybookDepthSheet/PlaybookDepthBody, kind="faqs", EDIT mode only), above the persona switch and candidate picker — coverage renders first, the ask-word second.openAskSheet the rail already opens, scoped to the FAQs section — a doorway INTO the one ask-flow home, one tap closer to where a founder is already looking, not a parallel ceremony.┌ FAQs & policies — depth sheet (kind="faqs", EDIT mode only) ─────────┐ │ ● ● ◐ ○ ○ · 3/5 offerings tagged (FaqCoverageDots + legend) │ │ covered · partial · gap │ │ 1 to answer → (AskEntryWord → openAskSheet)│ │ ────────────────────────────────────────────────────────────────── │ │ FAQ for: [ Retreat host ▾ ] (FaqPersonaSwitch, 2+ personas)│ │ “Retreat hosts usually get asked…” [chip] [chip] [chip] │ │ (FaqCandidatePicker) │ │ ────────────────────────────────────────────────────────────────── │ │ Do you take deposits? — Yes, 30%… (FaqRow list) │ │ + Add FAQ │ └───────────────────────────────────────────────────────────────────────┘
┌ Customer questions & policies — ONE categorized sheet, never tabs ────┐ │ │ │ GROUPS are the spine — SECTION ORDER IS THE STANDARD/PERSONA SPLIT; │ │ each group head carries its own coverage — no separate view │ │ │ │ STANDARD — five fixed groups, every founder, zero corpus needed │ │ ● Booking & how to book · 2 covered │ │ ✓ confirmed row — question + answer, nothing else │ │ ● Paying — deposits, plans & methods · 3 covered │ │ draft row — ONE quiet label (“from your site” / “standard”) │ │ + the ✓ Use affordance │ │ ◐ Cancellation & refunds · 2 need you │ │ ○ open row — “answer →” opens the editor (32b) │ │ PERSONA — “For retreat hosts — from what peers publish” │ │ (renders only when the persona corpus is seeded) │ │ ○ Getting there & transfers · nothing yet │ │ one-line peer-set offer — “peers answer these 2 — add as │ │ drafts” │ │ 2+ personas (32a-multi) — the section collapses to a row per │ │ selected persona: ★ Retreat hosts · 3 of 9 answered · Edit → │ │ Workshop hosts · 0 of 6 answered · Add → │ │ tap → THAT persona’s groups in a sheet (Operations & Payment lock) │ │ YOUR OTHER ANSWERS — the uncategorized bucket (AC-FAQGEN-17) │ │ │ │ footer — ✦ Draft the 3 open ones — $3 · + Add a question │ │ │ │ 32b editor — type → the in-your-voice rewrite appears inline │ │ (opt-in ONCE, ~$0.05/answer) → ✓ Save · quiet “keep as typed” │ │ · Save auto-advances to the next open row in the group │ │ 32c empty SECTION — 32a’s spine at zero: the STANDARD heads still │ │ render (“nothing yet”); the set card fills the persona slot │ └───────────────────────────────────────────────────────────────────────┘
✎ yours to answer tag, no accept row, cost nothing (14f’s grammar, AC-FAQGEN-07 ↗, #3071).persona_faq_corpus): the empty group’s inline one-liner here, and 32c’s full set card. Drawn WITHOUT a ✦ — ✦ stays the paid mark only (judgment call: the reviewed offer copy carried one; the lock wins). Standard drafts inherit 14e’s fact-blank contract (AC-FAQGEN-13 ↗) — founder-only facts stay dashed blanks, never invented.computeFaqCoverage / useFaqCoverage().pairs — fetched today and thrown away). FaqCoverageList.tsx stays dead code: its VALUE survives as these heads; its VIEW does not.originChip.ts carries only from-site / you-told-us) · durable server-side capture as an explicit criterion · the 32b auto-rewrite mechanic + its per-answer metering.Archetype: sheet-slide-panel.md. Host contract: src/components/brain/BrainSplitHost.tsx.
FAQ_GROUPS labels verbatim (booking · paying · cancellation-refunds · whats-included · house-rules, from _shared/faq-corpus.ts). Below them, the PERSONA section (“For retreat hosts — from what peers publish”) carries the corpus-driven groups (Getting there & transfers · Visas & travel insurance · Packing & weather · Food & dietary · …) and renders ONLY when the founder’s persona has a seeded corpus — an unseeded persona sees just the standard five. “Your other answers” closes the sheet: the uncategorized bucket, AC-FAQGEN-17’s home, finally rendered.persona.label (usePersonas() / persona_roster), so a 5th persona needs zero frontend code. This inline form is the SINGLE-persona state — today’s default and most founders. With 2+ selected personas the whole section collapses to rows: see 32a-multi below (Peyton design pick 2026-08-07).ModalWrapper presentation="sheet" — the sheet-slide-panel archetype, same slide choreography as that sheet, no new motion or chrome. Tabs and a dropdown-switch were considered and REJECTED, same reasoning as that lock: distinct personas are different outcomes, not sibling inputs to one outcome — a tab/switch hides a sibling persona’s open gaps. Applied to FAQ per Peyton design pick 2026-08-07 (chosen over the dropdown-switch option).useBrainPersonaSelection().primarySlug — the founder’s REAL selection), primary sorts first — the same ★-primary convention as f29’s picker (★ Main, exactly-one-primary DB invariant). Labels and one-liners read from usePersonas() / persona_roster — DB-driven, so a 5th persona needs zero frontend code. Each row carries its coverage count (“3 of 9 answered”, computeFaqCoverage per persona) and ONE action word: Edit → when the persona has answers, Add → at zero.useFaqCoverage(personaSlug) and its EF (brain-profile?resource=faq_corpus) take ONE scalar persona slug — called today with profile.persona_slug (primary only), so a secondary persona’s peer FAQs aren’t fetchable at all. The hook/EF must accept/loop per selected persona. This frame draws the target UI; that multi-persona-aware backend is separate work, not yet built.doesn’t apply
Asked once, ever — “no thanks” means plain saves from here on, and the toggle waits quietly in the sheet header. Typing is always free. Price said here, never per row.
appears as you finish typing — your facts, your voice, nothing added · tap to edit any word
doesn’t apply
Save lands the rewritten answer and auto-advances to the next open row in this group. Metered per answer, silent. Wallet-empty reuses the shipped AC-BRAIN-62 block (#3087) — the typed answer is never lost.
14f’s grammar in batch form (AC-FAQGEN-07 ↗, #3071): a declined row keeps NO accept affordance and costs nothing — the $3 covers only what was actually drafted. Monochrome by D3 — declining to guess is not an error.
persona_faq_corpus.fg-40 → stale fg-55 → contradiction fg-70), no colour spent.BusinessReadHero hosts inside f15 (2026-07-15 lock). "Check my brain" stays retired (D3).The live playbook · last change Aug 12
Looks at reviews, mentions and your public profiles, then lands the findings as drafts you confirm. Draws from your wallet — it's the only way this section fills.
design-decisions.md) already says gaps live ONLY in the rail + ask flow and readiness ONLY in the playbook header. Nothing else on the page counts, tracks, or lists what’s missing.BrainGatePanel.tsx keeps mounting the shared BrainCapabilityRows.tsx in the Personalize step (drawn in assistant-flows/on-brand-support.html — “7 of 7 ready — it can answer guests”). The component is NOT deleted; only its /brain card retires. The one-evaluator guarantee (useBrainReadiness + brainConversationMap.ts, the reason this panel existed) now has one visible home instead of two.BrainAssistantCapabilitySection and its BrainWorkspace mount are gone — the /brain wrapper file is deleted. f9/f9-m draw the post-removal page: nothing between the jump-nav and “Your playbook” except the page-level Drive-scope banner (f26) when it applies.AC-BRAIN-NN now files against the GATE surface, not /brain.BrainPage.tsx) initializes the consent to false — this component never starts a recurring PAYG charge on its own; flipping ON is the only path in./brain page, below the playbook — member-only, never rendered for guests or inside the activation slide-over (bare mode).Implementation: PeriodicCheckToggle.tsx, mounted BrainPage.tsx.
Lock D3 (kit design-decisions.md, Brain R5 item 3) retired the paid "Check my brain" CTA and named "Research again" the only consented paid re-run — "never auto-run." This toggle is an explicit opt-in for something that then fires automatically the moment a linked doc drifts, with no per-run tap. Whether an opt-in-recurring consent satisfies D3's "never auto-run," or whether D3 needs an amendment carving out this one pre-consented path, is Peyton's call — drawn here as shipped, not resolved here. Billing-consent control; treat the ruling with that seriousness. Shown here at its default: OFF.
The live playbook · last change Aug 12
Looks at reviews, mentions and your public profiles, then lands the findings as drafts you confirm. Draws from your wallet — it's the only way this section fills.
Re-checks your content when your docs change, so assistants stay accurate. Runs only on real changes — pay only when it runs.
With checks off, if your docs drift or get messy we can't guarantee your assistants stay accurate.
Every screen below is the whole Brain page — masthead, rail, playbook — so you can see where each change lands; only the STATE changes between screens. The parts they compose live at full size in Part II · Components (reference only, never a thing's sole appearance — kit lock 2026-07-30). These frames are the 1:1 build contract — the dev team matches them pixel for pixel; only current / being-built state lives here. Deferred ideas live under Part III · Future at the bottom — never a build target (kit canon U9). Acceptance ids cited in frame notes (AC-* ↗) live in exactly four homes (widened 2026-08-02, #3110 — this file's f13/f1b amendments cite AC-URLX-*, which had no PRD mapped): AC-BRAIN-* / AC-PLAYBOOK-* / AC-BRANDSIG-* / AC-OFFER-* in prd-pl-brain.md §Test Plan; AC-VOICE-* / AC-STYLE-* in prd-pl-brain-branding.md §Test Plan; AC-FAQGEN-* in prd-pl-brain-faq-generation.md §Test Plan; AC-URLX-* in prd-pl-brain-gather-inputs.md §Test Plan — prd-pl-brain-redesign.md is superseded and its own colliding AC-BRAIN-01..25 is never a citation target — this artifact cites ACs, never mints them — as of 2026-07-26 every criterion it referenced is filed there (AC-BRAIN-41..58, AC-BRANDSIG-04/05, AC-VOICE-58), with one item left unresolved and flagged in f9. Known collision (CTO-flagged, 2026-08-01): AC-BRAIN-10/AC-BRAIN-11 exist in both prd-pl-brain.md and prd-pl-brain-faq-generation.md under the same ids with different content — this file's citations of those ids always mean the prd-pl-brain.md criteria; the lint's accept-set is a flat union and cannot yet enforce that distinction (tracked, not fixed here).
/brain, before signing up AC-BRAIN-08 · AC-BRAIN-15 ↑ top view at desktop ↑↓Paste your website. We read your pages, then look up what else is public. ~5 min · draws from your wallet.
MobileActionBar).Or send me a magic link instead
AuthModal’s login tab (Google + email/password + magic-link fallback), same modal shape as the waitlist form.Paste your website. We read your pages, then look up what else is public under your business name. ~5 min · draws from your wallet, confirmed before anything runs.
ShareInline has already cleared the composer (its trigger is content that classified without a confirmable proposal), so “Add or edit directly” and “Try again” land on an empty composer. ‘unsorted’ keeps the “your text is still here” line because there the paste IS still staged behind the panel.section: how-you-show-up, two screenshots staged, nothing charged yetBrainShareSheet.tsx:113-129). Every other door, including the Instagram doors on the intake screen, opens the UNSCOPED sheet titled “Share anything”; “Teach your Brain — Instagram” was never a string the code could produce.StagedItemRow still renders the picker — retirement rides the build..ds-top grammar and light up as proposals land — they only ever gain, never lose a confirmed line.spec-brain-identity-gate-sheet.md) — NOT built; today the checklist stacks every done row. The walled Instagram row survives the collapse on purpose — it is her only available action during the wait.The live playbook · last change Aug 12
The live playbook · last change Aug 12
The live playbook · last change Aug 12
.missing-item anatomy as the rail, with a red ✗ substituting the neutral dot to mark failure.Draws from your wallet — you only pay for the read we run, nothing charged yet.
spec-brain-identity-gate-sheet.md).sm:flex-row pair); money subline verbatim (#2749). AC-BRAIN-75 delta has SHIPPED — the amber pending tags this frame carried were stale and are cleared; ✎ on the founder-name row matches BusinessIdentityGate.tsx:244; labels renamed 2026-08-02 (Business name / Founder full name · optional) — the rename rides the build. Decision 9 ladder applies at 375 too: face That’s me — run ✦; the editor and re-proposal states follow the desktop frames (1f″) — the sheet stacks, same ladder.Bloom Retreats runs small, capped women's wellness retreats in Ubud — twenty seats, four times a year. It's for founders and creatives who need to unplug, not first-timers looking for a party.
The five-day Ubud retreat is $1,450, all in — room, food, sessions, airport pickup. A $435 deposit holds the seat; the balance is due 14 days before arrival.
A 30% deposit confirms a seat; the rest is due two weeks out. Cohorts run in March, June, September and November, capped at 20. A sold-out cohort routes straight to the waitlist for the next date.
Warm, first-person, and present — you sell presence, not a transaction. Never brochure-speak, never hype adjectives, never push the deposit before a guest is ready. Earthy neutrals, soft film-grain photography, a quiet serif for headings — the same calm the retreat itself promises.
Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
Permission needed
This permission will be added to your existing Google connection. You can revoke access anytime from your Connects page.
window.location.href), not a MystFlo
surface. Out of scope for this artifact.
oauth-callback redirects to /connects?status=success, then back to Brain; useGoogleScopeStatus re-checks, finds drive.file present, and the banner unmounts. Nothing else on the playbook moves.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
Tap the cover to read
Edit a chapter
Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
Your places, hours, and how you deliver
Your offers, prices, and what's included · 3 offerings
6 days · A slow week of yoga, food and nothing urgent
5 days · Studio days plus one long table every evening
The house, the week, your people
What makes people pick you
The only small-group week that asks nothing of you — not a party, not a program.
Your FAQs, deposits, refunds, and rules · 3 of 3 answered
Depends on the cohort — I check and answer straight.
Yes — 30% holds the seat. Balance due 14 days before arrival.
Room, food, sessions, airport pickup. Flights are yours.
Your voice, your colours, your type — edited from (sound) and (look) on the index
Warm, direct, a little playful — you sell presence, not a transaction.
What only you see
Where the money actually comes from
Your people, in your own words
Post-30s professionals craving a reset — people who will pay for a week that asks nothing of them.
What the web already says about you
Not filled in yet
Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
The weeks are hosted in two houses we return to — one above Ubud, one on the Lisbon coast. Guests arrive on a Sunday and leave the following Saturday.
We cook, we sit, we do not fill the calendar. Most people come alone. Most people come back.
The work is presence, not a program: two yoga sessions if you want them, one long table every night, and the rest of the day left empty on purpose.
Your places, hours, and how you deliver
Your offers, prices, and what's included · 6 offerings
6 days · yoga, food, nothing urgent
5 days · studio days + one long table
7 days · the quieter house, no workshops
6 days · two people, one room, the same table
You bring the group. We run the house.
The house, the week, your people
What makes people pick you
The only small-group week that asks nothing of you — not a party, not a program.
The house is the offer. The table is the offer. We do not fill the calendar to prove the week was worth the ticket.
Your FAQs, deposits, refunds, and rules · 8 of 8 answered
Depends on the cohort — I check and answer straight.
Yes — 30% holds the seat. Balance due 14 days before arrival.
Deposits are non-refundable inside 14 days; they can move to another date once.
Room, food, sessions, airport pickup. Flights are yours.
Most people do. The table is built for that.
Full refund up to 45 days out. After that, credit toward another week within a year.
Yes — DPS or LIS, on the arrival Sunday. One van, one time.
Yes. The sessions are optional and paced for people who have not been on a mat in years.
No — the week is one group, one arrival, one leaving. A couples week exists if you both want the whole thing.
Your voice, your colours, your type — first line at pull, the rest on her paper
Warm, direct, a little playful — you sell presence, not a transaction.
Write like you are sitting across from them. Short sentences. No brochure words. No “journey,” no “transformational,” no exclamation marks. If a line could sit on a hotel website, cut it. The voice is the same in chat, on the site, and in the email that confirms the deposit.
What only you see
Your people, in your own words
Post-30s professionals craving a reset — people who will pay for a week that asks nothing of them.
They are not looking for a party and they are not looking for a teacher. They have already done the loud retreat. They want a house, a table, and permission to be quiet. Assistants use this to decide tone, never to invent a persona.
Nothing confirmed yet
6 chapters still empty
What your assistants say for you
What you do, and who it's for
Not filled in yet
Teach your Brain, or open this chapter on the index.
Your offers, prices, and what's included
Not filled in yet
Teach your Brain, or open this chapter on the index.
Your voice, your colours, your type
Not filled in yet
Teach your Brain, or open this chapter on the index.
Paste your website. We read your pages, then look up what else is public. ~5 min · draws from your wallet.
The playbook we build, by how you run. Tap a book to read it.
EXAMPLE kicker · persona as the title · business as a small credit line · “Tap to read” at the foot. Each cover wears its persona’s fictional Look palette — white stays uniquely her real playbook. Desktop uses this SAME carousel inline (see 34) — no rail fork.Class seats booked from the DM, no more back-and-forth.
This example shows the shape of your playbook. Workshop hosts build with our general question set today — a tailored one for your craft is on the way, so a few questions may be broader than what you see here.
What your assistants say for you
What you do, and who it's for
The Clay Room is a pottery studio in Lisbon running beginner wheel-throwing classes on weeknights and weekends. It's for people who want to make something with their hands after work, not for trained ceramicists.
Every seat gets booked from an Instagram DM that you walk to a payment link by hand.
Your places, hours, and how you deliver
If a class fills, the assistant offers the next open date instead of leaving someone on read.
Your offers, prices, and what's included · 2 offerings
You're not selling a class; you're selling the first time someone's hands actually centre the clay.
Two hours. Clay, tools, firing, and two finished pieces.
Collect glazed work in about three weeks.
No experience. Every intro night assumes it's their first time.
Six or more. Same studio, same first-timer pace.
Payment in full holds the room.
What makes people pick you
The whole first class is built around it being fine to make a wonky bowl.
You started teaching because the studio had quiet wheels in the evenings and friends who kept asking to try. The thing a first-timer worries about is looking clumsy in front of strangers.
Your FAQs, deposits, refunds, and rules · 5 of 5 answered
None — every intro class assumes it's your first time.
About three weeks, once they're fired and glazed.
Yes, up to 48 hours before. Inside that the seat is held but not refunded.
Clothes you can get dusty. Aprons are at the studio.
Six or more is a private session at €55 a head. Payment in full holds the room.
Your voice, your colours, your type
Friendly, hands-on, and unfussy — the way you'd talk to someone nervous about being bad at it.
Reassure first, book second. No art-school jargon, no pressure; if someone's not sure, point them at the next beginner night.
What only you see · yours to fill
Where the money actually comes from
Your people, in your own words
Deposits, booking rhythm, day-to-day
Your north star
What the web already says about you
Filled from your research and your own notes — never shown to customers.
Yours gets built from your own site, Instagram, and files — then you review and edit every line.
.ink-* system as 33-m — one book design for real + template. readBy is the 11px folio line on the numeral row (template-only). Disclosure colophon only for generic-map personas (AC-BRAIN-14).Workshop host as her persona when unset (Peyton 2026-08-16).Customers like yours usually ask these — tap to add, then answer in your words.
Every offering's full facts — and a ready-to-post listing underneath, assembled free from those facts.
Nothing gathered on this one yet — no description, and no list of what's included.
✦ Draft it for me — the one 44px tap that spends money, and the only ✦ on the screen, carrying its wallet line.+ Add files, links, or paste anything row is the SAME composer as 28b-m′, collapsed because there is a write-up to read here. It sits below the free write-up and above the paid ask — gather before rewrite, free before paid, in reading order. Tapping it expands the box in place (28b-m′'s density) and brings the .wallet-floor line with it.No description yet, and no list of what's included.
tap any line to fill it in — or share what you've already written, below
One write-up you can use anywhere you sell this.
No ✦ on this screen and no ask, so no .wallet-line — but not “free”: saving is read and metered, so the screen-level floor rides with the composer, same as f15. The ✦ door appears only once the facts can carry a write-up (28c ④).
paste text · upload a file · link a doc · your sheet · an image) under an “Already written somewhere?” eyebrow, and the desktop/production twin of this state went further and offered ✦ Draft it for me · Draws from your wallet — $2.00 on an offering with nothing gathered — paying the AI to invent a listing from nothing (D1 with a price tag). Both are gone. ONE composer, no ✦, no ask.ShareInline stopped being three tabs. Type · paste · drop · link belong in the same box.ai_usage brain_embed, ×2.0). The screen carries the f15 .wallet-floor line — a screen-level floor, distinct from the per-control .wallet-line, which stays paired 1:1 with a ✦. The check count(✦) == count(.wallet-line) holds at 0 == 0.Tap fix to edit any word before you keep it.
Pick every operation that's you — assistants only ask what applies to the ones you've turned on.
HowYouSoundSheet.tsx:174Your voice is what every assistant borrows when it replies. Set the tone, the words you use, and the lines that sound like you — confirm it once and it carries everywhere.
Add a tone, a few words, or a reply you’d write first.
Say it your way
Even better — your own words beat our guesses.
“omg yes — Saturday’s open, want me to grab you a spot?”
Saved as your examples: 3 lines you picked · 1 you wrote
Not quite? Tune again · ✦ draft from my writing
The live playbook · last change Aug 12
AC-BRAIN-28/29/AC-SIGNOFF-08/10 (relocated from the retired f6/f7) already live in prd-pl-brain.md §Test Plan, cited there. Composition-parity fix (Peyton catch, 2026-07-30): desktop now seats the same “Where you stand” + “Preview template” rail as 1d (this state and 1d share the same 96%/“How you show up” numbers) — an empty right flank was the same miss f2a had.
What research understood — not a recap of the playbook.
Uglywoo is a founder-led retreat studio. Six people at a time, one person in the room. The site sells presence, not a wellness mill and not a solo pilgrimage.
How the web talks about you — not researched yet. The Press page on your site didn’t load.
m-header → backline → one slide. Thesis 24px, cards full-width.brain_profile.services[i].listing{}, the brain-generate branch id 'listing', channel_registers.listing, and the spec/PRD term "general product listing".Everything customers ask, grouped the way they ask it.
✦ rewrite onEverything customers ask, grouped the way they ask it.
✦ rewrite onA guest asks: “What should I pack?”
appears as you finish typing · tap to edit any word
keep as typed · doesn’t apply
Save auto-advances to the next open question in this group. Typing is always free.
No questions yet — start from what businesses like yours get asked.
All in by default — tap a row to leave it out. Nothing counts as answered until you ✓ Use it.
Prefer them answered for you? ✦ Draft what your playbook supports →
+ Add a questionpersona.label, never a hardcoded string.No 375 tier — the card no longer exists on this page at any width. The rows’ own drawing lives with the gate (assistant-flows/on-brand-support.html, Personalize step).
Re-checks your content when your docs change. Runs only on real changes — pay only when it runs.
The live playbook · last change Aug 12
BrainJumpNav). Two labeled groups stay; the bordered pill wall is retired (2026-08-18).Jump · {active} opens a sheet of the same typographic TOC. lg+: two quiet middot rows, active = node + white type, “Top” is a text link. No horizontal scroll lane.lg+ — two quiet TOC rows, middot links, no pills. Active = node + white type. Top is a text link.
WaitlistModal directly (useGuestGate.tsx); “early access” leads because most visitors are new founders.AuthModal in login mode, one level up so it sits above this dialog.How should we reach you? (fill at least one)
Already got private access? Sign in
Check the link, try another place your business shows up, or start from a screenshot → f15, context: whole playbook.
Drop a screenshot of your profile instead → f15, context: whole playbook. Caught BEFORE the read fires — the host is known-walled, so nothing is charged and no spinner runs.
Share a screenshot or paste the details instead → f15, context: whole playbook. NOT shipped — siteReadWarning() classifies Instagram/Facebook/LinkedIn/TikTok today (useBrainScrape.ts:48-136, extended from Instagram-only by PR #3545); this extends AC-BRAIN-40’s intercept pattern to link-in-bio / scheduler / marketplace hosts as a CLASS (Linktree/Calendly/Etsy shown as examples, never an exhaustive domain list) — filed as AC-BRAIN-73 ↗ in prd-pl-brain.md §Test Plan, cited here.
→ opens: Teach your Brain — context whole-brain (f1c/f1d)
→ opens: Teach your Brain — context inventory-row:instagram (f5)
we can see you’re on Instagram — but some platforms won’t let us read inside them yet. Share a screenshot in Teach your Brain above — we’ll read it and fold it in.
→ opens: Teach your Brain — context section: how-you-show-up (f12)
← every door lands here — the ONE sheet; the title and top pane render from the context each door passes (R6-3), the composer never changes (BrainShareSheet.tsx:175). Only section:how-you-show-up retitles; everything else — including both Instagram doors, which call onOpenShare() with no argument — is “Share anything”.
✗ Facebook doesn’t let us read pages like that. Paste the text or drop a screenshot below instead — nothing’s been charged.
Real shipped copy, captured live off the PR branch preview (desktop + narrow tiers, .claude/tmp/pr3545-screenshots/) — verbatim match to BusinessReadHero.tsx:169-176. This is the SECOND mount of the walled-host check: f2’s existing Instagram card covers BrainIntakeScreen.tsx’s own guard; this card covers the composer inside f15’s “Share anything” sheet, which the mockup had zero frames for before this PR. Client-side only — no crawl fires, no charge, matches AC-BRAIN-40’s intercept-before-read contract.
Same message shape, four hosts now recognized before any read attempt fires:
Live-captured proof for Facebook (left) and LinkedIn (identical shape, different host name) — TikTok/Instagram share the same code path (useBrainScrape.ts:48-136, UNRELIABLE_PATTERNS), not independently screenshotted. Known gap: this session’s browser automation floored at ~900px width — a true 375px mobile capture needs a manual pass (same pattern as PR #3397’s “768 not captured” note).
Reuses f1b’s existing narrated checklist frame (drawn there in full) — the fix is routing, not a new screen. Before #3533: confirming “That’s me — run ✦” at f1f left the “Share anything” sheet open on top, so the read progressed underneath but stayed invisible until a manual reload. After: onRead calls setShareSheetOpen(false) the moment the read actually starts (BrainPage.tsx:2871-2875) — never on the earlier preflightReadBlocked return, so a wallet/payment gate still leaves the composer exactly where the founder left it. Same turn, no reload: she lands straight on f1b’s live per-source progress.
No new visual state to frame — f1b already depicts the destination screen this fix makes reachable. Citation only, per the gap named in #3586.
Saving it to your Brain…
exits: saved, always — then proposals or none. Never silence, never a tick with nothing behind it.
The playbook step is an OFFER on top of a save that already succeeded — declining every card changes nothing about the save.
Nothing here belongs in a playbook section — that’s fine.
Put it in a section yourself →
Byte-identical saved block to the panel on the left — sameness is the mechanism. A distinct “couldn’t sort it” panel is what made this read as a failure.
Neutral monochrome, never red. Composer stays VISIBLE with everything staged — today’s honest-empty panel hides it, which is why “try again” currently means re-dropping.
Read it — couldn’t sort it yet. Your text is still here — we just didn’t find anything to add.
Shipped at BrainShareSheet.tsx:230-258. It answers “did we sort it?” when the founder is asking “did you keep it?” — and today the honest answer to the second is no, because this door never writes brain_documents. Split into the two states left of here. Interim (2026-08-16, #3145): the shipped panel is now itself a 2-state split — ‘unsorted’ | ‘nothing-to-confirm’, drawn at 15j — which fixes the conflation at the copy level but still saves nothing; this ladder remains the destination.
We couldn’t open rates.pdf — it’s behind a login. Share it here and we’ll keep it in your Brain.
context inventory-row:<id> — falls through to the generic title (BrainShareSheet.tsx:113-129: only section:how-you-show-up retitles). Resolving lands the drafts and ticks the f5 row emerald. “Teach your Brain — rates.pdf” has no code path and is corrected here.
context whole-brain — the shell lights up live as sorted material lands (day-one intake case). The save already happened before any of these rows moved — this pane tracks the second step only.
context section:how-you-show-up — the ONE scoped title that exists, with one real caller (the walled-social bridge + reviews screenshot doors, f12). A new section/inventory context falls through to the generic copy until ITS door names something specific — never a silently wrong label.
375 only — desktop identical. Research continues from the typed name; a source we still can’t attribute lands as an f5 row (confirm or share), never silently guessed. (merged from the retired f3)
ModalWrapper presentation="sheet", .sheet.co — f14’s geometry, no new component). It OPENS ITSELF when the free read finishes (system event, no trigger button); checklist step 2 is the resting state and the way back in. Full sequence + page frames: 1f inside f1..co-main, 60%); the five-line plan is read-only reassurance beside the decision (.co-pane, 40%). At 375 the panes stack and the plan collapses to a disclosure — the business name is first on screen.synthesize-profile + reputation-search only after) · confirmed name = the exact web-search string and a proposal in the one “Looks right” save (#2352) · money in the subline verbatim (#2749) · first confirm disables the button (T1172) · editing is ONE shared toggle, the value itself is the button, Contact not editable · “Not quite” opens the basics editor, becomes cancel once open, never proceeds to the paid run.ShareInline composer embeds in the editor under a short lead — Wrong business? Show us the right one. (08-02 ruling; scoped second host of the f15 composer, verbatim reuse); material saves on arrival, then Find my business ✦ re-resolves the peek and the sheet asks once more (1f″) before the paid read — capped ×2, then “Start over — no charge”. Typed fixes skip the re-find (Confirm & run ✦). The POST-read correction loop stays deferred at f27..co-main 60% is the work, .co-pane 40% is the plan; page chrome is 1b’s, dimmed behindDraws from your wallet — you only pay for the read we run, nothing charged yet.
.co-pane — the plan, read-onlyNot your site at all? Start over — no charge
“Not quite” toggles the basics editor and never proceeds; once open it becomes Cancel and resets the fields (#2217, shipped). The share door (SHIPPED, AC-BRAIN-78) saves on arrival; staged material triggers ONE capped re-find + re-confirm before the paid read (decision 9) — the paid bundle still fires once. f27 stays the post-read guard.
⚠ drawn as width-agnostic anatomy (no device chrome) — no separate 375 tier.
→ f15 · context inventory-row:instagram
→ f14 FAQ queue (typed answers, not shared material — sibling rule)
→ f15 · context inventory-row:rates-pdf
Our-side failure · free · no price shown. annotation: 2 of 3 free tries consumed server-side — the founder never sees a counter.
Routes to f15, context inventory-row:pricing-page · still no price.
⚠ drawn as width-agnostic anatomy (no device chrome) — no separate 375 tier.
.draft-block rows on the sections they belong to (f9’s row anatomy verbatim) — no confirm screen.OurReadSheet.tsx is superseded — the report slide-over (f18) is the ONE Our-read surface..pb-row grammar for every section and state — title + chip + 1–3-line summary + “detail →”; the old section-vs-summary-row fork is dead.--fg-70 (D7), 26px row breathing room; right rail: “What’s missing” then “Preview template”, prices from props. Populated full-page examples live in the gallery (f1c/f1d).line-clamp-2 live in those notes; the full document is f33. Shipped PlaybookPage.tsx renders this grammar since LOOK #3459/#3484 landed on Pages; the f1c/f1d + f12 full-page copies — and the f1/f4/f11/f16/f17/f31 siblings — were synced to it 2026-08-15.listing{} key, the brain-generate branch id 'listing', channel_registers.listing, and the spec/PRD term “general product listing” all stay unchanged — renaming the data model to match the label is a defect, not consistency. Code note: the LIVE page still renders the pre-merge specified-not-built row (PlaybookPage.tsx `listingCopy` anchor, #2978) until the #3028 build lands — that residual is build lag, not contract; builders draw from f28.Archetype: none — long-scroll grouped-zone profile page; candidate new archetype (kit lock 2026-07-15).
375 tier: 9a-m / 9b-m / 9c-m in the flow ↑ — full-page twins (9c-m is the first-run Teach chip). This cut stays width-agnostic anatomy.
.pb-row anatomy as the partial/complete states — title + ONE quiet add line, no separate "empty design." Populated full-page examples: f1c/f1d.⚠ drawn as width-agnostic anatomy (no device chrome) — no separate 375 tier.
14 mentions across the web for “Uglywoo Retreats”
Shows up on:InstagramGoogle Business
Sells on:Website
we can see you’re on Instagram — but some platforms won’t let us read inside them yet. Share a screenshot in Teach your Brain above — we’ll read it and fold it in.
↻ last researched recently · Research again →
Add your reviews → your reputation
★ 4.8 · 32 reviews on Googleyou added this · Jul 15Refresh →
Add from a screenshot →
section: how-you-show-up — no second, ad-hoc uploader. Door copy is live shipped-in-artifact.OutwardReputation.tsx:924 used to draw a numbers-only screenshot extractor that charged and returned nothing on profile screenshots (QA Bug 2). It is now the plain door this mockup prescribes; review-count extraction survives as a backend capability inside the read. Recorded in the f21 ledger.tap → “detail →” is the row’s one door (D4) — the summary itself never edits in place.
.stage/.dim/.sheet choreography as every sheet in this family, both tiers; closing returns to this same row (13b: chip flips, readiness ticks).PlaybookLineEditor's grammar, now inside the sheet, never on the page summary).included ✓ · how you describe it: ready or … you refined this. Rows only ever say “open →” — no paid verb lives on the list and no ✦ appears here at all; the paid door is one tap in, on the offering's own detail (28b). A list a founder scans must never be able to spend money.chip-origin = from your site / you confirmed / you refined this. State (ready / not written yet) is typographic, never a chip — a state word inside chip-origin would invent a fourth vocabulary. Missing FACTS are amber warning TEXT, never chips (Peyton 2026-08-10): a pill reading “what's included?” looks like a feature the offering HAS. The sentence still names the actual missing facts, never a generic “needs more info” — that phrase is the collapsed playbook row's aggregate only. Chips survive for NON-fact states only (no photos shared yet).open → every other row uses. The row-level verb was “answer 2 questions →” until 2026-08-11; it changed because the primary door inside is now the mounted composer, not a question loop, and a list should not promise one shape and open another. The guided loop (28c ②–④) is unchanged behind it — one verb on the list, both paths inside.tap any line to correct it — you edit, you never re-type what your site already says
One write-up you can use anywhere you sell this.
the standard shape for businesses like yours — in your words · assembled free from the facts above
Built from what you've told us.
ASSUMPTION, pending Peyton — no fix verb on this state: the assembled default has no inline edit (spec §2.3), so correcting a fact above rewrites it, free; fix appears only once a draft is Kept (28d). If fix should edit the default directly, that edit persists as listing{} with origin:'typed' — a FREE action writing the block the spec reserves for Keep/Replace. Data-model consequence the build lane inherits, not styling.
✦ Draft it for me, wallet line directly under it, never at the top of the sheet. The assembled default is the example; the ask is explicit — she is invited to a peer-grade version, not handed a tool.No description yet, and no list of what's included.
Same box as everywhere else in the Brain (f15) — nothing new to learn — but mounted, not linked to, and scoped to this offering so what lands becomes ITS facts. Seated in the real page at 28b′ ↑. Cheap, not free: saving is read and metered, hence the floor line and no ✦.
Still missing what's included and a description.
Checked against the peer-standard listing shape — no model call. Amber TEXT, not chips (Peyton 2026-08-10): a pill reading “what's included?” looks like a feature the offering HAS. Renders in the FACTS layer, once — the write-up layer never restates it (2026-08-11). listingGapChips survives as the COMPUTATION; only its presentation and mount point changed.
What's included in the buyout — lodging, meals, staff?
e.g. “whole villa, all meals, private chef, no shared spaces” — the f14 GAP ask-sheet pattern, reused verbatim
Facts are in — write the listing from what you just told us.
usually a few seconds — the row stays right here
Tap any line to edit it before you keep it — an edited draft saves as you told us, never “generated”.
what to change — we'll rewrite around it, not start over
No offering rows at all — routes to What you sell; this layer never invents an offering to hang a listing on (spec §5).
Still missing what's included and a description.
Facts too thin for a complete listing — the composer renders in place of the ✦ door, not alongside it (Peyton ruling 2026-08-11): a founder cannot be sold a draft of something we have nothing to draft from. Never a blank form, never a fabricated body (spec §3.4). Missing facts are amber TEXT, never chips (Peyton 2026-08-10), and they say it once — the write-up layer below carries only its state word.
BUILT DIFFERENTLY as of 2026-08-11 — the shipped page renders the warning alongside a live ✦ Draft it for me · $2.00, and the “answer 2 questions →” ask-sheet loop is not wired (#3321), so a founder is told what is missing with no in-flow way to answer it. The paid-door-on-empty is the defect this frame now corrects; #3321 is the remaining build gap. Note also that included[] has no producer today — no extractor fills it and no field types it — so this warning currently renders on every offering and cannot be cleared; a sentence saying what to add is honest about that in a way a permanent pill never was.
402 topup_required, before compute — nothing charged, nothing partial (spec §5).
Cardless AUTO founder, blocked before any compute (spec §5, index.ts:369-377).
200 ai_capacity, not charged — friendly copy, not error colour (spec §5).
500 generation_failed — no persisted draft; the run fee is never taken for a deliverable that didn't arrive (it fires only after a successful parse — spec §3.3; AI usage for the failed call still settles structurally).
Stale-listing flag — a FREE deterministic check (no AI) when the offering's confirmed price/dates change after the listing was written; a stale listing is never silently served as current (spec §3.4, AC-LISTING-20). Amber = pending action, same vocabulary as every pending state. NOT BUILT as of 2026-08-10 — #3028 shipped without it on Peyton's ship-first ruling; ServiceListing carries no snapshot of the facts a listing was written against, so the drift is undetectable until #3320 lands. Until then a listing can quote a price the founder has already changed, and assistants can retrieve it.
Voice-stale flag — surfaced once the founder teaches her voice, free deterministic check; never silently generic (spec §3.4, AC-LISTING-24). Refine is a paid run, flagged before any charge. NOT BUILT as of 2026-08-10 — same missing-snapshot gap as the stale-listing flag above; deferred to #3320.
"$1,890" → "$1890" reads as a change when nothing changed — and why the stale flag above cannot yet be trusted (spec §3.4a).Shape first, then the values — none of them a blank box. Currency is an ISO code, never a symbol — $ alone means USD, AUD, CAD, SGD or NZD, and a symbol meaning five things can't be compared or safely quoted to a customer in another market (Peyton, BINDING 2026-08-10). ONE currency per offering. “From” is a rendering, not a field (Peyton, 2026-08-10): a founder writes “from $1,890” because there ARE several prices — storing that summary and dropping the tiers loses the real answer, so tiers are stored and display is composed ONCE at save. The tiers underneath are what let an assistant answer “how much is the private room?”. Every control arrives PRE-FILLED from the read — she corrects, she never keys it in.
Dates are a LIST, because offerings recur (Peyton, 2026-08-10) — 28b's own Bali row reads Apr 12–19 & Oct 4–11, two occurrences, which a single start→end row cannot hold. Each occurrence is one date or a range. Duration is a different question and already a different field (Service.duration): “7 nights, 8 days” is how LONG it lasts, not WHEN it runs — one duration, two occurrences — so it never sits inside the date control. The escape is not optional — the field's own documented values include "next cohort opens in Jan" and "every Tuesday"; taking it stores the verbatim string alone and leaves the structured pair empty, because a picker that couldn't hold those would force founders to flatten real offerings.
Only display is ever rendered or quoted — no surface composes a price from amount + currency, because that composed value is the derived fact D1 forbids reaching a customer. The structured pair is internal comparison material, and it is the ONLY thing the stale check diffs (spec §3.4a rung 1). A site-read row keeps the page's exact string in display, symbol and all — we quote what she published and never rewrite it.
“£2,400 per person” into 2400/GBP is derivation, which D1 forbids as an ASSERTED fact. So the structured pair is a reading the founder confirms, landing on the same apply_pending_sync spine as everything else the read proposes, shown beside the string it was read from. D1's own safety argument is the confirm-spine; this sits inside it.type (product / service / program / other) is already a selector, not free text. A structured control here is not a new pattern.price and dates belong to the Offerings model (#2341), not the listing layer — chat quotes price, Booking and Waitlist read dates. Additive-with-fallback: the string shape is unchanged, structure is added beside it, and nothing needs backfilling..persona-chip CSS): ● filled = selected · ○ hollow = not · ★ Main = primary. "Set as main" MOVES the star rather than adding a second one — exactly-one-primary is a DB invariant (persona_classification EF), so the UI makes it a move, never a multi-toggle. HowYouRunCard.tsx, re-homed here into PlaybookHowYouRunSheet.tsx.persona_classification EF (keeps vertical_slug synced, single-persona runtime stays byte-identical); ADD a non-primary / REMOVE writes directly to the brain_profile_personas junction (useBrainPersonaSelection, RLS-scoped).useBrainPersonaSelection has exactly ONE consumer in the repo (this picker). There is no lens row on the playbook (AC-BRAIN-11), no "grew a chapter" recognition copy (AC-BRAIN-12), and readiness does NOT scope per persona (AC-BRAIN-13) — verified against origin/main, and tracked in #2947 as "the multi-persona lens family is wholly unbuilt." Those three ACs are named here as the DESTINATION this control feeds, never as satisfied. Draw and build the picker; do not read this frame as licence to claim the lens.get_business_context_for_assistant(), so it is already read on every assistant reply. That is why the picker must not be downgraded to single-select to match older drawings in this file.Archetype: sheet-slide-panel.md. Split chrome: f13b's family rule (AC-BRAIN-74). RecommendedKitLink (T1177) rehomed under this picker.
brand_voice_v2 / brand_style_card), two provenance regimes, two confirm mechanics, two consumers, ~4:1 length asymmetry. One row because “does this sound and look like me?” is one question.channel_registers when a Generate produced them, else the authored preset × place matrix (voiceRegisterFallbacks.ts) — never five blank forms. The website is its own register: her site is her talking, a listing is her selling.red_pen exemplar. Capture rides the confirm; there is no extra founder step.HowYouSoundSheet.tsx hosts it all. Pre-voice, the sheet leads with the “Pick it by ear · 2 min” door (→ f23’s game, shipped as VoiceCalibrationSheet.tsx) and the free “Hear how you sound” articulate-back card (22c); live-voice, the shipped block order is BrandVoiceLive (tweak · add a real reply · regenerate) → VoiceRegistersPanel (one-line · how-you-write · tuned-per-place · phrases) → VoiceExemplarList → VoiceMatchScore; the LAST row is always “Anything else about how you come across” (personality_notes, rehomed lane 4c). Split hosting rides f13b’s family rule (AC-BRAIN-74, B13b lane).Archetype: sheet-slide-panel.md. Row grammar: frame 13’s EDIT mode, unchanged.
brand_voice_v2 / faqs until she saves it.btn-primary / btn-outline — not muted text or underlined links. Sit under the preview, never under the add-more block. No “free”, “keep”, or “tap” on the founder-facing copy. Save has one job: write to the playbook..pb-row.need + lantern kicker. Confirmed siblings stay Seal / Node you.Tuned for chat, social, your site, listings, and email.
How you lookHost pattern: frame 14, verbatim. Shipped 2026-07-30 catch-up (#2977): VoiceCalibrationSheet.tsx — zero AI holds (authored scenarios, deterministic nearest-preset assembly, picks banked as calibration_pick/founder_text exemplars). Entry door shipped: frame 22’s pre-voice “Pick it by ear” card (a sibling sheet inside HowYouSoundSheet, never inside the generate engine).
HowYouLookSheet.tsx, and it already rides BrainSplitHost — the first playbook sheet shipped on f13b’s split family rule.useBrandStyleCard → brain-scrape style_harvest) → her own moodboard → web guess (BrandSignalBlock, reused verbatim — use/discard only, never corrected in place). Never a red/green tint (T1203).useBrandLookReflect): metered read → free “Yes, that’s the vibe” APPENDS to visual_tone (never overwrites) → typed “fix” steer; 48-hour retention line verbatim in-surface.Archetype: sheet-slide-panel.md. Web-mined signal originates in frame 12’s outward-presence read.
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
Live spine unchanged. After the live chapters and before This read, the deck now ships five Coming soon seats — COO · Advisor · Outlook · Vision · The buyer — as a preview of the signed chapter shape (v4.61 / AC-BRAIN-95). Signed frames: 18·v2-f. Not minted fields. Backend still parked.
Playbook stays a book. Our read is a deck.
Business playbook
Example playbooks · 5 → hairline (no standing colored shelf). Jump-nav is the v4.63 Jump · Your business trigger per f10-m; the rail collapses to ONE “What’s missing” row above the document (BR1). Rows use the collapsed .pbk grammar.Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Edit a chapter
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Edit a chapter
.pb-row.pbk: Edge · mark · title + gist · detail →). The rail’s “Where you stand” collapses to the single 44px “What’s missing · N →” row above zone 1 (BR1 / playbook-grid__missing-mobile); tapping it jumps to the first open section. Populated pages carry the Example playbooks · 5 → hairline, never a standing colored shelf (AC-PLAYBOOK-16). The ✦ research CTA lives behind that jump on mobile, never stacked on the page head. “Our read” drops its date chip at 375 — the report shows it.mark · n of 5 · words · →. 9a-m = step 4 on Brain, line at a day-one sliver. 9a-away-m = the Assistants away line, lit at 88% to match the words. 9c-m = step 5, full-lit (no % in the words — honest at threshold-A). 9b-m = band gone after Teach opens once; the page below returns to pure black, so the lit line is also the header/page boundary while the band lives.Up to date · last change Aug 12
What your assistants say for you
What you do, and who it's for
Uglywoo Retreats runs multi-day yoga and creative retreats for small groups. Slow weeks, not a party.
3 offerings
Warm, direct, a little playful.
Customers like yours usually ask these — tap to add, then answer in your words.
Every offering's full facts — and a ready-to-post listing underneath, assembled free from those facts.
Nothing gathered on this one yet — no description, and no list of what's included.
✦ Draft it for me — the one 44px tap that spends money, and the only ✦ on the screen, carrying its wallet line.+ Add files, links, or paste anything row is the SAME composer as 28b-m′, collapsed because there is a write-up to read here. It sits below the free write-up and above the paid ask — gather before rewrite, free before paid, in reading order. Tapping it expands the box in place (28b-m′'s density) and brings the .wallet-floor line with it.No description yet, and no list of what's included.
tap any line to fill it in — or share what you've already written, below
One write-up you can use anywhere you sell this.
No ✦ on this screen and no ask, so no .wallet-line — but not “free”: saving is read and metered, so the screen-level floor rides with the composer, same as f15. The ✦ door appears only once the facts can carry a write-up (28c ④).
paste text · upload a file · link a doc · your sheet · an image) under an “Already written somewhere?” eyebrow, and the desktop/production twin of this state went further and offered ✦ Draft it for me · Draws from your wallet — $2.00 on an offering with nothing gathered — paying the AI to invent a listing from nothing (D1 with a price tag). Both are gone. ONE composer, no ✦, no ask.ShareInline stopped being three tabs. Type · paste · drop · link belong in the same box.ai_usage brain_embed, ×2.0). The screen carries the f15 .wallet-floor line — a screen-level floor, distinct from the per-control .wallet-line, which stays paired 1:1 with a ✦. The check count(✦) == count(.wallet-line) holds at 0 == 0.Tap fix to edit any word before you keep it.
Pick every operation that's you — assistants only ask what applies to the ones you've turned on.
HowYouSoundSheet.tsx:174Your voice is what every assistant borrows when it replies. Set the tone, the words you use, and the lines that sound like you — confirm it once and it carries everywhere.
Add a tone, a few words, or a reply you’d write first.
Tuned for chat, social, your site, listings, and email.
How you lookSay it your way
Even better — your own words beat our guesses.
“omg yes — Saturday’s open, want me to grab you a spot?”
Saved as your examples: 3 lines you picked · 1 you wrote
Not quite? Tune again · ✦ draft from my writing
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
We draft your voice first — you keep it — then fill the rest to match. Each run draws from your wallet; you review every draft before it's saved.
FaqCoverageDots (the ●/◐/○ legend + “N/M offerings tagged”) and the per-row AskEntryWord (“N to answer →”). Peyton’s Option C ruling (2026-08-17, PR #3594/#3625) does NOT restore either to the index row — f9 stays exactly as #3459 shipped it. Both remount one level deeper instead: inside the EXISTING “Customer questions & policies” depth sheet (PlaybookDepthSheet/PlaybookDepthBody, kind="faqs", EDIT mode only), above the persona switch and candidate picker — coverage renders first, the ask-word second.openAskSheet the rail already opens, scoped to the FAQs section — a doorway INTO the one ask-flow home, one tap closer to where a founder is already looking, not a parallel ceremony.┌ FAQs & policies — depth sheet (kind="faqs", EDIT mode only) ─────────┐ │ ● ● ◐ ○ ○ · 3/5 offerings tagged (FaqCoverageDots + legend) │ │ covered · partial · gap │ │ 1 to answer → (AskEntryWord → openAskSheet)│ │ ────────────────────────────────────────────────────────────────── │ │ FAQ for: [ Retreat host ▾ ] (FaqPersonaSwitch, 2+ personas)│ │ “Retreat hosts usually get asked…” [chip] [chip] [chip] │ │ (FaqCandidatePicker) │ │ ────────────────────────────────────────────────────────────────── │ │ Do you take deposits? — Yes, 30%… (FaqRow list) │ │ + Add FAQ │ └───────────────────────────────────────────────────────────────────────┘
┌ Customer questions & policies — ONE categorized sheet, never tabs ────┐ │ │ │ GROUPS are the spine — SECTION ORDER IS THE STANDARD/PERSONA SPLIT; │ │ each group head carries its own coverage — no separate view │ │ │ │ STANDARD — five fixed groups, every founder, zero corpus needed │ │ ● Booking & how to book · 2 covered │ │ ✓ confirmed row — question + answer, nothing else │ │ ● Paying — deposits, plans & methods · 3 covered │ │ draft row — ONE quiet label (“from your site” / “standard”) │ │ + the ✓ Use affordance │ │ ◐ Cancellation & refunds · 2 need you │ │ ○ open row — “answer →” opens the editor (32b) │ │ PERSONA — “For retreat hosts — from what peers publish” │ │ (renders only when the persona corpus is seeded) │ │ ○ Getting there & transfers · nothing yet │ │ one-line peer-set offer — “peers answer these 2 — add as │ │ drafts” │ │ 2+ personas (32a-multi) — the section collapses to a row per │ │ selected persona: ★ Retreat hosts · 3 of 9 answered · Edit → │ │ Workshop hosts · 0 of 6 answered · Add → │ │ tap → THAT persona’s groups in a sheet (Operations & Payment lock) │ │ YOUR OTHER ANSWERS — the uncategorized bucket (AC-FAQGEN-17) │ │ │ │ footer — ✦ Draft the 3 open ones — $3 · + Add a question │ │ │ │ 32b editor — type → the in-your-voice rewrite appears inline │ │ (opt-in ONCE, ~$0.05/answer) → ✓ Save · quiet “keep as typed” │ │ · Save auto-advances to the next open row in the group │ │ 32c empty SECTION — 32a’s spine at zero: the STANDARD heads still │ │ render (“nothing yet”); the set card fills the persona slot │ └───────────────────────────────────────────────────────────────────────┘
✎ yours to answer tag, no accept row, cost nothing (14f’s grammar, AC-FAQGEN-07 ↗, #3071).persona_faq_corpus): the empty group’s inline one-liner here, and 32c’s full set card. Drawn WITHOUT a ✦ — ✦ stays the paid mark only (judgment call: the reviewed offer copy carried one; the lock wins). Standard drafts inherit 14e’s fact-blank contract (AC-FAQGEN-13 ↗) — founder-only facts stay dashed blanks, never invented.computeFaqCoverage / useFaqCoverage().pairs — fetched today and thrown away). FaqCoverageList.tsx stays dead code: its VALUE survives as these heads; its VIEW does not.originChip.ts carries only from-site / you-told-us) · durable server-side capture as an explicit criterion · the 32b auto-rewrite mechanic + its per-answer metering.Archetype: sheet-slide-panel.md. Host contract: src/components/brain/BrainSplitHost.tsx.
FAQ_GROUPS labels verbatim (booking · paying · cancellation-refunds · whats-included · house-rules, from _shared/faq-corpus.ts). Below them, the PERSONA section (“For retreat hosts — from what peers publish”) carries the corpus-driven groups (Getting there & transfers · Visas & travel insurance · Packing & weather · Food & dietary · …) and renders ONLY when the founder’s persona has a seeded corpus — an unseeded persona sees just the standard five. “Your other answers” closes the sheet: the uncategorized bucket, AC-FAQGEN-17’s home, finally rendered.persona.label (usePersonas() / persona_roster), so a 5th persona needs zero frontend code. This inline form is the SINGLE-persona state — today’s default and most founders. With 2+ selected personas the whole section collapses to rows: see 32a-multi below (Peyton design pick 2026-08-07).ModalWrapper presentation="sheet" — the sheet-slide-panel archetype, same slide choreography as that sheet, no new motion or chrome. Tabs and a dropdown-switch were considered and REJECTED, same reasoning as that lock: distinct personas are different outcomes, not sibling inputs to one outcome — a tab/switch hides a sibling persona’s open gaps. Applied to FAQ per Peyton design pick 2026-08-07 (chosen over the dropdown-switch option).useBrainPersonaSelection().primarySlug — the founder’s REAL selection), primary sorts first — the same ★-primary convention as f29’s picker (★ Main, exactly-one-primary DB invariant). Labels and one-liners read from usePersonas() / persona_roster — DB-driven, so a 5th persona needs zero frontend code. Each row carries its coverage count (“3 of 9 answered”, computeFaqCoverage per persona) and ONE action word: Edit → when the persona has answers, Add → at zero.useFaqCoverage(personaSlug) and its EF (brain-profile?resource=faq_corpus) take ONE scalar persona slug — called today with profile.persona_slug (primary only), so a secondary persona’s peer FAQs aren’t fetchable at all. The hook/EF must accept/loop per selected persona. This frame draws the target UI; that multi-persona-aware backend is separate work, not yet built.doesn’t apply
Asked once, ever — “no thanks” means plain saves from here on, and the toggle waits quietly in the sheet header. Typing is always free. Price said here, never per row.
appears as you finish typing — your facts, your voice, nothing added · tap to edit any word
doesn’t apply
Save lands the rewritten answer and auto-advances to the next open row in this group. Metered per answer, silent. Wallet-empty reuses the shipped AC-BRAIN-62 block (#3087) — the typed answer is never lost.
14f’s grammar in batch form (AC-FAQGEN-07 ↗, #3071): a declined row keeps NO accept affordance and costs nothing — the $3 covers only what was actually drafted. Monochrome by D3 — declining to guess is not an error.
persona_faq_corpus.Everything customers ask, grouped the way they ask it.
✦ rewrite onEverything customers ask, grouped the way they ask it.
✦ rewrite onA guest asks: “What should I pack?”
appears as you finish typing · tap to edit any word
keep as typed · doesn’t apply
Save auto-advances to the next open question in this group. Typing is always free.
No questions yet — start from what businesses like yours get asked.
All in by default — tap a row to leave it out. Nothing counts as answered until you ✓ Use it.
Prefer them answered for you? ✦ Draft what your playbook supports →
+ Add a questionpersona.label, never a hardcoded string.fg-40 → stale fg-55 → contradiction fg-70), no colour spent.BusinessReadHero hosts inside f15 (2026-07-15 lock). "Check my brain" stays retired (D3).Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
BrainPage.tsx) initializes the consent to false — this component never starts a recurring PAYG charge on its own; flipping ON is the only path in./brain page, below the playbook — member-only, never rendered for guests or inside the activation slide-over (bare mode).Implementation: PeriodicCheckToggle.tsx, mounted BrainPage.tsx.
Lock D3 (kit design-decisions.md, Brain R5 item 3) retired the paid "Check my brain" CTA and named "Research again" the only consented paid re-run — "never auto-run." This toggle is an explicit opt-in for something that then fires automatically the moment a linked doc drifts, with no per-run tap. Whether an opt-in-recurring consent satisfies D3's "never auto-run," or whether D3 needs an amendment carving out this one pre-consented path, is Peyton's call — drawn here as shipped, not resolved here. Billing-consent control; treat the ruling with that seriousness. Shown here at its default: OFF.
Up to date · Aug 12
Tap the cover to read
12 Aug · our words
How you show up on the web
Business playbook
Edit a chapter
Re-checks your content when your docs change, so assistants stay accurate. Runs only on real changes — pay only when it runs.
With checks off, if your docs drift or get messy we can't guarantee your assistants stay accurate.
Re-checks your content when your docs change. Runs only on real changes — pay only when it runs.
Every card here already sits in its step. This strip is so you can compare empty / blocked / fail without walking the whole journey. Jump back to see it on the page.
Signed frames for the Coming soon chapters that now ship on the live deck (v4.61). Copy recast 2026-08-19 by CPO + mf-writer. Each chapter is one seat: the pill names it, the lede is a finding. One fact, one home. Chrome ships; the world does not — no corpus export, no ADR-036 v2, no benchmark / next_moves, no $3.50 step.
Two more deferred frames: f25 (corrective re-read, drawn in place in the P2 flow, ledgered Future) and f27 below. The “Specified, not built yet” generation sections are honest empty states within the active playbook (they show which sections have generation and which don’t), so they stay under Active. Flag for Peyton if those un-built generators should live here instead.
Parked f15 follow-ons not built — never drawn as Active (#2693): the proactive post-read “Add your Instagram” ask card (parked until the sheet ships, then its own experiment) · platform auto-detection of a shared screenshot’s source · classify-schema widening for prose offerings (follow-up after the corpus-merge build).
not built Part II follow-on, filed as GitHub issue #2842 — not part of this rollout. f18 ships “↻ Read again” as a plain, no-context trigger (see f18 design notes); this frame is the next lane that puts a corrective-context sheet in front of that trigger, drawn here so the direction is locked before it’s built.
⚠ drawn as width-agnostic anatomy (no device chrome) — no separate 375 tier.
Tell us what to focus on and we’ll read your site again with that in mind.
What was wrong in the last read?
Anything else that’ll help this pass?
RefineForm in OutwardReputation.tsx) and f14’s ask-sheet field grammar, rather than inventing a new composer.⚠ drawn as width-agnostic anatomy (no device chrome) — no separate 375 tier.
not built Peyton’s fuller identity-gate idea, deferred 2026-07-30 in favour of the two-field Gate MVP (f1f) — direction locked here so a future lane doesn’t reinvent it. Its own lane, its own Peyton sign-off before any build.
Share anything that shows who you are — a screenshot, a link, a line in your words.
Look again re-reads what you shared — capped at 2 tries, then we ask you to type the basics instead.