Design preview · On-Brand Support (TMPL-9P3X) — the founder + guest journey, phase-ordered · updated 2026-08-06 (8-section shape)

← Design HQ · HTML on GitHub · PRD — prd-as-on-brand-support.md

On-Brand Support — from Explore to a guest getting answered

On-Brand Support — Discover through Live, then the guest WhatsApp thread.

SizePortrait scrolls 375 · sideways is a slide deckNotes
Design brief — overview · scope · journey (closed)

The full-flow design contract for On-Brand Support, in the locked 8-section shape (design-canon.md § “Assistant-flow mockup structure”, 2026-08-06): Design overview · Scope · Content structure · User journey · Desktop screens · Mobile screens · Components · Future design. Companion to the master build contract: assistant-flows/assistant-lifecycle.html.

19 frames · card → live → monitored · mobile + desktop Brain Check — Connect-only, category-grouped · confirmation copy contract tab order Overview → Personalize → Connect → Try (T1155) pre: Overview → Personalize → Connect → Try · post: Pulse → Overview → Personalize → Connect (R30) amber = action/pending only · emerald = live only

Widths here sample a fluid continuum — content scales continuously; structure steps only at sm 640 · md 768 · lg 1024. Kit: design-canon.md U8.

Every $ figure drawn in these frames ($0.50 per session, wallet balances, MTD totals) is illustrative — prices arrive from props/the DB at runtime, never authored literals (single-source pricing).

Reading order: § Desktop screens first — every desktop frame, full flow, in journey order — then § Mobile screens below it — every mobile/sheet frame, same journey order, laid out side by side as a wrapping grid, grouped per phase (never a tall single-file column of screens). Two sections, never interleaved — a review-document convention only; 375 is still designed and scored FIRST in real work (U8 above still holds).

On-Brand Support answers guest DMs on the founder's WhatsApp, in the founder's confirmed voice, 24/7 — without the founder typing a word. It reads the Brain (prices, policies, hours, FAQs, brand voice), answers routine questions in seconds, and hands anything it can't ground — refunds, complaints, the uncertain — to the founder on Slack, pausing itself for that conversation until the founder is done. Six phases, one direction: a founder discovers it in Explore, evaluates what it does, activates it (Personalize → Connect → Try), a guest's WhatsApp message gets answered or escalated, the founder monitors it in Pulse, and later reactivates it. This file is the per-assistant exemplar of the master contract (assistant-flows/assistant-lifecycle.html) and draws the shipped chat golden path.

In — shipped, drawn 1:1
  • The shipped chat golden path only — real prod copy (post-#2593 never-say fix), T1209 seeded handling defaults, the 7-field Brain gate (§T1097).
  • D-1 Brain Check ownership (R4 review 2026-07-23) — Connect is the only edit surface: the full category-grouped checklist (brain_manifest, D1 confirmation copy contract) lives there alone. Personalize carries a one-line pointer only; Try reads back a single readiness line. Neither owns a second checklist.
  • Three activation outcomes only — loader (6a), live (6), failed/full-rollback (6b). 9P3X is a chat assistant with no WhatsApp template requirement, so the master's pending_template_approval / template_rejected outcomes never apply and are deliberately not drawn.
  • Escalation pipeline end-to-end: route-to-you topics → Slack thread → human mode (AI paused) → #done resume — frames 7/8/9.
Out — explicitly, with the reason
  • No records surface — the named counter-example of the records test (“rows a founder needs to see outside the conversation that created them”); a support thread isn't one. Hence no Storage row on Connect.
  • No pre-activation chat sandbox — R11 honest-test rule; replies only trigger on real inbound messages. A real sandbox is a deferred post-launch decision.
  • No AI-provider picker — BYOK gated by BYOK_AI_HIDDEN (AUTO-only launch); the AI Model row is label + “MystFlo AI” badge, Connected, no caret.
  • In-plan, not built today (drawn as target state, labeled at the frame): rules-take-effect-next-run — plan-onbrand-3fix-2026-07. (#done instant resume left this list — shipped in #2616, 2026-07-22; the 5-min sweep stays as the safety net.)
  • Escalation-rate stat on the Pulse card — tracked nice-to-have (gap #4), not drawn.
TMPL-9P3X (prod row — single source)
├─ catalog copy      description · details.tldr · long_description · details.benefits[4]
│                    (drawn verbatim on frames 1 / 2 / 2b / 9c — R28: pre = post, byte-identical)
├─ price_per_run     $0.50 per session — plain text, never a pill (R27), DB-sourced
├─ handling rules    3 groups, T1209-seeded: Answer on its own · Route to you · Politely decline
│                    (route-to-you feeds the deterministic escalation detector — AC-TS-20)
├─ Brain Check       7 required fields, grouped by playbook chapter (PR #3725 / AC-BRAINGATE-09):
│                    Your business · Where to find you · What you sell · Questions and policies · Branding · How you run
│                    per-row ✓ / ○ / ⚠ · rollup “N of M ready” · confirmation copy contract (D1)
└─ session states    AI-answered → escalated (AI paused, Slack thread) → human mode → resumed (#done)
                     one billable unit per closed session (AC-BILL-01/02/03)
Handling rules — the three groups
  • Answer on its own — topics it handles start to finish from the Brain (hours · prices · availability · product details).
  • Route to you — it acknowledges the guest, then pings Slack (refunds · complaints · custom requests). Deterministic, not just a prompt suggestion.
  • Politely decline — out of bounds; it says so kindly and offers the founder's contact (medical advice · legal advice).
  • Plus one greeting field — the first thing guests see, live-previewed as the founder types (frames 3/3b).
Copy rules the content obeys
  • Never-say ledger: “sounds like you — because you confirmed it does”, never “guests won't know it isn't you” (#2593).
  • First-ever AI reply carries the disclosure line — code-side and unconditional (frame 7).
  • “Confirmed” language is reserved for a fully-ready Brain rollup; a partial one reads “N of M sections ready” with an amber dot (D1, frame 6 right panel).

Five founder phases (Discover → Evaluate → Activate → Monitor → Maintain) with the customer's own loop (Trigger → Interact → Outcome) embedded at the point it actually happens — right after Activate, before the founder ever opens Pulse. Interact forks: the AI answers directly from the Brain in the common case, or escalates to the founder via Slack when it can't confidently answer (chat-assistant-standard's 3-tier escalation model). Every frame below sits in one of these six phases.

┌ FOUNDER · DISCOVER ────────────────────────────────────────────────────┐
│ Finds On-Brand Support in Explore — sees price, required apps,         │
│ and what it promises, before tapping in.                               │
└────────────────────────────────────────────────────────────────────────┘
                                     ▼
┌ FOUNDER · EVALUATE ────────────────────────────────────────────────────┐
│ Opens the detail sheet — what it does, how it works, key               │
│ benefits — decides it's worth setting up.                              │
└────────────────────────────────────────────────────────────────────────┘
                                     ▼
┌ FOUNDER · ACTIVATE ────────────────────────────────────────────────────┐
│ Personalize (handling rules + live preview) → Connect (WhatsApp,       │
│ AI, Slack, Brain Check) → Try (honest, no fake test) →                 │
│ Activating (loader) → live, or the whole thing rolled back.            │
└────────────────────────────────────────────────────────────────────────┘
                                     ▼
┌ CUSTOMER · TRIGGER → INTERACT ─────────────────────────────────────────┐
│ A guest messages the WhatsApp number, any hour — 11pm included.        │
└────────────────────────────────────┬───────────────────────────────────┘
                                     ▼
             ┌───────────────────────┴─────────────────────┐
             ▼                                             ▼
             AI-ANSWERED (common)                          ESCALATED
             Grounded in the Brain,                        Refund / complaint /
             replies in the founder's                      can't-ground → Slack
             confirmed voice.                               thread, AI paused.
             │                                             │
             └───────────────────────┬─────────────────────┘
                                     ▼
┌ CUSTOMER · OUTCOME ────────────────────────────────────────────────────┐
│ Guest helped, in the founder's voice — by AI alone or AI + founder.    │
└────────────────────────────────────────────────────────────────────────┘
                                     ▼
┌ FOUNDER · MONITOR ─────────────────────────────────────────────────────┐
│ Pulse card + activity feed — sessions, cost, health at a glance,       │
│ and anything escalated that still needs a reply.                       │
└────────────────────────────────────────────────────────────────────────┘
                                     ▼
┌ FOUNDER · MAINTAIN ────────────────────────────────────────────────────┐
│ Paused later → reactivate (same setup, same WhatsApp number) or        │
│ start fresh — nothing already running is ever lost.                    │
└────────────────────────────────────────────────────────────────────────┘
Sequencing principle BINDING
  • Discover and Evaluate never gate on the Brain — the 7-field readiness check only blocks at Activate (Connect → Try), and only on the 7 required fields, never on full completion (prd-as-on-brand-support.md §T1097 — 7-field gate, AC-GATE-01/AC-GATE-02).
Where each phase lives below
  • P1 · Discover — “Is this the assistant I need?” → 1
  • P2 · Evaluate — “What does it actually do, and is it worth it?” → 2 · 2b
  • P3 · Activate — “Set it up, connect it, turn it on.” → 3 · 3b · 4 · 5 · 5n · 5b · 5c · 6a · 6 · 6b
  • P4 · The guest's thread — “Will it actually help them, at 11pm, without me?” → 7
  • P5 · Monitor — “Is it working, and does anything need me?” → 8 · 9 · 9b · 9c · 9d · 9e
  • P6 · Maintain — “Turn it back on later, without losing anything.” → 10

The frames below are the current build contract — the dev team matches them pixel for pixel; only current / being-built state lives here. Deferred ideas live under Part II · Future at the bottom — never a build target (kit canon U9). Acceptance ids cited in frame notes (AC-* ↗) live in docs/product/assistants/shared/prd-as-on-brand-support.md §Test Plan — this artifact cites ACs, never mints them, except where noted NEW (PRD debt) for behavior this reorg found with no existing criterion, or a freshly-added row (dated) where the gap was simple enough to file in the same pass.

Part I — Active build now, in lifecycle order
Discover
This step is 375. No 1180 drawing — use the Mobile size.
768 undrawn by rule — Peyton 2026-08-29: “skip the tablet first - use auto layout rule.” Fluid Auto-Layout (canon U8 / design-foundations § Core 7) carries the continuum between the two drawn tiers; 375 + desktop 1180 are samples of it, not the only states.
Phase 1 · Discover “Is this the assistant I need?” · the founder's first glance in Explore
1Explore — the card Nina sees
On-Brand Support
⤴♡
Your business answers DMs in your voice, 24/7 — without you typing a word.
$0.50 per session WhatsApp Business MystFlo AI Slack
Personalize Connect Try
tap for detailsActivate
Frame 1 · Explore card — the founder's first glance [P1 · Discover]
  • Story — As a founder browsing Explore, I see On-Brand Support's price, required apps, and setup progress in one glance — enough to decide whether to open it, without reading a paragraph.
Acceptance
  • Acceptance — no dedicated criterion in this assistant's PRD; the card's content contract belongs to the platform's Explore/catalog surface, not prd-as-on-brand-support.md.
  • NEW (PRD debt) — fixed-zone card skeleton (title/desc clamp, chip sort order, price-as-text) has no assistant-level AC; it's implicit platform (Explore) behavior applied here.
Design notes
  • Content + card contract — description verbatim from the prod row; required apps WhatsApp Business + MystFlo AI + Slack (escalation channel); fixed-zone card skeleton.
  • “Details →” link deleted — card tap + “tap for details” pill carry the doorway. Category tag and task-count chip gone — meta row is price + apps only.
  • Share icon (⤴) beside the heart opens the shipped ShareSheetModal.
  • R27 · R24 — Price + chips — price is plain text, never a pill — full wording “$0.50 per session”, one slot (first item of the meta line).
  • Chips sort required-not-connected → required-connected → storage → optional, max 3 + +N doorway into Connect (frame 4). Readiness signal only, never a cost signal.
Evaluate
dimmed Explore peeks — revealGap · app header stays visible above (C1)
On-Brand Support
Answers guest questions in WhatsApp from your Brain — and hands you the rest.
$0.50 per session
✕
Overview› Personalize › Connect › Try
What it does

On-Brand Support reads your Brain — your prices, policies, hours, FAQs, and brand voice — and answers guest questions in WhatsApp in the voice you confirmed. Routine questions get answered in seconds. Anything it can't ground in your knowledge gets handed to you on Slack.

How it works
01
Customer
“do you have space in September?”Any hour — 11pm included.
02
Brain ✦
Grounds the answer in your facts ✦ AI
03
Assistant
Replies in your voice, in the same thread
tricky ones → routed to you
◎
Outcome
Guest helped, in your voiceYou never typed a word.
Key benefits
Answers while you teach, host, sleep
Guests get instant replies at the exact moment they're deciding.
Sounds like you — because you confirmed it does
Your brand voice, your policies, your tone — all confirmed by you, so replies match how you'd actually answer.
Knows when to hand it to you
Refunds and complaints never get an improvised answer — they get escalated.
Never makes up a price or date
If it isn't in your Brain, it says so and brings you in.
Frame 2b · Desktop 1180 — “How it works” chart [P2 · Evaluate]
  • Story — As a founder on a laptop, I see the same explanation as mobile but drawn as a wider flow chart, so the desktop tier never feels like an afterthought.
Acceptance
  • Acceptance — shares AC-UI-01 ↗ with frame 2 (same modal, same standard, wider viewport) — not re-cited as a separate criterion.
Design notes 2026-07-23
  • 375 tier (frame 2) keeps the vertical numbered rail — unchanged, R5-correct for mobile. Desktop ≥768 had no realization at all; this frame adds it, ported verbatim from the shipped HowItWorksFlow.tsx chart (assistant-lifecycle.html sec-3 desktop, PR #1184) rather than a bespoke rail.
  • Customer → Brain (AI-skeleton node) → Assistant → Outcome, one lit hairline, actor eyebrows, one fragment per node. “Tricky ones → routed to you” is a branch pill hanging off the Assistant node (.fs-drop + .fs-branch) — never its own 5th node/column.
  • Copy matches the master's own worked example for this exact assistant verbatim (same business, same guest line) — no new copy invented.
768 undrawn by rule — Peyton 2026-08-29: “skip the tablet first - use auto layout rule.” Fluid Auto-Layout (canon U8 / design-foundations § Core 7) carries the continuum between the two drawn tiers; 375 + desktop 1180 are samples of it, not the only states.
Phase 2 · Evaluate “What does it actually do, and is it worth it?” · f2 overview mobile · f2b overview desktop
2Detail sheet — Overview tab
On-Brand Support
Answers guest questions in WhatsApp from your Brain — and hands you the rest.
✕
$0.50 per session
Overview Personalize Connect Try
What it does

On-Brand Support reads your Brain — your prices, policies, hours, FAQs, and brand voice — and answers guest questions in WhatsApp in the voice you confirmed. Routine questions get answered in seconds. Anything it can't ground in your knowledge gets handed to you on Slack.

How it works
01
A guest messages your WhatsApp
Any hour — 11pm included.
02
It answers from your Brain
Your real prices, policies, and availability — never invented.
03
Tricky ones come to you
Refunds, complaints, anything uncertain → a Slack ping with the thread.
◎
Guest helped, in your voice
You read the thread over coffee, not at midnight.
Key benefits
Answers while you teach, host, sleep
Guests get instant replies at the exact moment they're deciding.
Sounds like you — because you confirmed it does
Your brand voice, your policies, your tone — all confirmed by you, so replies match how you'd actually answer.
Knows when to hand it to you
Refunds and complaints never get an improvised answer — they get escalated.
Never makes up a price or date
If it isn't in your Brain, it says so and brings you in.
Frame 2 · Overview tab — what it does, how it works [P2 · Evaluate]
  • Story — As a founder deciding whether to set this up, I read what it does, how it works, and its key benefits — in plain language — before committing to Personalize/Connect/Try.
Acceptance
  • Acceptance — 1 criterion, in prd-as-on-brand-support.md §Test Plan.
  • AC-UI-01 ↗ — the Explore detail modal renders to the COHB01 standard (flow chart, requirements, pricing); the Personalize tab shows Brain-sourced facts as “From your Brain ✓” recaps.
Design notes
  • Copy is post-#2593 corrected: “in the voice you confirmed”, never “guests won't know it isn't you” (never-say ledger).
  • Try stays disabled until Personalize + Connect complete; flow ends on the one lit outcome node.
Activate
dimmed Explore page peeks — revealGap · app header stays visible above (C1)
On-Brand Support
Answers guest questions in WhatsApp from your Brain — and hands you the rest.
$0.50 per session
✕
Overview› Personalize› Connect › Try
How you soundWarm Host (default)Edit in Brain →
WhatsApp connectedFollow-ups in English (EN) · Bahasa Indonesia (ID) · Español (ES) — sent to Meta for approval when you activateEdit →
Handling rules
Answer on its own
Topics it handles start to finish, from your Brain.
hours ✕ prices ✕ availability ✕ product details ✕ + add topic
Route to you
It acknowledges the guest, then pings your Slack.
refunds ✕ complaints ✕ custom requests ✕ + add topic
Politely decline
Out of bounds — it says so kindly and offers your contact.
medical advice ✕ legal advice ✕ + add topic
Greeting (guests see this first)Instant · any language
Hey! You've reached Salt & Stone — how can we help?
Follow-up when a guest goes quiet (24h)Meta pre-approved
Hi Maya, it's Lena from Bali Yoga — circling back on your message. I've got an answer for you whenever you're ready. Reply here any time and I'll pick it right up.
06 · Slack
SlackGet pinged when it hands a guest to you.

When it can't answer, it hands the thread to you — you're never out of the loop.

Full Brain readiness — what's confirmed, what still needs you — lives on Connect →.

Hey! You've reached Salt & Stone — how can we help?
do you have space in September?
Its real reply appears after activation — answers come from your Brain, never faked here
·· preview ··
Frame 3b · Desktop 1180 — the live preview split [P3 · Activate]
  • Story — As a founder on desktop, I see the voice my assistant speaks in (one quiet row — details live in Brain) and edit handling rules on the left while a full-height phone preview on the right proves the greeting is really mine, without switching screens.
Acceptance
  • Acceptance — shares AC-TS-20 ↗ with frame 3 (same handling-rules mechanic, wider viewport) — not re-cited. AC-SOUND citations dropped 2026-08-29 with the card (see frame 3 note).
Design notes
  • Form flex-1, preview fixed 400px, row capped 1040px. R32 — preview column + device shell fill the full split height, top-aligned (never vertically centered); scroll is the simulated phone's own.
  • How you sound is ONE quiet readiness row here, not a card (Peyton ruling, 2026-08-29 — reverses PR #4177 surface (a)) — the expanded stack (chips, personality line, 9 trait pills, guardrails, examples) stays in Brain (How You Sound sheet + playbook), never in the assistant detail UI. The row names the active voice — “How you sound · Warm Host (default) · Edit in Brain →” — in the tab's own quiet row grammar — a peer of the Handling rules / Greeting / Slack rows (Peyton ruling, 2026-08-29 PM). The full checklist stays on Connect — D-1 holds. prd-pl-voice-card.md is NOT retired; its surface (a) needs re-homing (see rollout plan).
  • Same D-1 pointer as mobile — the full category-grouped checklist stays Connect's alone (frame 4); this tab shows per-run knobs only.
  • Follow-up languages (#5130, Peyton 2026-09-20) — read-only reference line, never a second ask. One row-peer under How you sound: WhatsApp connected · This assistant's follow-ups · English (EN) · Bahasa Indonesia (ID) approved · Español (ES) approved · Edit →. Scope (Peyton 2026-09-20): the status on this line is THIS assistant's own templates, never a copy of the account list. Each assistant has its own Meta templates per language, reviewed independently — so this line and Connects 6b can legitimately disagree: Connects shows the worst case across every assistant (Español: Pending while another assistant's Spanish template is still in review); On-Brand Support's own Spanish is Approved, so this line says Approved. Drawn deliberately in disagreement with 6b — do not "fix" it as a bug. Purchase and management stay account-wide on Connects; only the STATUS is per-assistant. Backend reconcile (#5166) — two renderings of this one row, by lifecycle. PRE-activation (frames 3 / 3t / 3b, this one): there is no assistants row yet, so the per-assistant read (template-languages?assistant_id=) cannot run and no template of this assistant exists in any language — the row lists the ACCOUNT's languages as facts with no Approved/Pending word (languages[] where included || purchased, from the plain account read) and says they are sent to Meta at activation (activation submits every purchased sibling alongside the English set). POST-activation (9d / 9d-m): the row reads template-languages?assistant_id=<this assistant> and renders each language's own state word — approved → “approved”, pending → “pending”; available (not bought) is omitted. Never the account aggregate. Final copy for both lines: Chief Writer. Edit → slides the WhatsApp connection detail in as the real page (connects.html #f6b ↗) — the ONE home; this tab never shows a picker, a price, or a per-language state beyond the summary. NEW (PRD debt).
  • Message badges (Peyton 2026-09-20): every message-shaped item carries one of two labels next to its title — Instant · any language (the AI sends it live: greeting, payment ask, flow intro) or Meta pre-approved (a template Meta approves per language: booking reminders, paid confirmation, the 24h follow-up). Here: Greeting = Instant; the 24h quiet-guest follow-up = Meta pre-approved, shown read-only (its wording is ours to submit, not the founder's to edit). Backend reconcile (#5166) — the row shows the LOCKED onbrand_followup body verbatim (_shared/onbrand-followup-template.ts: “Hi {{1}}, it's {{2}} from {{3}} — circling back on your message. {{4}} Reply here any time and I'll pick it right up.”), rendered with that file's own example values; the earlier placeholder sentence was never a template. Founder-editable is settled by code, not a PRD row: this name is in LOCKED_TEMPLATE_NAMES, is translated per purchased language from the locked English, and a founder-authored variant is never submitted — so the row is read-only in every state. The language a given send uses is decided at send time (resolveTemplateLanguage), never shown here.
  • ASK door #2 + no-restart (Peyton 2026-09-20): this reference row is one of the two non-blocking ASK doors (the other is the WhatsApp connect-success line, connects 3a ↗). On the POST-activation detail (9d / 9d-m — Personalize locked, #4432 POST_ACTIVATION_READONLY_TEMPLATE_IDS) the row keeps a LIVE Edit → door to Connects plus one guidance line: “Follow-up languages live on your WhatsApp connection. Add one anytime — your assistant keeps running.” Languages are not assistant config — they live on the connection and are read at send time — so adding one needs no pause, no stop, no re-activation, and nothing here may route through Start fresh. NEW (PRD debt).
dimmed Explore peeks — revealGap · seated sheet
On-Brand Support
Answers guest questions in WhatsApp from your Brain — and hands you the rest.
$0.50 per session
✕
Overview› Personalize › Connect› Try
01 · Connect apps
Communication WhatsApp Business ▾
Where your guests already message you
Connected ⌄
AI Model MystFlo AI
Writes the replies in your voice. Choosing your own AI model is coming later.
Connected ⌄
Alerts Slack
Escalations land in #guest-support. Slack off in Personalize hides this picker: “Turn Slack on in Personalize.”
Connected ⌄
02 · Wallet
Wallet balanceEach session draws $0.50 from your prepaid balance $41.20
03 · Brain Check
Your business
✓Business description
Confirmed
Edit in Brain →
Where to find you
✓Hours
Ready
Edit in Brain →
✓Contact
Ready
Edit in Brain →
What you sell
✓Offerings & prices
Confirmed
Edit in Brain →
Questions and policies
✓Questions · 14 items
Confirmed
Edit in Brain →
Branding
✓Brand voice
Confirmed Jul 20
Edit in Brain →
How you run
✓Policies · 5 items
Confirmed
Edit in Brain →
7 of 7 ready — it can answer guests
Try reads this same check back as one line — it never re-asks.
Frame 4b · Desktop 1180 — Connect tab, two-column split [P3 · Activate]
  • Story — As a founder on a laptop, I connect WhatsApp/Slack and confirm my Brain is customer-ready side by side, without scrolling past one to reach the other.
Design notes
  • Gap closed (2026-08-07) — this file had no desktop-width Connect frame at all, only the 560px panel at frame 4. Content here is ported verbatim from frame 4 (same rows, same copy, same caret amendment from this session) — nothing invented, just redrawn at 1180 with the master's two-column shape.
  • Split follows assistant-lifecycle.html sec-5 exactly: apps + wallet flex-1 on the left, Brain Check fixed 400px on the right — On-Brand Support has a real 7-field Brain Check module, so the master's split applies cleanly with no adaptation needed.
  • Continue-to-Try button omitted from this crop (present in frame 4's panel version) — this frame exists to prove the desktop layout, not re-litigate the CTA.

Both tiers now drawn per R22. Archetype: assistant-detail-tabs.md.

dimmed Explore page peeks — revealGap
On-Brand Support
Answers guest questions in WhatsApp from your Brain — and hands you the rest.
$0.50 per session
✕
Overview› Personalize › Connect › Try
What you're activating
Greeting“Hey! You've reached Salt & Stone — how can we help?”
Answers on its ownhours · prices · availability
Routes to yourefunds · anything it can't ground
AppsWhatsApp Business · MystFlo AI
Brain✓ 7 of 7 ready
Wallet$41.20 · $0.50 per session
Trying it
Replies are triggered by real customer messages Message your WhatsApp after activation to see it live. There's no way to fake a guest message before then — so we don't pretend to.
Send yourself the first one Open WhatsApp and message your own business number.
Name this one
Autumn retreat support
Activate — $0.50 per session

Runs on your WhatsApp from the moment you activate. Pause anytime.

Frame 5b · Desktop 1180 — the activation tab, seated sheet [P3 · Activate]
  • Story — shares its story with frame 5 (same tab, wider viewport, rail layout instead of stacked).
Acceptance
  • Acceptance — shares frame 5's PRD-debt note; not re-cited.
Design notes T1147/T1155
  • Seated sheet, dimmed page peeking above, no drag handle; content full-width with 32px gutters; read-back capped at 720px, trying-it rail uses the freed width.
  • Pre keeps the stepper voice (chevron separators, ✓ on completed tabs). One primary action.
Brain · Where to find you · Hours — masthead stripped, opened AT the section
Mon–Fri8:00 – 18:00
Saturday9:00 – 14:00
SundayClosed — retreats only
Save

← the REAL Brain page, live and editable · tap the seam to return

On-Brand Support — setup
✕
Overview› Personalize › Connect› Try
03 · Brain Check — from your Brain
Where to find you
○Hours
Saved on the left just now
checking…
Questions and policies
✓Questions · 14 itemsEdit →
How you run
✓Policies · 5 itemsEdit →

The check re-runs the moment you save on the left — ○ flips to ✓ without leaving Connect.

Frame 5c · Desktop ≥1024 — “Edit in Brain” split, checking live [P3 · Activate]
  • Story — As a founder who's missing a Brain field on Connect, I fix it right there — the real Brain page opens beside my setup, and the check flips from ○ to ✓ live the moment I save, without losing my place in activation.
Acceptance
  • Acceptance — 1 criterion, in prd-as-on-brand-support.md §Test Plan.
  • AC-UI-02 ↗ — “Edit in Brain” opens BrainSlideOver with the target section auto-expanded; closing returns to the wizard without losing wizard state.
Design notes 2026-06-23
  • Real page docks LEFT at 40% (masthead stripped), opened AT the section the row named; setup sheet keeps RIGHT 60%. Both panes flush top, one lit hairline on the seam, page shadow casts right.
  • Saving on the left fires the re-check on the right — the founder watches the row flip live without leaving Connect. Keeps the founder's place in activation while editing Brain.
3tPersonalize tab · 768 — single column, docked preview pill D2 · R32
Overview Personalize Connect Try
How you soundWarm Host (default)Edit in Brain →
WhatsApp connectedFollow-ups in English (EN) · Bahasa Indonesia (ID) · Español (ES) — sent to Meta for approval when you activateEdit →
Handling rules
Answer on its own
hours ✕ prices ✕ availability ✕ + add topic
Route to you
refunds ✕ complaints ✕ + add topic
Greeting (guests see this first)Instant · any language
Hey! You've reached Salt & Stone — how can we help?
Follow-up when a guest goes quiet (24h)Meta pre-approved
Hi Maya, it's Lena from Bali Yoga — circling back on your message. I've got an answer for you whenever you're ready. Reply here any time and I'll pick it right up.
·· preview ··
Frame 3t · Personalize · 768 [P3 · Activate]
  • Story — Same single-column Personalize as 375 (the preview split engages at ≥1024 only — D-2 lock): wider but structurally identical.
  • Acceptance — shares frame 3's criteria — not re-cited. AC-SOUND citations dropped 2026-08-29 with the card (see frame 3 note).
  • Rest of this flow stays undrawn at 768 by rule (Peyton 2026-08-29: “skip the tablet first - use auto layout rule” — canon U8 fluid auto-layout carries the continuum); this frame is retained as a continuum sample. Its original reason-to-exist (PR #4177's card state) is gone with the card.
Phase 3 · Activate “Set it up, connect it, turn it on.” · f3 personalize · f4 connect · f5 try · f6a/f6/f6b activation outcomes
3Personalize tab · 375 — handling rules + preview, pointer to Brain Check R32 · D2 · D-1
Closed — the form keeps the full working height
dimmed Explore peeks — tap to return
Overview Personalize Connect Try
How you soundWarm Host (default)Edit in Brain →
WhatsApp connectedFollow-ups in English (EN) · Bahasa Indonesia (ID) · Español (ES) — sent to Meta for approval when you activateEdit →
Handling rules
Answer on its own
hours ✕ prices ✕ availability ✕ + add topic
Route to you
refunds ✕ complaints ✕ + add topic
Greeting (guests see this first)Instant · any language
Hey! You've reached Salt & Stone — how can we help?
Follow-up when a guest goes quiet (24h)Meta pre-approved
Hi Maya, it's Lena from Bali Yoga — circling back on your message. I've got an answer for you whenever you're ready. Reply here any time and I'll pick it right up.
06 · Slack
SlackGet pinged when it hands a guest to you.

Brain readiness lives on Connect →.

·· preview ··
Open — tap the pill, preview slides up as a bottom sheet
form dims behind — tap ✕ or drag down to return
✕
Hey! You've reached Salt & Stone — how can we help?
do you have space in September?
Real replies after activation — answers come from your Brain, never faked here
·· preview ··
Frame 3 · Personalize · 375 — handling rules + live preview [P3 · Activate]
  • Story — As a founder personalizing my assistant, I first see the voice it speaks in — one quiet row naming Warm Host (default), with an “Edit in Brain →” door; the traits and guardrails themselves live in Brain — then set which topics it answers on its own vs. routes to me, write my greeting, and watch a live preview react as I type — before Brain readiness ever enters the picture.
Acceptance
  • AC-TS-20 ↗ — added 2026-07-27 (this reorg, from prd-as-on-brand-support.md §Personalization Scope §02 Handling rules, #2605/T1206): a “route to you” topic feeds the deterministic escalation detector, not just a prompt suggestion.
  • AC-SOUND-01/02/08 dropped from this surface (2026-08-29) — the How you sound card left the assistant detail UI (Peyton ruling); those criteria were scoped to surface (a) in prd-pl-voice-card.md and need re-homing there (PRD stays live — the voice engine, Brain sheet, and playbook are untouched). The quiet row drawn above never blocks proceed/activate.
  • NEW (PRD debt) — the live-preview mechanic itself (default-on, reacts to typing, D2 mobile pill-bar pattern) has no dedicated AC; it's a design decision (R32/D2), not a tested behavior in the Test Plan.
Design notes
  • Preview — shipped, Peyton-locked — default-on for every chat assistant; reacts to typing (greeting renders live/white in the guest bubble; the AI's answer is never drawn, stays a labeled placeholder).
  • How you sound = one quiet readiness row (Peyton ruling, 2026-08-29) — the PR #4177 expanded card is scoped OUT of this tab (that volume of text does not belong in an assistant's detail UI); the voice content lives on in Brain. Rendered in the tab's own quiet row grammar — a peer of the Handling rules / Greeting / Slack rows (Peyton ruling, 2026-08-29 PM), sub-line naming the active voice, “Warm Host (default)”, right slot “Edit in Brain →”. The full checklist stays on Connect — D-1 holds.
  • D2 · 375: form keeps full height; a docked “·· preview ··” pill bar (keyboard/safe-area aware) slides the preview up on tap.
  • D-1 — Brain Check lives on Connect only R4 review 2026-07-23 — Personalize is per-run knobs ONLY (handling rules, greeting) — never a Brain-readiness gate. The full category-grouped checklist is Connect's alone (frame 4); Personalize carries a quiet pointer line only.
  • Handling-rule groups pre-seeded with T1209 defaults — founder edits, never authors from zero.
4Connect tab — apps, escalation channel, wallet
Overview Personalize Connect Try
01 · Connect apps
Communication WhatsApp Business ▾
Where your guests already message you
Connected ⌄
AI Model MystFlo AI
Writes the replies in your voice. Choosing your own AI model is coming later.
Connected ⌄
Alerts Slack
Escalations land in #guest-support. Slack off in Personalize hides this picker: “Turn Slack on in Personalize.”
Connected ⌄
02 · Wallet
Wallet balanceEach session draws $0.50 from your prepaid balance $41.20
03 · Brain Check
Your business
✓Business description
Confirmed
Edit in Brain →
Where to find you
✓Hours
Ready
Edit in Brain →
✓Contact
Ready
Edit in Brain →
What you sell
✓Offerings & prices
Confirmed
Edit in Brain →
Questions and policies
✓Questions · 14 items
Confirmed
Edit in Brain →
Branding
✓Brand voice
Confirmed Jul 20
Edit in Brain →
How you run
✓Policies · 5 items
Confirmed
Edit in Brain →
7 of 7 ready — it can answer guests
Try reads this same check back as one line — it never re-asks.
Continue to Try
Frame 4 · Connect tab — apps, wallet, Brain Check [P3 · Activate]
  • Story — As a founder connecting my assistant, I connect WhatsApp and Slack, see the AI model is already included, check my wallet, and confirm my Brain is customer-ready — all in the ONE place it lives.
Acceptance
  • Acceptance — 5 criteria, in prd-as-on-brand-support.md §Test Plan / §T1097 — 7-field gate.
  • AC-GATE-01 ↗ — all 7 required Brain fields satisfied and unblocked → ready=true, the wizard allows activation.
  • AC-GATE-02 ↗ — any of the 7 fields missing → ready=false, that field routes the founder to its Brain section.
  • AC-GATE-03 ↗ — the “No operating hours” default writes the sentinel value and satisfies the business_hours requirement.
  • AC-GATE-04 ↗ — a field present but verdict-flagged junk/unverified still blocks — present-but-failing is distinct from absent.
  • AC-TS-10 ↗ — no AI provider connected → activation blocks and routes to /connects?category=ai.
Design notes
  • Three setup sections T1155 — 01 apps · 02 wallet · 03 Brain Check. “Connected” stays monochrome — colour reserved for action-needed (amber Reconnect/Pending).
  • AI row = label "AI Model" + badge "MystFlo AI", status Connected — never "Included" (kit `design-decisions.md` 2026-08-04 closing amendment, retires #2576 C7's title-only treatment); wallet-first — balance, per-session draw, no card talk.
  • Communication carries the caret — structural, not conditional (kit `design-decisions.md` 2026-08-05, caret scope amended 2026-08-07, Peyton-locked). The caret is now present on every Connect-apps row EXCEPT AI Model, whether or not a second option exists today. Tapping WhatsApp Business's badge opens the same hairline expand mechanic as Storage: the current pick as the sole selected option (`◉ WhatsApp Business (current)`) plus one disabled `⊘ More channels · coming soon` row — matching the glyph/copy pattern of the Storage picker's disabled Supabase group (not redrawn as its own frame here — see `assistant-lifecycle.html` sec-5b for the exact expanded shape). AI Model is the one exception — no caret, no coming-soon row: `AiModelPicker.tsx` has no provider dropdown at all, and BYOK is gated by `BYOK_AI_HIDDEN` as a deliberate product decision, not an unbuilt roadmap item, so drawing either would promise a choice withheld on purpose. There is no Storage row — On-Brand Support deliberately has no records surface (Records Layer rule: the test is "rows a founder needs to see outside the conversation that created them", and a support thread isn't one). Slack stays an ordinary app connection, not a role, so it carries no caret either. Post-activation, Communication's caret gains a third state — muted-while-Active / live-while-Paused (lifecycle sec-9d, build gap #3120); this file draws no post-activation Connect tab, so it isn't redrawn here.
  • D-1 — Connect is the only Brain Check home — category-grouped rows (brain_manifest), required first, Optional label on recommended, per-row ✓/○/⚠, amber Add/Review in Brain → on anything missing/degraded. Not-ready state: ! 5 of 7 ready, same module every time it renders.
  • Personalize shows a one-line summary only (frame 3); Try reads it back as one line (frame 5). Neither owns a second checklist.
  • R35 — Split doorway — every fix action here (app/wallet/Brain row) opens its owning page as the split pane — inherits the master mechanic, assistant-lifecycle.html frame 14.
5Try tab — what you're activating
Overview Personalize Connect Try
What you're activating
Greeting“Hey! You've reached Salt & Stone…”
Answershours · prices · availability
Routes to yourefunds · anything ungrounded
Brain✓ 7 of 7 ready
Wallet$41.20 · $0.50 per session
Trying it
Replies are triggered by real customer messages Message your WhatsApp after activation to see it live. There's no way to fake a guest message before then — so we don't pretend to.
Send yourself the first one Right after you activate, open WhatsApp and message your own business number. You'll see the real reply, from your real Brain, in seconds.
Name this one
Autumn retreat support
Activate — $0.50 per session

Runs on your WhatsApp from the moment you activate. Pause anytime.

Frame 5 · Try tab — what you're activating [P3 · Activate]
  • Story — As a founder about to go live, I read back exactly what I'm turning on — including Brain readiness — and I'm told plainly there's no fake test, only the real thing right after I activate.
Acceptance
  • Acceptance — no dedicated criterion; this tab's honesty-copy and read-back are a design decision (R11), not a tested behavior in this PRD's Test Plan.
  • NEW (PRD debt) — “no pre-activation test for chat assistants” + the read-back's own fields (greeting/answers/routes/Brain/wallet) have no AC row; consider filing one if this exact read-back becomes load-bearing.
Design notes
  • R11 — Honest test, no fake capability — no pre-activation test run exists for WhatsApp chat assistants; replies only trigger on real inbound messages. Honest copy: “Replies are triggered by real customer messages — message your WhatsApp after activation to see it live”, plus a first-message nudge.
  • Tab: launch read-back (what you're activating) → name-this-instance → Activate. Testable types (WAITL1, BRVX01, webhook-backed) keep a real Test button — master contract: assistant-lifecycle.html frame 6.
  • A real pre-activation chat sandbox is a deferred post-launch decision.
5nTry tab — the name is already taken START FRESH · ARCHETYPE #6 · SHIPPED (#3243)
Overview Personalize Connect Try
Starting fresh Your previous setup stays in Past. Nothing is overwritten.
Name this one
Autumn retreat support 2

You already have one called Autumn retreat support. We numbered this one so you can tell them apart in Pulse — rename it to anything you like.

Keeping the same name is fine, it's just harder to read later.

Activate — $0.50 per session

Runs on your WhatsApp from the moment you activate. Pause anytime.

Frame 5n · Try tab — the name is already taken [P3 · Activate]
  • Story — As a founder starting a second, separate instance, the name field arrives already distinct from the one I'm still running, and I'm told plainly why — so I never end up with two identical rows in Pulse that I can only tell apart by an ID string.
Acceptance
  • Acceptance — owned by prd-pl-activation-wizard.md § “Instance Naming — Derive Distinct, Then Nudge” (AC-NAME-01…06). Cross-cutting: this is the shared Try-step naming contract, not a TMPL-9P3X behaviour — drawn here because 9P3X is the exemplar file. AC-NAME-04's sibling-status list was revised at gate R2 (2026-08-08) to include `stopped` + `archived` — verified live against the CF Pages preview (real WhatsApp-connected test account, Start Fresh path): the collision nudge fires correctly against a `stopped` sibling, matching this frame's copy exactly.
Design notes Archetype #6 · reactivation-flow (c)
  • The derive is the fix; the nudge is the safety net. The archetype already locks “custom name auto-derives at the Try step so two instances are tellable-apart in Pulse” (archetypes/reactivation-flow.md (c) + (e)). The field must arrive already distinct — the copy explains a name the founder can see, it never asks them to fix our default.
  • Monochrome, not amber. This page's colour law is “amber = action/pending only” (masthead callout). A duplicate name is legal and sometimes deliberate — nothing is blocked, nothing is pending — so the explanation is --fg-55 body text under the field, the sibling's name lifts to --fg-70, and the escape line sits at --fg-30. No amber chip, no warning icon, no red.
  • Never a block. Activate stays enabled and unchanged. Two same-named instances stay legal — the founder may be testing. No modal, no confirm step, no disabled button.
  • Same field, one extra line. Reuses frame 5's Name this one section verbatim (.sm + .field); the only new elements are the two caption lines. The “Your word for this instance” helper is replaced by the collision copy while a sibling exists, not stacked on top of it.
  • Start-fresh reassurance rides above it — the “previous setup stays in Past” line is the archetype's one start-fresh-specific element; drawn here so the naming nudge reads as bookkeeping, not as a loss warning. Suppressed on plain first activation (nothing to reassure about).
  • Suffix rule — first collision appends 2, then 3… (never (copy), never a date, never the display_id). The founder's word stays the stem so the pair sorts together in Pulse.
6aActivating — the loader C2
Activating “Autumn retreat support”

About 20 seconds. Stay on this screen.

✓Checking your setup
✓Confirming billing & terms
✓Setting up your assistant
◍Running a live test~15s
Going live
Frame 6a · Activating — the loader [P3 · Activate]
  • Story — As a founder who just tapped Activate, I watch real setup steps run — including a live test — so I know activation is actually happening, not just spinning.
Acceptance
  • Acceptance — owned by prd-pl-activation-wizard.md (the shared activate-assistant pipeline this loader collapses to 5 steps) — not this assistant's own PRD; no AC-* id to cite here.
Design notes
  • C2 loader — same pipeline as every assistant — collapses the real activate-assistant pipeline (auth → apps → BYOK-AI gate → payment → terms → workflow → test run → finalize) to 5 grouped steps — wording copied verbatim from the master loader (assistant-lifecycle.html frame 7a, .ld-step): Checking your setup → Confirming billing & terms → Setting up your assistant → Running a live test → Going live.
  • This pipeline test-run step is separate from the Try-tab pre-activation sandbox (frame 5's note) — 9P3X still has no fake pre-activation chat test, but the activation pipeline itself always runs a real live-test step before finalizing, same as every other assistant type.
6Activated — live
✓
On-Brand Support is live

It's answering on your WhatsApp now. Escalations go to #guest-support. Watch it work in Pulse.

✓ WhatsApp connected ✓ Brain confirmed — 7 of 7 sections
View in Pulse Done
✓
On-Brand Support is live

It's answering on your WhatsApp now. Escalations go to #guest-support. Watch it work in Pulse.

✓ WhatsApp connected Brain — 5 of 7 sections ready
View in Pulse Done
Frame 6 · Activated — live [P3 · Activate]
  • Story — As a founder who just activated, I see two facts that are always true — WhatsApp connected, Brain readiness — and I'm handed off to Pulse to watch it work, instead of a screen full of noise.
Acceptance
  • Acceptance — owned by prd-pl-activation-wizard.md (the shared success-state contract) — not this assistant's own PRD; no AC-* id to cite here.
  • NEW (PRD debt) — this assistant's OWN reason the third fact (“test run passed”) is cut — activate-assistant skips the test step for user_initiated (chat) trigger types — is asserted only in this design note, not in a Test Plan row.
Design notes R11 fix, 2026-07-25
  • Quiet: one glowing badge (the surface's single lit object), two facts that are always true, handoff to Pulse. “Test run passed” was cut, not deferred — see the PRD-debt note above.
  • Right panel — the not-fully-ready Brain variant (D1, #2611): “confirmed” language is reserved for a fully-ready rollup (left panel, 7 of 7). A partial rollup (5 of 7) reads “Brain — N of M sections ready” with an amber dot, never “confirmed — 5 of 7” — that phrase would contradict itself. This state is reachable because only hard blockers gate activation, not full completion.
6bFailed — full rollback B6
✕
The live test didn't pass

WhatsApp rejected the message send, so we stopped before activating anything.

Nothing was created No assistant, no workspace, no charge. Your setup is exactly where you left it — we rolled the whole thing back.
Try activating again
Reconnect WhatsApp first

Still stuck? Message us — we'll look at the run.

Frame 6b · Failed — full rollback [P3 · Activate]
  • Story — As a founder whose activation failed, I'm told plainly nothing was created or charged, and I get one clear next step to fix it and try again.
Acceptance
  • Acceptance — owned by prd-pl-activation-wizard.md (the shared rollback contract, B6) — not this assistant's own PRD; no AC-* id to cite here.
Design notes
  • B6 — failure = full rollback, stated plainly — Live-test failure = FULL rollback, nothing created/charged — said in plain words, never implied. Retry CTA + a named first fix; “Reconnect” is the one action verb (design-canon connection-status rule) — here it's WhatsApp, 9P3X's own connection.
  • “Message us” is a real link (wa.me/<MYSTFLO_SUPPORT_NUMBER>, config value, never hardcoded), run reference prefilled — master precedent: assistant-lifecycle.html frame 7(b) note “(b) Failed · B6”. This landing owns the link; the Try-tab nudge (frame 5) keeps its own separate “send yourself the first one” copy untouched.
  • Only these two extra outcomes apply to 9P3X — 9P3X is a chat assistant with no WhatsApp template requirement, so the master's other two outcomes (pending_template_approval launch-pending, template_rejected) never apply and are intentionally not drawn here. The loader (6a) and this failed/rollback landing (6b) are the only outcomes beyond the live success state (6).
Live
RECURRING SURFACE · drawn once in the master
On-Brand Support's Pulse tab is the master's CHAT fill of the ONE Pulse-tab template — same instance (Autumn retreat support · ASST-7Q1) the master already draws.
assistant-lifecycle.html #sec-9b ↗
  • Linkline copy: https://wa.me/16318181081 — guests scan or tap to message you, no booking prefill.
  • Flyer card title = instance name (“Autumn retreat support”); CTA “Scan to chat on WhatsApp”.
  • Escalation-copy nuance (kept here, not drawn as a ledger row): a normal handoff reads “Escalated”; the #2039 grounding-guard catch reads “Reply held — a detail wasn't confirmed in your Brain” (class-neutral, never interpolates the offending value) — pulseFeedFormatting.ts.
  • Footer link relabeled “See account-wide runs →” (destination unchanged) — real component LogsTab.tsx, not drawn as a separate frame.
AC-BILL-01/02/03 ↗ (each session = one metered charge, no double-bill on re-close, a pure-human stretch never re-bills) apply unchanged — cited in full on the master frame, not re-cited here.
dimmed Pulse peeks — revealGap · app header stays visible above (C1)
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
What it does

On-Brand Support reads your Brain — your prices, policies, hours, FAQs, and brand voice — and answers guest questions in WhatsApp in the voice you confirmed. Routine questions get answered in seconds. Anything it can't ground in your knowledge gets handed to you on Slack.

How it works
01
Customer
“do you have space in September?”Any hour — 11pm included.
02
Brain ✦
Grounds the answer in your facts ✦ AI
03
Assistant
Replies in your voice, in the same thread
tricky ones → routed to you
◎
Outcome
Guest helped, in your voiceYou never typed a word.
Key benefits
Answers while you teach, host, sleep
Guests get instant replies at the exact moment they're deciding.
Sounds like you — because you confirmed it does
Your brand voice, your policies, your tone — all confirmed by you, so replies match how you'd actually answer.
Knows when to hand it to you
Refunds and complaints never get an improvised answer — they get escalated.
Never makes up a price or date
If it isn't in your Brain, it says so and brings you in.
Frame 9c · Post detail sheet — Overview tab [P5 · Monitor]
  • Story — As a founder revisiting what my live assistant does, I see the exact same explanation I saw before activating it — nothing rewritten, nothing to relearn.
Acceptance
  • Acceptance — shares AC-UI-01 ↗ with frame 2 (same modal standard, now in its post-activation chrome) — not re-cited.
Design notes master sec-10, 2026-07-23
  • R28 — Pre/post Overview identical — copy is byte-identical to frame 2/2b — same “What it does” paragraph, same “How it works” rail (mobile) and chart (desktop), same four benefit cards. One long_description; post never draws a second one.
  • Only chrome changes from pre: header carries live identity (status dot, instance name + rename pencil (R17) + ASST-7Q1, template name dropped to the quiet sub-line) and icon run-controls (⏸ ⏹) in place of the price-only pre header; tabs are plain nav (Pulse · Overview · Personalize · Connect), no chevron separators, no done-ticks.
  • Frames 9/9b (above) carry this same D4 header pattern — one identity contract across every post-activation surface.
Revisit · 2026-09-04, updated twice same day (#4432 Track 2 · then a screenshot-review fix) — the master is now a locked mirror, not a ledger; this frame's "post = pre at rest" reading needed two correctionsThe master's post Personalize (assistant-lifecycle.html 9c / 13c) renders the SAME visual structure as pre-activation Configure, every field showing its saved state, but nothing on the tab is clickable. Peyton's 08-29 “post = pre at rest, things selected and shown” ruling still names the right visual — but its parenthetical “D-2 instant-save unchanged” no longer holds: under “nothing is interactive,” the handling-rule chips and the Slack-notify switch stop being live D-2 controls on THIS tab too, same as every other template's fields. Correction, later the same day: this frame's chip groups and switch previously still DREW the `×` remove buttons, `+ add topic` controls, and switch-shaped Slack toggle, on the theory that they'd render "inert but drawn." Peyton caught that in review: a control that looks tappable and isn't is worse than no control — it reads as broken, not as read-only. Fixed — the `×`/`+ add topic`/switch shape are no longer drawn at all (chips keep their values, lose only the edit controls; Slack renders as plain state text, "On"), on both tiers (9d desktop, 9d-m mobile). The `D-2 states` demo strip (saving/reverted/error-toast crops) is removed with them — those were simulating a live, in-flight save on a tab where nothing saves. The only door to changing anything is “Start fresh with a new assistant” (master 9c/9g). Headers in this file now carry the shared four-line hierarchy (master 9g / 13g). One delta still owed here: fold the “Brain readiness lives on Connect →” pointer into the tab's single context line (master 9c) rather than a standalone sentence.
dimmed Pulse peeks — revealGap · app header stays visible above (C1)
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
How you soundWarm Host (default)Edit in Brain →
WhatsApp connectedThis assistant's follow-ups · English (EN) · Bahasa Indonesia (ID) approved · Español (ES) approvedEdit →

Follow-up languages live on your WhatsApp connection. Add one anytime — your assistant keeps running.

Handling rules
Answer on its own
Topics it handles start to finish, from your Brain.
hours prices availability product details
Route to you
It acknowledges the guest, then pings your Slack.
refunds complaints custom requests
Politely decline
Out of bounds — it says so kindly and offers your contact.
medical advice legal advice
Greeting (guests see this first)Instant · any language
Hey! You've reached Salt & Stone — how can we help?
Follow-up when a guest goes quiet (24h)Meta pre-approved
Hi Maya, it's Lena from Bali Yoga — circling back on your message. I've got an answer for you whenever you're ready. Reply here any time and I'll pick it right up.
06 · Slack
SlackGet pinged when it hands a guest to you. On

Changes take effect on the next run. Nothing already answered is rewritten. Brain readiness lives on Connect →.

Hey! You've reached Salt & Stone — how can we help?
do you have space in September?
Live replies run in WhatsApp — this preview mirrors your saved setup, nothing is sent from here
·· preview ··
Frame 9d · Post detail sheet — Personalize tab [P5 · Monitor]
  • Story — As a founder checking my live setup, I land on the SAME Personalize I set up in — voice row, handling-rule chips, greeting, Slack — with my saved values selected and shown, editable in place; a quiet line reminds me Brain readiness lives on Connect. Never a second checklist, never a history log.
Acceptance
  • Acceptance — shares AC-TS-20 ↗ with frame 3 (same handling-rules mechanic, read back at rest) — not re-cited.
  • Follow-up languages door — the ONE live control on a locked assistant (chief-architect, 2026-09-20). The WhatsApp connected · This assistant's follow-ups · English (EN) · Bahasa Indonesia (ID) approved · Español (ES) approved · Edit → row renders its Edit → LIVE (white, underlined) inside the read-only post-activation Personalize (#4432 POST_ACTIVATION_READONLY_TEMPLATE_IDS) — not greyed with the locked fields. Justification: it edits ACCOUNT state (the WhatsApp connection, read at send time), never the assistant's config, so it neither breaks the lock nor routes through Start fresh. The status on the line is per-assistant (this assistant's own Meta templates), not the account's worst-case list — the two views can disagree by design (see frame 3b note). Chief-architect assigns this AC-CONNECTS-25 in the Connects PRD — that row has NOT landed yet (the PRD tops out at AC-CONNECTS-18), so until it does this stays NEW (PRD debt); cite the id here once the PRD carries it.
  • toggle-instant-save (below) — locked via /design 2026-08-24, now cited as AC-MODALTWIN-16 ↗ / AC-MODALTWIN-17 ↗ (in-flight a11y) in the activation-wizard PRD §1/§1a (added same PR as this note). Settled + shipped, note-not-copy (Peyton re-confirmed 2026-08-29: “remove the save changes bar and confirm dialog - we had decided this before earlier… auto-save once user select the toggle”): live on main since PR #4066 (AssistantSettingsTab.tsx saveInstantField + per-key savingKeys ~:404-431, D-2 comment ~:368, “Couldn't save that” toast ~:420). The sentence describing it is a frame ANNOTATION — it is never drawn as founder copy (removed from the drawn paragraph in this redraw). Scope drawn here = TODAY's shipped behavior: toggles instant-save; text fields (Greeting, Handling rules, Routed to you) keep the dirty-state bar + ConfigChangeConfirmModal — a snapshot, not a target state: Peyton ruled platform-wide the same day (“yes, all input fields are auto-save through the platform”), a separate CTO-owned workstream (prerequisite #4077 per-field patching) that supersedes this split when it lands. Do not “fix” auto-saving fields back to the bar afterwards.
Design notes master sec-11, 2026-07-23
  • Corrected 2026-09-04 — this frame no longer draws the edit controls the D-2 bullets below describe. The chips, "+ add topic" affordance, and switch-shaped Slack toggle were drawn here as literal UI even after the same-day locked-mirror lock made them inert — Peyton's review call: don't draw a control that looks tappable and does nothing. The `×`/`+ add topic`/switch shape are gone from BOTH tiers; chips keep their values as plain unadorned tokens, Slack reads as plain state text ("On"). The D-2 bullets immediately below still correctly describe the REAL, live behavior this same component renders pre-activation and on any other still-editable surface — they're accurate about the platform, just no longer about what THIS locked frame draws.
  • Redrawn 2026-08-29 (Peyton ruling): post = pre at rest, literally. “Same as pre-activation but things are selected and shown” — 9d mirrors 3b's structure tier-for-tier (9d-m mirrors 3): the quiet How-you-sound readiness row, the same handling-rule chip groups with the founder's saved topics, the greeting with its saved text, the Slack section. The earlier abstracted 3-row “Your setup” read-back (master sec-11 shape) is retired for this surface — it hid what was actually selected. Text-field edits keep the dirty-bar + confirm flow; booleans instant-save (D-2 below). NO Activation/Change History, NO schema “Notifications” category, NO second Slack surface — the escalation channel lives on Connect (frame 9e).
  • No Brain-readiness gate here (D-1 stands: Connect owns the full category-grouped checklist, frame 4) — the single How-you-sound readiness row above is a pointer INTO Brain, not a checklist. Same quiet one-line pointer to Connect as pre. No stepper voice, no chevrons, no done-ticks. RESOLVED (Peyton, 2026-08-29 PM): one quiet voice row on Personalize, the full category-grouped checklist stays on Connect — D-1 holds unchanged. The voice row is a row-peer of Handling rules / Greeting / Slack (the tab's own grammar), never a card, checklist, or gate.
  • Both contract tiers drawn (375 + desktop 1180); 768 stays undrawn for this frame BY RULE (Peyton 2026-08-29: “skip the tablet first - use auto layout rule” — U8 fluid auto-layout carries the continuum). Desktop keeps the ≥1024 preview split (T1145); 375 uses the docked “·· preview ··” pill, same D2 pattern as frame 3. Preview placeholder copy is post-tense — the pre modal's “see it in Try →” string must never render here (Try does not exist post-activation, R30).
  • D-2 — Toggle fields save instantly, platform-wide (Peyton-locked, /design, 2026-08-24; a11y + states fix-loop 2026-08-25; scope correction 2026-08-25 PM) — flipping the switch calls the save immediately (same shape as BillingPreferences.tsx's wallet-alert checkboxes — persist() on change, silent success, toast only on failure). The Switch stays interactive mid-flight (NOT disabled — that pulled it out of tab order) — it dims + reports aria-busy, with an aria-live "Saving…" label; re-entry during a save is guarded in saveBooleanField's savingKeys check, not by disabling the control. Failure toast title is "Couldn't save that" (brand voice — not a raw "Save failed" stub), switch reverts to its prior value, no dirty-state bar appears behind it. No sticky Save/Discard bar, no ConfirmSettingsChange modal — those add a second click that echoes back information the founder already saw when the switch moved, with zero cost or risk to review (binary, instantly reversible). Every OTHER field type on this tab (Greeting, Handling rules, Routed to you — all text) keeps the existing dirty-state bar + confirm-modal flow unchanged; that review step still earns its place for free-text edits and, on generator templates, cost warnings. This is a shared-renderer change (ConfigFieldRenderer's case 'boolean') — every schema-declared boolean field gets this, on any template that mounts AssistantSettingsTab. Known limit, shipped anyway (Peyton-approved 2026-08-25, "ship it first then fix"): the save writes the assistant's whole configuration at once, not a per-field patch. This is reachable in TWO shapes, not one: (a) two DIFFERENT boolean fields on the SAME live template flipped in quick succession — checked against real migrations, not schema-in-isolation: every live template mounting this tab carries at most one boolean today (TMPL-BRST01's six-toggle schema is real but generationSurface:'brain_inline' blocks it from ever mounting this modal via every NEW-activation path checked — the Assistants catalog AND the Brain page's own "Build Your Brand" flow both reuse the same filtered hook; an already-activated legacy instance from before that reclassification is the one thing not ruled out, and isn't checkable without a customer-data read this session isn't authorized to run solo); (b) a boolean flip racing the EXISTING text-field Save+Confirm flow on the SAME tab — reachable TODAY on the one live field via completely ordinary use (flip Slack, then edit+save Handling rules) if one request lands slower than the other. Both shapes, same cause, same fix. Tracked as a high-urgency follow-up (server-side partial-patch on update-config): #4077, which should carry a mechanical one-boolean-per-template guard as an acceptance criterion, not just this prose.
  • Slack row here is literal, not illustrative (correction, 2026-08-25 PM) — earlier drafts of this note called the Slack row illustrative and pointed at TMPL-WAITL1 as where the real live booleans are. Both were wrong. On-Brand Support's Slack field (notify_escalation_slack, added 2026-08-24 by #4027) IS a real schema-declared boolean and DOES get D-2's instant-save behavior — it's rendered by a dedicated SlackNotifyRow component (not the generic schema loop, to avoid duplicating the row), which now also receives the saving prop for the same in-flight indicator. TMPL-WAITL1 (Waitlist+Launch) does NOT use this component at all — it has its own separate WaitlistSettings screen with its own save flow; its toggles are unaffected by D-2 entirely. This is the live boolean today, singular.
768 undrawn by rule — Peyton 2026-08-29: “skip the tablet first - use auto layout rule.” Fluid Auto-Layout (canon U8 / design-foundations § Core 7) carries the continuum between the two drawn tiers; 375 + desktop 1180 are samples of it, not the only states.
Phase 5 · Monitor “Is it working, and does anything need me?” · f8 Pulse card · f9 activity · f9c overview · f9d personalize, all post-activation
8Pulse — monitored
Active ▶⏸⏹ Details →
Autumn retreat support ASST-7Q1
On-Brand Support
3 connected
Sessions
142 · 96% handled solo · 2h ago · $18.40
Needs your attention
!
****4821 — Guest needs you — refunds
Escalated 11:06 PM · one request per unhandled topic
I handled it
!
****4821 — Guest needs you — scholarships
Escalated 11:18 PM · handling one leaves the other open
I handled it
Frame 8 · Pulse — monitored [P5 · Monitor]
  • Story — As a founder checking in, I see at a glance whether my assistant is healthy, how many sessions it's handled, what it's cost me, and whether anything is waiting on my reply.
Acceptance
  • Acceptance — 1 criterion, in prd-as-on-brand-support.md §Test Plan.
  • AC-BILL-01 ↗ — the cost figure shown ($18.40) is the sum of metered per-session charges — one billable unit per closed session.
  • NEW (PRD debt) — the card's own layout contract (fixed zone map, “Needs your attention” panel) is platform Pulse-lifecycle territory, not this assistant's PRD.
Design notes R13 · D4 · R24
  • “Needs your attention” panel (AttentionPanel, verified end-to-end): amber icon + reason + Resume AI, polling every 30s.
  • Card uses the master's fixed zone map — badge+controls · title (instance name + id) · template sub-line · meta line · pinned metrics — identical to every Pulse card.
  • R24: healthy apps collapse to “N connected”; a broken one is the whole story.
  • Escalation-rate stat on the card is a tracked nice-to-have (gap #4).
9Pulse tab — RECURRING SURFACE, drawn once in the master R30 · R37
RECURRING SURFACE · drawn once in the master
Same CHAT fill as the desktop twin above, single-column stack (metrics → chat share slot → activity).
assistant-lifecycle.html #sec-9-m ↗
  • Escalation copy: “Guest needs you — {reason}” (refunds, scholarships, etc.) — lantern, View issue, never folded into the activity chip's normal “Escalated” wording.
  • Feed speaks founder language throughout: sessions, what grounded them, cost — not a log dump.
AC-BILL-01/02/03 ↗ apply unchanged — cited in full on the desktop revisit card above, not re-cited here.
9cPost detail sheet — Overview tab — mobile R28
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
What it does

On-Brand Support reads your Brain — your prices, policies, hours, FAQs, and brand voice — and answers guest questions in WhatsApp in the voice you confirmed. Routine questions get answered in seconds. Anything it can't ground in your knowledge gets handed to you on Slack.

How it works
01
A guest messages your WhatsApp
Any hour — 11pm included.
02
It answers from your Brain
Your real prices, policies, and availability — never invented.
03
Tricky ones come to you
Refunds, complaints, anything uncertain → a Slack ping with the thread.
◎
Guest helped, in your voice
You read the thread over coffee, not at midnight.
Key benefits
Answers while you teach, host, sleep
Guests get instant replies at the exact moment they're deciding.
Sounds like you — because you confirmed it does
Your brand voice, your policies, your tone — all confirmed by you, so replies match how you'd actually answer.
Knows when to hand it to you
Refunds and complaints never get an improvised answer — they get escalated.
Never makes up a price or date
If it isn't in your Brain, it says so and brings you in.
Story · acceptance · design notes — shared with the desktop half: frame 9c ↑ (one note, both tiers).
9dPost detail sheet — Personalize tab — mobile D-1 · REDRAWN 2026-08-29
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
How you soundWarm Host (default)Edit in Brain →
WhatsApp connectedThis assistant's follow-ups · English (EN) · Bahasa Indonesia (ID) approved · Español (ES) approvedEdit →

Follow-up languages live on your WhatsApp connection. Add one anytime — your assistant keeps running.

Handling rules
Answer on its own
hours prices availability
Route to you
refunds complaints
Greeting (guests see this first)Instant · any language
Hey! You've reached Salt & Stone — how can we help?
Follow-up when a guest goes quiet (24h)Meta pre-approved
Hi Maya, it's Lena from Bali Yoga — circling back on your message. I've got an answer for you whenever you're ready. Reply here any time and I'll pick it right up.
06 · Slack
SlackGet pinged when it hands a guest to you.On

Changes take effect on the next run. Nothing already answered is rewritten. Brain readiness lives on Connect →.

·· preview ··
Story · acceptance · design notes — shared with the desktop half: frame 9d ↑ (one note, both tiers).
9ePost detail sheet — Connect tab · state 1 of 3, channel already picked #3205 · #2699 parity fix
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
01 · Connect apps
Communication WhatsApp Business
Where your guests already message you
Connected ⌄
AI Model MystFlo AI
Writes the replies in your voice. Choosing your own AI model is coming later.
Connected ⌄
Alerts Slack
Where escalations + critical issues notify your team
Connected ⌄
#general⌄
Story · acceptance · design notes — shared across all three 9e states, see below the last one ↓.
9ePost detail sheet — Connect tab · state 2 of 3, no channel picked yet live-assistant tense
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
01 · Connect apps
Communication WhatsApp Business
Where your guests already message you
Connected ⌄
AI Model MystFlo AI
Writes the replies in your voice. Choosing your own AI model is coming later.
Connected ⌄
Alerts Slack
Where escalations + critical issues notify your team
Connected ⌄
#Select a channel⌄

Pick a channel — escalations aren't reaching you yet

Story · acceptance · design notes — shared across all three 9e states, see below ↓.
9ePost detail sheet — Connect tab · state 3 of 3, picking a new channel optimistic, no revert
Autumn retreat support✎
On-Brand Support Assistant · ASST-7Q1
Active · $0.50 per session · live since Jul 21
Last run 2h ago
▶⏸⏹⋯✕
Pulse Overview Personalize Connect
01 · Connect apps
Communication WhatsApp Business
Where your guests already message you
Connected ⌄
AI Model MystFlo AI
Writes the replies in your voice. Choosing your own AI model is coming later.
Connected ⌄
Alerts Slack
Where escalations + critical issues notify your team
Connected ⌄
#marketing-team⌄

Saving…

Story · acceptance · design notes — shared across all three 9e states, see below ↓.
Frame 9e · Post detail sheet — Connect tab, 3 states [P5 · Monitor]
  • Story — As a founder who's already running this assistant, I can come back to Connect at any time and pick (or fix) my Slack escalation channel — the same picker I saw during setup, not a dead end.
Fix — found via #2699 QA click-through
  • The bug: ConnectionsSection.tsx documented this as a deliberate DOM-parity omission — the post modal never passed tetheredPickers, so no picker rendered here at all (the "Connected ⌄" chevron was dead). Fine while the channel was optional; a dead end once #3205 made it required once Slack connects — confirmed live when the FFB test account's escalation never reached Slack.
  • The fix: AssistantDetailModal.post.tsx now builds tetheredPickers the same way ConnectStep.tsx (frame 4) already does — same tetheredPicks.tsx builder, no new component. Pre and post render the identical picker.
  • Section header dropped: the single-item "Optional — enrich this assistant" eyebrow wrapper is removed from ConnectionsSection.tsx — the row-level "Optional" badge already carries the signal, and no launch template has more than one optional role (checked all 5 in T408p2's seed migration).
Design notes — round 2 (Chief Designer catch, PR #3323 review)
  • Shell-language #7 (journey coherence) — pre and post are twins; this frame restores that for Connect specifically (frame 4 already had the picker, 9e now matches).
  • State 2 needed post-activation-tense copy, not the wizard string. tetheredPicks.tsx's shared renderPick() reused the wizard's amber "Pick one to continue" verbatim — true during setup ("continue" is a real next step), false here: the assistant is already live and escalations are silently dropping on the floor right now. State 2 above draws the corrected copy, threaded through a new context: 'wizard' | 'live' param on buildTetheredPickers/renderPick so the wizard's own copy is untouched.
  • State 3 needed an optimistic value, not a revert-then-settle. SlackChannelPicker is fully controlled by value; a save that only updates local state on success made a pick visually snap back to "Select a channel" for two round-trips (fresh-fetch, then save) on a slow connection — the exact "did my pick even register" failure class TetheredPickReveal (#2368) exists to prevent. State 3 shows the picked value immediately, dimmed, with a quiet "Saving…" line — never the empty placeholder — and only reverts on an actual failure.
  • Badge drops once Slack is connected — "Optional" only describes Slack before it is connected. After connect, the channel pick is required (#3747); keeping Optional here contradicted the live gate.
  • "Connected" stays monochrome per frame 4's rule — colour reserved for action-needed states (state 2's amber hint, state 3's dimmed-pending).
Phase 6 · Maintain “Turn it back on later, without losing anything.” · f10 reactivation chooser
10Later — reactivation chooser
Turn “Autumn retreat support” back on
Two ways to do it. Neither one loses anything.
Reactivate
Same setup, same WhatsApp number — nothing's lost, picks up right where it left off.
What comes back
Greeting“Hey! You've reached Salt & Stone…”
Handling ruleshours · prices · availability
Escalations#guest-support
AppsWhatsApp Business · MystFlo AI
Brain✓ 7 of 7 ready
Reactivate

Rename it first? Winter retreat support ✎

Start fresh
A new, separate instance — your old one stays in Past, nothing's overwritten.
Start fresh
Frame 10 · Later — reactivation chooser [P6 · Maintain]
  • Story — As a founder turning a paused assistant back on, I can pick up exactly where I left off or start a clean new instance — and I can see up front that nothing I already set up gets lost either way.
Acceptance
  • Acceptance — owned by prd-pl-activation-wizard.md (the shared reactivation contract: quick_resume / review_config / start_fresh) — not this assistant's own PRD; no AC-* id to cite here.
Design notes Archetype #6 · R18 · R19
  • Small dialog (ModalWrapper presentation="dialog" size="sm"), two real choices, recap answers “what happens to my old setup?” before it's asked. Start-fresh opens the standard wizard prefilled; old instance stays in Past.
  • Locked copy: “Turn '<name>' back on” · “Two ways to do it. Neither one loses anything.” Start fresh → “A new, separate instance — your old one stays in Past, nothing's overwritten.” Never “delete”/“replace”.
  • Reactivate sub-line is audience-split (§O1, Peyton-resolved 2026-07-26): offering-backed assistants (waitlist/launch) keep “Same setup, same list — new signups join as the next wave” (still literally true there). Non-offering chat assistants — this one — get the chat-domain equivalent drawn above: “Same setup, same WhatsApp number — nothing's lost, picks up right where it left off.” The master (assistant-lifecycle.html sec-13) draws the generic/offering example; this file is the chat-adapted one.
  • Two cards only — review_config stays invisible plumbing, never a card. Optional rename rides on the Reactivate card.
  • “Don't ask me next time” is shipped (ReactivationConfigReview.tsx:341, auto-resume branch at :134) — drawn here and in the master (assistant-lifecycle.html frame 13), labeled “always Reactivate”, never the internal quick_resume name.
  • Chief Designer reconciliation (PR #2773, 2026-07-26): shipped recap rows use this component's existing stacked label-over-value convention with hairline dividers (the same one the fallback “Your settings” dump already uses one slot over) instead of this frame's single-line .kv — chosen for consistency with the pattern already shipped in this exact modal, not a new one. Rename affordance is a single text link across every viewport (matches this frame; the master's sec-13 desktop side-by-side outline button is not built — size="sm" barely changes width by breakpoint, so a second button treatment isn't a real gain here).
  • Escalations recap row shows a boolean “Configured”, never the illustrative channel name (“#guest-support”) drawn here — only a Slack channel ID is ever persisted, never resolved to a display name; an opaque ID would be worse for a founder than the clean boolean (R11/C2 honesty discipline).
Inventory note block, not a three-part-shape part-components label — per the canon, flow files keep the component inventory as notes; every part listed here appears seated in a full screen in sections 5/6, never only here.
Components this surface draws from
  • Card + detail taxonomy: `AssistantSummaryCardPre` / `AssistantDetailModalPre` (f1/f2), `AssistantSummaryCardPost` + post detail sheet with R30 tab order (f8/9b–9d).
  • Wizard: `ConfigureStep` Personalize with the R32 live-preview split (f3/3b); Connect rows + the 7-category Brain Check module reading `brainInheritance` (f4); Try seated sheet (f5/5b).
  • Cross-reference choreography: "Edit in Brain" via `PageSlideOver` 60/40 split — f5c; never a nested modal.
  • Chat runtime surfaces: the WhatsApp thread vocabulary (`.bub`, disclose line, human-mode handover rows) backed by `_shared/chat-handler.ts` + `chat-prompts.ts` — Phase 4.
  • Sheet chrome: every modal rides `ModalWrapper presentation="sheet"` with the platform-wide band + measured column (PR #2346).
  • No records surface — this assistant is the named counter-example of the records test (`../../archetypes/records-surface.md`).
Master contract
  • assistant-flows/assistant-lifecycle.html is the PRIMARY structural contract — this file is the per-assistant exemplar and must never contradict it. assistant-flows/workshop-booking.html is the canonical structural reference for the 8-section shape (design-canon.md § Assistant-flow mockup structure, 2026-08-06); this file is the token-block exemplar the siblings copy verbatim.
  • Aligned to the master: Personalize live preview (default-on + honesty locks, R32 fill geometry) · Brain Check module scoped to Connect only (D-1) · R24 app chips · R27 price treatment · R30 post tab set.
Sources
  • Prod row TMPL-9P3X (post-#2593 copy) · prd-as-on-brand-support.md §Test Plan · T1209 handling-defaults migration · HandlingRulesEditor.tsx · AttentionPanel.tsx · ReactivationConfigReview.tsx · chat-assistant-standard.md · ledger ../parity/parity-on-brand-support.md (2026-08-04).
  • Frame 7's #done resume and frame 3's rules-take-effect are in-plan fixes (plan-onbrand-3fix-2026-07), drawn as target state, labeled where today's behavior differs. Business/guest names are illustrative.
Guest
This step is 375. No 1180 drawing — use the Mobile size.
768 undrawn by rule — Peyton 2026-08-29: “skip the tablet first - use auto layout rule.” Fluid Auto-Layout (canon U8 / design-foundations § Core 7) carries the continuum between the two drawn tiers; 375 + desktop 1180 are samples of it, not the only states.
Phase 4 · The guest's thread “Will it actually help them, at 11pm, without me?” · Trigger → Interact (AI-answered or escalated) → Outcome → Fallback
7What the guest sees — WhatsApp, 11:04pm
MF
MystFlo 11:06 PM
Needs youRefund request from +49 •• •• 4821 — July retreat, injury.
"my friend needs a refund for the july one, she broke her ankle"
Reply in this thread to answer the guest directly. AI is paused for this conversation.
P
Maya 7:42 AM
So sorry to hear about her ankle! Full refund is on its way today — tell her to rest up and join us in September on us. 💛
P
Maya 7:43 AM
#done
MF
MystFlo 7:43 AM
Got it — AI is back on for this conversation.
Frame 7 · What the guest sees — WhatsApp, 11:04pm [P4 · Trigger → Interact → Outcome]
  • Story — As a guest messaging at 11pm, I get an answer grounded in the business's real prices and policies, in their voice — and when it's something only the founder can decide, I'm reassured a real person is coming, without having to ask twice.
Acceptance
  • Acceptance — 5 criteria, in prd-as-on-brand-support.md §Test Plan.
  • AC-TS-01 ↗ — grounded, brand-voice reply within the session when the knowledge base has the answer.
  • AC-TS-04 ↗ — a message matching an escalation trigger hands off to the founder, posts to the configured Slack channel, and the session still bills.
  • AC-TS-05 ↗ — when it can't ground an answer, it escalates rather than fabricating one.
  • AC-TS-06 ↗ — once the founder replies (human mode active), the AI is suppressed for that conversation — no interference.
  • AC-TMPL-04 ↗ — #done in the Slack thread resumes AI mode within seconds; the literal string “#done” is never forwarded to the guest's WhatsApp.
Design notes
  • This is the AI-answered / escalated fork drawn in the journey diagram above (#journey) — the September-space reply is the AI-answered branch, the refund ask is the escalated branch, both inside the SAME thread.
  • The wedge frame — conversation becomes the operation: answer grounded at 11pm, refund escalated (“route to you” topic), founder replies from Slack.
  • #done hands the thread back to AI instantly — shipped (#2616, 2026-07-22): the Slack reply triggers resume_ai_mode immediately; the 5-min sweep stays as the safety net if #done fails or the owner forgets.
  • First-ever reply carries the AI disclosure line, code-side and unconditional.
8 · Future design — Part II · Future no frames deferred — this file draws the shipped chat golden path only

No deferred items — everything above is the current build (the shipped On-Brand Support flow). Deferred decisions named in Scope (§2) — the pre-activation chat sandbox, BYOK AI provider picker, escalation-rate card stat — stay listed there, not drawn: never invent Future frames to fill this part (kit canon U9).