Design preview · not yet built
← Design HQ HTML on GitHub ↗ PRD · prd-pl-pulse-dashboard ↗

Pulse — monitor and manage

Pulse is the monitor — Overview, lists, detail, Activity.

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

The monitor surface — Overview glance (Runs this week · Attention · MTD Cost — Health folded into Attention 2026-08-22), Active/Past card walls, the account-wide Activity feed (runs + Brain work, merged 2026-08-22), and the post-activation detail modal — real structure from Pulse.tsx / AssistantSummaryCard.post.tsx / AssistantDetailModal.post.tsx / LogsTab.tsx in the canon idiom.

4 tabs: Overview · Active · Past · Activity (Runs + version events merged 2026-08-22 · Option B combined default · PRD update pending)Overview→Activity: “All activity →” header-row door + Breakdown row drill (?tab=activity&filter_assistant=)pagination ‹ Newer · Page N of M · Older › — platform convention, Load older retired (2026-08-22)empty Pulse = real chrome at zero, not get-startedfounder error copy · no Runs error bannerone page-lead focal (weight-200)no cost charts on Pulse — Usage owns that

The widths drawn here are samples of a fluid continuum, not the only states that exist — content (spacing, type, gaps, card/column widths) scales continuously between them, each clamp reading a named container. Structure (rail, row↔stack, grid columns) steps only at sm 640 · md 768 · lg 1024; radius, hairlines, and pills never scale. Kit: design-canon.md U8.

Reading order in this document is desktop first, then mobile, with a section's mobile frames side by side — a review-document convention only (this repo's design-canon.md § Mockup review reading order). Mobile 375px is still designed and scored FIRST in the /design ritual (kit canon U5/U8) — the two rules never conflate.

Part I · Active — build now
Overview
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview2
Active
Past
Activity
July 2026
Runs this week
142
588 this month
Attention
2
2 failed runs this month
View issues →
MTD Cost
$41.20
Runs $30.20 · AI Usage $11.00
See where it’s going →
Needs attention (4)All activity →
On-Brand Support #7Q2
A connected app disconnected — reconnect to keep it running
View issue
Retreat Booking #2M5
Booker owes deposit — was due Jul 12
Mark paid · Extend · Release
On-Brand Support #7Q2
“Can I get a refund for next week’s workshop?”
****4567 · AI wasn’t sure · 12m
View question
Guests are writing in Spanish
Their follow-ups went out in English
Add Spanish follow-ups · $10 →✕
Breakdown — July 2026
Every assistant, past and present — Runs and Cost are this month, Lifetime is all-time.
Status Active Paused Completed Stopped Failed
Assistant Status Runs▼ Cost Health Lifetime Avg Time Created Status since Last Run
On-Brand Support #7Q22x Failed 311 $24.88 94% 2,140 4.2s Aug 1 3d ago 12m ago
Niseko winter bookings #4K2 Active 142 $11.36 96% 918 2.1s Aug 1 3d ago 2h ago
Bali balance chasing #9T1 Paused by you 88 $6.20 91% 340 1.8s Aug 1 3d ago 1d ago
Retreat Booking #2M5 Active 5 $1.75 100% 5 0.6s Aug 1 3d ago Jul 17
Total 6 active 546 $44.19 95% 3,403 Aug 1 3d ago
‹ Prev Page 1 of 2 Next ›
prd-pl-pulse-dashboard.md · shipped Overview (aligned 2026-08-11 · style unify · tiles collapsed + list unify 2026-08-22)
  • Tile set (2026-08-22 — supersedes the 2026-08-11 four-tile lock): Runs this week (page-lead, spans half the row) · Attention · MTD Cost. The Health tile is RETIRED — CPO-confirmed ~90% redundant with Attention (a label computed off the SAME inbox count, linking to the same place). Its one non-duplicate fact, the monthly failed-run count, is now Attention’s sub-line. No filler takes the 4th slot: wallet balance’s one home is Billing (+ header), active-count was retired 2026-08-11 — the freed width goes to the focal instead, strengthening the page lead. Per-assistant Breakdown Health % stays.
  • MTD Cost is the spend handoff to Usage (See where it’s going →); no cost charts on Pulse.
  • Attention tile = lantern count (2026-08-22: the count aggregates every needs-you item, not only errors — red would over-claim; green check when clear); the tile is the same trio shape as every attention surface — statement (count) · info line (N failed runs this month) · quiet “View issues →” scrolling to the Needs-attention inbox below (an AGGREGATE door — the inbox, not one issue sheet). Empty = check only — no “All healthy”, no zero failed-runs line.
  • Budget nudge MOVED to Usage (2026-08-22): the no-budget safety-line strip (Pulse.tsx:2177 renders it here today) now lives on Usage beside the spend aggregates — money-safety belongs with the money page (Pulse/Usage/Billing split). Shipped placement is drift until the build lands; see usage.html frame 1.
  • Inbox order: Band A (assistant cannot run) on top, Band B leftovers under. Chat handoff is never the first row when an assistant is down.
  • ONE list family on Overview (2026-08-22): the Needs-attention inbox drops its card treatment (bg tints gone) and takes Breakdown’s table grammar — hairline rows, 12.5px scale, the same 2px severity left rail. The rail color IS load-bearing (lantern needs-you vs red critical — 2026-08-22 semantics) so it stays; everything else reads as the table’s family. Empty = the same structured row with one quiet line, never blank space (same principle as Breakdown’s tip-row empty).
  • Breakdown table lives on Overview — structured .bd-table with a 5-chip status filter row, severity left rail, activation Nx chip. Active tab is card-grid only.
  • Breakdown lists every instance from dashboardStats (no server-side status filter or limit) — filterable + paginated (Peyton 2026-08-22), no “See all →”. Sort stays in-table. Card wall for manage/pause lives on Active / Past. Anatomy + filter/pagination contract: frame 6.
  • Name click opens that instance’s detail modal (Pulse tab first) — never jumps the page tab to Active/Past. Same instance whether it’s Active or Past. Row click anywhere else drills into Activity — Assistant scope (4d), picker pre-set to that instance (filter model Layer 3). URL contract: ?tab=activity&filter_assistant=<id> — a NEW param. ?assistant= on /pulse already means “open the detail modal” (LaunchKitDeepLinkGate) — never reuse it for this drill.
  • Status filter chips: Active · Paused · Completed · Stopped · Failed — multi-select, icon-free (Needs-attention chip grammar), zero selected = all. ONE Paused chip covers both row labels (“Paused by you” + “Paused — needs you” — the row keeps the distinction). Created + Status since columns. Runs use quiet dots. One Needs attention inbox; wallet auto-pause counts.
  • Needs-attention rows follow the ONE attention pattern (Peyton 2026-08-22): error-class rows (disconnects, failures, system-pauses) are the trio — statement · info line · View issue → issue sheet 4b, which owns the one verb from the owning rule (2026-08-24: not Reconnect + Retry); no inline Reconnect shortcut skips the sheet. Chat leftovers use the same trio — quoted question · masked phone · why · View question → Issue sheet 1q. I handled it is not on the row. Records-VERDICT rows keep their domain actions (Mark paid / Extend / Release on the unpaid-deposit row) — a verdict is not an error, and burying it in an error sheet would be the wrong flow (records-layer read+verdict lock). See frame 3b.
  • “All activity →” doorway (repositioned 2026-08-22): it rides the Needs-attention section-header row, right-aligned after the hairline — the platform’s section-doorway convention (Billing’s “Wallet activity ··· View all →” eyebrow row), no longer a stray left-aligned link floating under the list. Still a plain door to the Activity tab — NOT “the rest of this list”: the rail stays its own full state inbox (paused/disconnected assistants, open escalations, unpaid bookings, pending launch reviews); most rail items have no corresponding event row at all, so the link never claims continuity with Activity’s Needs-attention filter.
  • RP5: lantern count on the Overview tab itself = open WhatsApp escalations (needs-you semantics, 2026-08-22) — distinct from the Attention tile count.
  • Customers section NOT in this build — deferred (#2656); future under Part II (F1–F3).
CPO lock 2026-08-24, sheet chrome amended 2026-08-24 — one Issue structure
  • Same sheet as 4b: title Issue, then badge + assistant (or AI action / category), then the other details. Height follows content, soft dim. This job is a leftover question, not a failed run — badge is lantern Needs attention, never red Error. Verbs are chat verbs, not Reconnect / Retry / logs.
  • The row never confirms handled. Verbs live here: Copy · WhatsApp · Open · then I handled it.
  • Phone is masked on the inbox / Slack / Activity. The number appears only in this founder-only sheet.
  • We do not list conversations. Activity keeps the event. Full Q&A is #4021.
MystFlo Platform Preview
· Peyton
Pulse
Overview
Active
Past
Activity
Needs attention (3)All activity →
On-Brand Support #7Q2
“Can I get a refund for next week’s workshop?”
****4567 · AI wasn’t sure · 12m
View question
Issue ✕
Needs attention On-Brand Support #7Q2

Can I get a refund for next week’s workshop?

AI handed this to you because it wasn’t sure.

24 Aug, 10:12 Open
Reply to

+1 555 123 4567

Copy WhatsApp
Last turns

Guest: Can I get a refund for next week’s workshop?

AI: I’m connecting you with Peyton.

AI is still answering everything else. Reply on WhatsApp or Slack, then mark this handled.

I handled it
1q — Issue sheet, chat leftover, desktop
  • Same structure as 4b: title Issue → badge + assistant → lead → why → timestamp → other details → action. Badge is lantern Needs attention (not Error). Lead is the exact question. Why is the AI action / category (“AI wasn’t sure”). Other details = Reply to + last 2–3 turns — not the archive.
  • Opened from Overview View question, Activity / assistant Pulse View issue on an unhandled handoff, or Slack View in MystFlo (/pulse?assistant=<id>&handover=<event_id>).
  • Primary verb is short: I handled it (pending) or Hand back to AI (already in it). Copy / WhatsApp are outline. Open is a quiet door to the assistant — it does not confirm handled. No Reconnect / Retry / logs on this job.
Pulse
Your active assistants
Overview
Active
Past
Activity
August 2026
Runs this week
0
0 this month
Attention
✓
MTD Cost
$0.00
Runs $0.00 · AI Usage $0.00
See where it’s going →
Needs attentionAll activity →
Nothing needs you right now.
Breakdown — August 2026
Every assistant, past and present — Runs and Cost are this month, Lifetime is all-time.
Status Active Paused Completed Stopped Failed
Assistant Status Runs Cost Health Lifetime Avg Time Created Status since Last Run
No assistants yet Browse assistants →
Total 0 active 0 $0.00 — 0
Overview empty — keep the list chrome at zero (Peyton 2026-08-18 · V3 Mark 2026-08-18 · tiles 2026-08-11 · list tabs 2026-08-15)
  • Do NOT swap any Pulse tab for a get-started guide. A brand-new / guest / no-stats Overview still shows the real metric shell at 0 / ✓ / $0.00 (3-tile set, 2026-08-22) so the founder sees what this page will look like once something runs. PulseGetStarted is retired. No budget nudge here — it moved to Usage.
  • Needs-attention and Breakdown keep the same list/table you flip into — one empty structured rail row / one empty first table row with the headers still standing — never blank space, not a flush line, not a boxed invite. The status filter chips stand too (inert at zero rows); pagination hides — everything fits on one page. Door lives in the Breakdown row: “No assistants yet · Browse assistants →” (/assistants).
  • V3 Mark once: the full plant (stem included) sits in that empty first row, with the Thread under the copy. Not a centered “hire a double” empty, not lantern (nothing needs you), not a second Mark on the inbox rail. The Mark leaves when the first assistant lands.
  • Totals stay at zero (0 active · 0 · $0.00 · —). Guests see this same Overview chrome (Preview Parity).
  • Active / Past keep their real tab chrome too — quiet one-liner. Empty Activity keeps the FULL feed header (source strip + Needs-attention toggle + quiet 0 events + Source · Event · When field header + ledger hairline), left-aligned to the Pulse title, with the quiet line IN the first ledger row: “Nothing yet. Runs and Brain updates land here.” Pagination still hides at zero. (Peyton 2026-08-23; AC-PULSE-25 ↗; frame 2b).
Content truth — restored from src/pages/Pulse.tsx (aligned 2026-08-11 · style unify)
  • Status FILTER row (Peyton 2026-08-22 — replaces the decorative legend), then sortable table (click any column header; caret marks active sort), ending in a Total row, then Prev/Next pagination.
  • Lives on the Overview tab (tertiary after metrics + Needs-attention) — Active tab is card-grid only. Frame 1 embeds the same table; this frame is the anatomy close-up.
  • Row anatomy: severity left border (red error / lantern needs-you / transparent) + optional Nx activation chip when activation_count > 1.
  • Status column = left-aligned (dot + label), same as Assistant — never center. Numbers stay right.
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview2
Active
Past
Activity
Card wall lives on Active — not repeated here
Breakdown — July 2026
Every assistant, past and present — Runs and Cost are this month, Lifetime is all-time.
Status Active Paused Completed Stopped Failed
Assistant Status Runs▼ Cost Health Lifetime Avg Time Created Status since Last Run
On-Brand Support #7Q22x Failed 311 $24.88 94% 2,140 4.2s Aug 1 3d ago 12m ago
Niseko winter bookings #4K2 Active 142 $11.36 96% 918 2.1s Aug 1 3d ago 2h ago
Bali balance chasing #9T1 Paused by you 88 $6.20 91% 340 1.8s Aug 1 3d ago 1d ago
Deposit chase #8P3 Paused — needs you 24 $3.10 88% 110 3.4s Aug 1 3d ago 3d ago
Retreat Booking #2M5 Active 5 $1.75 100% 5 0.6s Aug 1 3d ago Jul 17
Total 6 active 570 $47.29 94% 3,513 Aug 1 3d ago
‹ Prev Page 1 of 2 Next ›
Breakdown table anatomy
  • Every column header clickable; caret = active sort (Runs, descending, here).
  • Status = founder-facing words from resolveAssistantStatus — never raw DB strings. The ROW keeps the full distinction — “Paused by you” (neutral dot) vs “Paused — needs you” (lantern dot); only the FILTER collapses them into one Paused chip.
  • Severity left rail mirrors the cards; 2x chip when reactivated more than once.
  • Total row sums Runs/Cost/Lifetime, averages Health — active assistants only.
  • vs Activity tab: Breakdown = one row per assistant instance (month aggregates). Activity = one row per event (runs + Brain work). Table chrome here, ledger rows there.
  • Every instance ever, filterable + paginated (Peyton 2026-08-22 — supersedes the same-day “current month only, no pagination” call, whose premise was wrong: dashboard-stats.ts queries assistants by user_id alone — no status filter, no limit). Row set = all instances, any status, all time. The status filter is 5 multi-select .assist-filter chips — Active · Paused · Completed · Stopped · Failed — icon-free like the Needs-attention toggle (T1203); zero selected = unfiltered, no “All” chip. Pagination = ‹ Prev · Page N of M · Next › (the 10g non-chronological variant), hidden at one page. Runs/Cost columns stay month-scoped, Lifetime all-time — the caption states this. Still NO month picker: per-run history stays Activity’s, spend trend Usage’s (Clean Split).
  • No overflow link — pagination is the browse path. Name click → detail modal (frame 3b when Failed); row click anywhere else → Activity, Assistant scope pre-filtered to the instance (?tab=activity&filter_assistant=<id> — never ?assistant=, that param already opens the modal). Manage/pause card wall stays on Active/Past.
MystFlo Platform Preview
Workspace
Support
Account
Pulse
Your active assistants
Overview2
Active
Past
Activity
July 2026
Runs this week
142
588 this month
Attention
2
2 failed runs
View issues →
MTD Cost
$41.20
Needs attention (2)All activity →
On-Brand Support #7Q2
A connected app disconnected — reconnect to keep it running
View issue
Retreat Booking #2M5
Deposit overdue — Jul 12
Mark paid
Breakdown — July 2026
Every assistant, past and present — Runs and Cost are this month, Lifetime is all-time.
Status Active Paused Completed Stopped Failed
Assistant Status Runs▼ Cost Health Lifetime
On-Brand Support #7Q22x Failed 311 $24.88 94% 2,140
Niseko winter bookings #4K2 Active 142 $11.36 96% 918
Bali balance chasing #9T1 Paused by you 88 $6.20 91% 340
Total 6 active 546 $44.19 95% 3,403
‹ Prev Page 1 of 2 Next ›
Tablet 768 — the only tier where shell and content disagree
  • Shell = desktop: 768 is the app’s mobile breakpoint (use-mobile.tsx) — full header + rail render, rail collapsed to its 64px icon width.
  • Content = mobile: metric grid stays 2-col — no sm: override between grid-cols-2 and the desktop lg:grid-cols-4.
  • 3-tile set (2026-08-22): focal spans both columns, Attention + MTD Cost pair below. Overview-hosted Breakdown table (Avg Time / Last Run dropped below sm; horizontal scroll if needed).
  • “All activity →” rides the Needs-attention header row (right-aligned, 2026-08-22) + Breakdown row drill into Activity (?tab=activity&filter_assistant=) — same contract as desktop frame 1.
  • Customers NOT in this build — deferred (unmounted, #2656); future vision under Part II.
Pulse
Your active assistants
Overview2
Active
Past
Activity
July 2026
Runs this week
142
588 this month
Attention
2
MTD Cost
$41.20
Needs attention (3)All activity →
On-Brand Support #7Q2
A connected app disconnected — reconnect to keep it running
View issue
Retreat Booking #2M5
Deposit overdue — Jul 12
Mark paid
Guests are writing in Spanish
Add Spanish follow-ups · $10 →
✕
Breakdown
Active Paused Completed Stopped Failed
Assistant Status Runs▼ Cost Health
On-Brand Support #7Q2 Failed 311 $24.88 94%
Niseko winter #4K2 Active 142 $11.36 96%
Total 6 546 $44.19 95%
‹ Prev Page 1 of 2 Next ›
Mobile 375 — Overview populated
  • Same 2-col metric grid as code (grid-cols-2 lg:grid-cols-4) — focal spans both columns; Attention + MTD Cost pair below (3-tile set, 2026-08-22).
  • Overview-hosted Breakdown table (compact columns; horizontal scroll) — same vocabulary as desktop, not a competing row list; the Needs-attention inbox shares its grammar (hairline rows + severity rail, no card tint). Status filter chips wrap to a second line at 375; Prev/Next pagination below the table, same as desktop.
  • “All activity →” door rides the Needs-attention header row (right-aligned) + Breakdown row drill into Activity (?tab=activity&filter_assistant=) — same contract as desktop frame 1; 44px touch row is the tap target.
  • Customers NOT in this build — deferred (unmounted, #2656); future vision under Part II.
2Overview empty — zero metrics · mobile 375px
Pulse
Your active assistants
Overview
Active
Past
Activity
August 2026
Runs this week
0
0 this month
Attention
✓
MTD Cost
$0.00
Needs attentionAll activity →
Nothing needs you right now.
Breakdown
Active Paused Completed Stopped Failed
Assistant Status Runs Cost Health
No assistants yet Browse assistants →
Total 0 active 0 $0.00 —
Overview empty — 375
  • Same zero-metrics shell as desktop — never a get-started infographic on any Pulse tab.
  • Needs-attention empty rail + Breakdown empty table (compact columns). Door is the row link. The Mark sits once in that row. List tabs: frame 2b.
2bActive empty — mobile 375px
Why this exists: a WhatsApp guest who tells a booking assistant “I already paid” is promised a check with the host — today nothing in Pulse shows it, so the row looks identical to a guest who said nothing. This adds a signal to the EXISTING Needs-attention booking row (AttentionPanel.tsx BookingRow). No new tab, no new surface. Four states: plain pending (reference) · claimed (slice 1) · claimed + Not received (slice 2) · roster status word.
1pSlice 1 — claimed row on top, plain pending row for reference · desktop 1180
Pulse
Your active assistants
Overview1
Active
Past
Activity
Runs this week · Attention · MTD Cost tiles — unchanged, as frame 1
Needs attention (4)All activity →
Maya RahmanSays they paid
2 seats · USD 480 · due Oct 12 · maya@saltwaterstudio.co
Told the assistant 2 hours ago
Mark paid
Priya NairOverdue — was due Oct 2
1 seat · USD 240 · priya.n@gmail.com
4d ago
Mark paid
On-Brand Support #7Q2
“Can I bring my partner to the Saturday session?”
****4567 · AI wasn’t sure · 12m
View question
Jon Park
1 seat · USD 240 · due Oct 12 · jon.park@outlook.com
1d ago
Mark paid
Breakdown table — unchanged, as frame 1
1p — Slice 1 · the claim shows up (desktop)

As a host, when a guest tells my booking assistant they already paid, I see it at the top of Needs attention so I can check my bank and confirm them.

  • AC: a pending booking with an open guest payment claim renders the lantern badge Says they paid, the lantern rail, and the line Told the assistant {time ago}. NEW (PRD debt — prd-pl-pulse-dashboard.md needs the row added to its attention table, line ~524)
  • AC: claimed rows sort first in the booking group — ahead of overdue rows, which keep their shipped slot ahead of chat questions; plain pending rows stay last. NEW (PRD debt)
  • AC: Mark paid is unchanged — same button, same confirm, same learnPaid path. NEW (PRD debt)
  • AC: copy never says Paid / Payment received / Verified — the host is the only one who confirms money (AttentionPanel copy guardrail).
  • Design: badge is the exact twin of the shipped Overdue badge (Badge variant="lantern"); rail is the same lantern-dim rail. No new colour, no icon.
  • Design: the claim line REPLACES the quiet booked-time line — one time fact per row, the newer one wins. Rendered in fg-55 (a step above the time line) so it reads as the reason, not metadata.
  • Design: claimed + overdue on the same row → ONE badge, Says they paid; the subline keeps “was due Oct 2”. Two lantern badges on one row would be noise.
1p2Slice 2 — same claimed row + Not received · desktop 1180
Pulse
Your active assistants
Overview1
Active
Past
Activity
Runs this week · Attention · MTD Cost tiles — unchanged, as frame 1
Needs attention (4)All activity →
Maya RahmanSays they paid
2 seats · USD 480 · due Oct 12 · maya@saltwaterstudio.co
Told the assistant 2 hours ago
Not receivedMark paid
Priya NairOverdue — was due Oct 2
1 seat · USD 240 · priya.n@gmail.com
4d ago
Mark paid
On-Brand Support #7Q2
“Can I bring my partner to the Saturday session?”
****4567 · AI wasn’t sure · 12m
View question
Jon Park
1 seat · USD 240 · due Oct 12 · jon.park@outlook.com
1d ago
Mark paid
Breakdown table — unchanged, as frame 1
1p2 — Slice 2 · the host can say “not received” (desktop)

As a host who checked and found no money, I can dismiss the claim so the row goes back to a normal pending booking — and if the guest says it again, it comes back.

  • AC: Not received is a quiet text button left of Mark paid; tapping it clears the claim immediately, no confirm dialog (it is reversible — the next guest claim reopens it). NEW (PRD debt)
  • AC: after dismissal the row renders exactly as frame 1p’s Jon row (neutral rail, no badge, booked-time line) and re-sorts to its normal slot. NEW (PRD debt)
  • AC: a later claim from the same guest reopens the badge with the new time. NEW (PRD debt)
  • Design: Mark paid stays the rightmost, filled verb; Not received has no border or fill — it must never compete with the real verdict.
  • Design: this is a records verdict, not an edit — Pulse stays read + verdict (records-layer lock). No text entry, no reason picker.
  • Open for build: the guest-facing reply after Not received is out of scope for this frame (copy owner: chief-writer).
1p-recRecords roster — “says they paid” status · desktop (right slot crop)
Retreat Booking #2M5 · Pulse tab · right slot (rest of tab as frame 3)
AttendeesSee all 27 ›
Maya Rahman 2 spots · told the assistant 2h agosays they paidMark paid⋯
Jon Park 1 spot · link sent Oct 5awaiting paymentMark paid⋯
Kenji Ito 1 spot · booked Oct 4paid
Lars Berg 1 spot · booked Oct 3paid
4 of 27 · needs-verdict first, then newest
1p-rec — Records roster status (desktop, assistant detail → Pulse tab right slot)

As a host scanning my attendee list, I can tell who says they paid apart from who hasn’t said anything.

  • AC: statusFor in useAssistantRecords.ts returns says they paid with tone warning when the booking carries an open claim. NEW (PRD debt)
  • AC: claimed rows sort first (the roster is already needs-verdict first). Verdicts unchanged: Mark paid · ⋯. NEW (PRD debt)
  • Design: amber dot + word, NOT lantern — the roster rule in frame 3 holds (status = dot + word, no lantern; the tab’s one lantern moment is owned by D-5). The word carries the difference.
  • Open: whether the roster’s ⋯ menu also offers Not received in slice 2 — not drawn, Peyton’s call.
Pulse
Your active assistants
Overview1
Active
Past
Activity
Needs attention (4)All activity →
Maya RahmanSays they paid
2 seats · USD 480 · due Oct 12 · maya@saltwaterstudio.co
Told the assistant 2 hours ago
Not receivedMark paid
Priya NairOverdue — was due Oct 2
1 seat · USD 240 · priya.n@gmail.com
4d ago
Mark paid
On-Brand Support #7Q2
“Can I bring my partner to the Saturday session?”
****4567 · AI wasn’t sure · 12m
View question
Jon Park
1 seat · USD 240 · due Oct 12 · jon.park@outlook.com
1d ago
Mark paid
1p-t — Tablet 768 (slice 2 shown)
  • Same row as desktop at the 1c column width — the row is fluid, nothing restructures at 768. Actions stay inline right of the text.
  • Slice 1 at 768 = this frame without Not received.
  • Roster status (1p-rec) at 768 = frame 3’s right slot, unchanged except the status word + sort — no separate drawing.
1pSlice 1 · mobile 375px
Pulse
Your active assistants
Overview1
Active
Past
Activity
Metric tiles — unchanged, as 1-m
Needs attention (4)All activity →
Maya RahmanSays they paid
2 seats · USD 480 · due Oct 12
Told the assistant 2 hours ago
Mark paid
Priya NairOverdue — was due Oct 2
1 seat · USD 240
4d ago
Mark paid
On-Brand Support #7Q2
“Can I bring my partner to the Saturday session?”
****4567 · AI wasn’t sure · 12m
View question
Jon Park
1 seat · USD 240 · due Oct 12
1d ago
Mark paid
Breakdown — unchanged, as 1-m
1p-m — Slice 1 · 375
  • Same order and badge as desktop. The booker email drops off the subline (truncates on real data).
  • Mark paid stays beside the text on 375 (shipped layout) at a 44px touch height.
1p2Slice 2 · mobile 375px
Pulse
Your active assistants
Overview1
Active
Past
Activity
Metric tiles — unchanged, as 1-m
Needs attention (4)All activity →
Maya RahmanSays they paid
2 seats · USD 480 · due Oct 12
Told the assistant 2 hours ago
Not receivedMark paid
Priya NairOverdue — was due Oct 2
1 seat · USD 240
4d ago
Mark paid
On-Brand Support #7Q2
“Can I bring my partner to the Saturday session?”
****4567 · AI wasn’t sure · 12m
View question
Jon Park
1 seat · USD 240 · due Oct 12
1d ago
Mark paid
Breakdown — unchanged, as 1-m
1p2-m — Slice 2 · 375
  • Two verbs don’t fit beside the text at 375, so the claimed row’s actions drop to their own right-aligned line (both 44px). Other rows keep the shipped inline button.
1p-recRecords roster · mobile 375px
Retreat Booking · Pulse tab (rest as 3-m)
AttendeesSee all 27 ›
Maya Rahman 2 spots · told the assistant 2h agosays they paidMark paid⋯
Jon Park 1 spot · link sent Oct 5awaiting paymentMark paid⋯
Kenji Ito 1 spot · booked Oct 4paid
Lars Berg 1 spot · booked Oct 3paid
4 of 27 · needs-verdict first, then newest
1p-rec-m — roster · 375
  • Same shipped 375 roster: verdict pair on its own 44px line. Only the status word + sort change.
Lists
2bActive — account-empty
Pulse
Overview
Active
Past
Activity
↻
No assistant activated yet
Browse assistants →
2bPast — one quiet empty
Pulse
Overview
Active
Past
Activity
◷
No previous assistants
Once you stop an assistant, it will appear here.
2bActivity — empty feed · full page (redrawn 2026-08-23 — the header stands, only the list is empty)
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention 0 events
SourceEventWhen
Nothing yet. Runs and Brain updates land here.
List tabs empty — keep the chrome, never a guide (Peyton 2026-08-15)
  • PulseGetStarted is retired. Guidance lives on Assistants + the welcome email — Pulse shows what the page will look like at zero.
  • Active account-empty: quiet centered line “No assistant activated yet” + text link “Browse assistants →”. Tab-empty (has past) stays “No active assistants. Reactivate one from Past.”
  • Past: one quiet state for never-had-one and tab-empty — “No previous assistants” / “Once you stop an assistant, it will appear here.”
  • Activity (redrawn 2026-08-23 — Peyton rejected production’s centered “Nothing yet” that dropped the list): the page is left-aligned to the Pulse title — never a centered max-w column (mx-auto max-w-[720px]/[900px] in PulseActivityTab.tsx is the drift, empty AND populated). At zero the FULL list header stands: All │ Assistant │ Brain strip + the icon-free Needs-attention toggle + a quiet 0 events count + the .al-ledger hairline. A field header row (.al-row.al-head: Source · Event · When) teaches what will land — empty only; populated stay a ledger with no thead. The quiet line sits IN the first ledger row (.al-row.al-empty), left-aligned: “Nothing yet. Runs and Brain updates land here.” Pagination still hides at zero (10g: hidden at one page). AC-PULSE-25 ↗ convention carries over; the old “No runs yet” table row stays retired with the Runs tab.
  • Overview’s door lives in the empty Breakdown row (“Browse assistants →”). Active’s link is the same text door, not a second pill.
768 not yet drawn for this flow. Desktop and 375 are the contract.
Pulse
Overview
Active
Past
Activity
↻
No assistant activated yet
Browse assistants →
Active empty — 375
  • Quiet centered line + text link. No step sequence. Tab-empty (has past) points to Past instead.
2bPast empty — mobile 375px
Pulse
Overview
Active
Past
Activity
◷
No previous assistants
Once you stop an assistant, it will appear here.
Past empty — 375
  • One quiet state for never-had-one and tab-empty. No CTA — stopping an assistant is the only way in.
2bActivity empty — mobile 375px
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention0 events
SourceEventWhen
Nothing yet. Runs and Brain updates land here.
Activity empty — 375 (redrawn 2026-08-23)
  • Populated 4-m minus the rows, nothing else changes: m-tab bar → source strip → Needs-attention toggle → quiet 0 events count → .al-ledger hairline with Source · Event · When field header + ONE quiet left-aligned row (.al-row.al-empty). Pagination still hides at zero.
  • Never a centered line replacing the list, never a 4-step guide over the feed.
3Assistant detail modal — mobile 375px (Pulse tab, default)
Active tab
Active
Pause Stop
$0.08
On-Brand Support #7Q2
On-Brand Support
Runs
311 · 94% · 216 customers · 12m ago · $24.88
Details →
Paused
Resume Stop
$1.75
Bali balance chasing #9T1
Direct Booking
Runs
88 · 91% · 12 customers · 1d ago · $6.20
Attendeeswho's coming, who still owes you12 booked · 3 left ›
Details →
Pause/Resume and Stop are always icon+label, same top-right position on every card; Pause shows while active, Resume swaps in once paused.
PU4 · PU5 · #1981 — Active-tab card states
  • Manual pause reads NEUTRAL — the founder chose it, no action needed; auto-paused / connection variants get the lantern and red reason lines (frame 1 Needs-attention). One badge color axis, severity-coded, shared resolver (lib/assistantStatus.ts).
  • "Details →" + card height identical across this frame’s three states (PU4/PU5); "Details →" stays the card’s only entry point.
  • Customer count (216 / 12) = a new VALUE on the existing #1981 quiet metrics line — never a link, pill, or second doorway; shows only for assistants with customer activity (Past-tab card below has none — line unchanged).
  • Records slot IN the card (Peyton 2026-09-02, R36 — supersedes the under-card RecordsEntryRow): for a records assistant (the Direct Booking card here) the noun · count line ("Attendees · 12 booked · 3 left ›"; sold out = amber dot + "sold out · N waiting") is the card's LAST zone, after Runs — inside the tile, so the wall stays equal-height and nothing hangs under a card. Collapses to zero on a non-records card (the On-Brand Support card above is unchanged); never renders for guests. Tap → detail sheet on Pulse with the records sheet open (?assistant=…&records=open). Master frames: assistant-lifecycle.html 8d. Not built.
5Pause / resume + reactivate — mobile 375px (Past tab)
Past tab
Stopped
$0.08
Product listings — summer drop #P88
Product Listing Generator
Stopped Jul 02
Runs
31 · 100% · $2.40
Details →
Past card
  • Reactivate row = in-card hairline-top footer — never a detached button below the card.
  • "Reactivated ×2" + Stopped date = quiet text, not extra pills.
  • Start fresh opens the Activation Wizard pre-filled with the previous configuration.
  • "Details →" in the same bottom-right position as every card, right above the Reactivate footer.
5Pause / resume + reactivate — mobile 375px (Reactivating…)
Reactivating…
Stopped
Product listings — summer drop #P88
Product Listing Generator
Details →
Reactivate preflight
  • Quick preflight (apps → Brain → ready) before flipping back to Active.
  • No re-teaching — same instance, run/health history carried forward.
7Reactivated instance — mobile 375px (Lifetime history · no Overview metrics)
Pulse
Your active assistants
Product listings — summer drop #P88 Active✕
Pulse Overview Personalize Connect
Lifetime 3 periods 78 runs · $6.10 ▾
#3Jul 18 – now 2 days Active
#2Jun 30 – Jul 10 10 days Stopped
#1Jun 2 – Jun 14 12 days Stopped
RP3 — Overview tab (Peyton 2026-08-11)
  • No metrics on Overview. Dropped the Since Activated / RUNS hero — run counts + health live on the Pulse tab (and page-level Overview KPIs), not duplicated here.
  • “Lifetime” collapsible (▾, shown expanded); appears only after more than one activation — every past period with date range, duration, Active/Stopped state. The one place per-stint history shows.
  • Same instance, same ID chip (#P88) across every period.
8Completed card — mobile 375px
Active tab
Completed
$1.20
Studio photos — catalog refresh #C31
Product Listing Generator
Listings doc ↗ Image pack ↗
Details →
RP4 — restored from AssistantSummaryCard.post.tsx
  • One-shot generation assistants (Product Listing Generator and similar) park at Completed — NEUTRAL badge, same taxonomy as manual pause (finished, not broken).
  • Footer: latest artifact links, collapsed “Previous versions” disclosure, Run again (same per-run price), quiet Archive (moves the card to Past).
  • Same card shell + height as every other Active-tab card — only badge, meta line, footer content change.
Detail
R30 · D-5 · R17 · R31 — tab set LOCKED (2026-07-23)
  • Tabs: Pulse · Overview · Personalize · Connect — Pulse first and default (R30 · D-5).
  • Pulse = the renamed Activity tab (R17) — contents unchanged (metrics band, status, run feed, health rail).
  • Try dropped from the post tab set (R31) — it never had a distinct built frame, only an inert tabstrip label.
  • 2026-08-22 (CPO + Chief Designer, PR #3763) — ONE Pulse-tab body template, replacing the two divergent bodies Peyton flagged: exception row (if any) → fixed four metrics (+1 optional type append) LEFT → the type's ONE slot RIGHT → activity (24h/7d/30d chips · the EXACT Activity-tab .al-ledger row grammar with the source mark dropped · 5 rows + See all ›). At desktop/tablet width, metrics + slot sit as a 2-column pair; activity runs full-width below (Peyton review 2026-08-22). Archetype: assistant-detail-tabs.md.
  • R37 (Peyton 2026-09-03) — "right column as principle." The right column is THIS TYPE'S slot: records fill it roster-first (then the booking link/share/flyer), chat fill it with the wa.me share row alone, generation now fills it with a piece-readiness preview + Open kit › (amends the prior "generation-kit keeps LaunchKitReviewSheetBody as its full body" rule — that sheet is still where Open kit › goes, it just no longer replaces the whole tab). The range chips + ‹ Newer · Page N of M · Older › pagination that used to run below the ledger now live one door over, in the NEW nested Activity sheet. Canonical drawing: assistant-lifecycle.html 9b / 9b-x / 9b-r / 9b-k / 9f; this file seats it in the Pulse page.
MystFlo Platform Preview
· Peyton
Pulse
Your active assistants
Niseko winter bookings #4K2✕
Pulse Overview Personalize Connect
Runs this month142
Health96%
Last run2h ago
Cost this month$11.36
Bookings taken this month38
Attendees 30 seats · 24 booked · 6 left · synced 2 min agoSee all 27 ›
Sofia Marin 2 spots · link sent Feb 3awaiting paymentMark paid⋯
Kenji Ito 1 spot · booked Feb 4paid
Maria Alvarez 2 spots · booked Feb 4paid
Lars Berg 1 spot · booked Feb 3paid
Anya Petrova 1 spot · booked Feb 2paid
5 of 27 · needs-verdict first, then newest · 3 on the waiting list
Your booking link
mystflo.com/b/niseko-winter
WhatsAppXThreadsCopy link
MystFlo
Niseko winter
Scan to book on WhatsApp
Flyer card · 2048px
Print and social · Save image
Recent activitySee all ›
24h7d30d
Guest needs you — AI wasn’t sureNeeds attentionView issue12m
Took Sofia’s booking — deposit requested$0.08 · 1.2s4:12pm
Answered Maria — dates for February$0.08 · 0.9s1:03pm
Sheet sync failed — Google Sheets didn’t respond in timeNeeds attentionView issueJul 17
Resumed by youJul 17
This assistant’s activity.
Desktop · Pulse tab — ONE template, typed right-slot content (R37, Peyton 2026-09-03 — "right column as principle" — supersedes the 2026-08-22 two-divergent-bodies fix and the 2026-09-02 full-width records band)
  • Unified order, every assistant type: (a) top exception row if any (D-5 “Waiting on you” OR connection-error banner — none here) → (b) the FIXED four metric rows Runs (this period) · Health · Last run · Cost MTD LEFT, same four, same order, never varying by type; a type MAY append ONE outcome row after them (here: Bookings taken) — append only, never replace/reorder → (c) the type's ONE slot RIGHT → (d) Recent activity, full-width below. Generation-kit assistants now use this SAME template too (see assistant-lifecycle.html 9b-k) — the whole-tab LaunchKitReviewSheetBody swap is amended.
  • Right slot, records fill — roster FIRST (R37): for an assistant that passes the records test (Workshop / Event / Retreat Booking, Checkout, Waitlist), the noun-titled roster (Attendees · Orders · Signups) is the FIRST item in the RIGHT slot — ≤5 rows, needs-verdict first then newest, verdicts only on rows that can take one (Mark paid · Extend · Release), status = dot + word, no lantern (an unpaid booking is pending/amber; D-5 owns the tab's one lantern moment) — then the booking link + R33 share row — WhatsApp · X · Threads · Copy link underneath, never an ad-hoc wa.me-only card. Waitlist: launch-broadcast while pending approval, signup link once live. Chat/support (On-Brand Support + Conversational Checkout) fill the same slot with a direct wa.me/{phone} share row alone — see 3-chat. Other types stay EMPTY. Exception verbs (Reconnect/Resume) still live on the banner (frame 3b). Replaces the three shipped one-job-three-ways patterns: the “What’s Next” card, BookingShareLinks on Pulse, and the standalone WhatsApp “Item 2” card.
  • See all N › on the roster header opens the full list as a nested scrollable sheet over this tab (nestedBackdrop, broadcastCloseAll={false}, FilterChipGroup + PaginationBar), deep-linked as ?assistant=<id>&records=open (param name = CTO build decision). Non-records assistants render the ordinary chat/empty slot, no gap. Master frames: assistant-lifecycle.html 9b-r / 9e. Not built.
  • QR is a branded flyer card, open on first paint (Peyton 2026-08-27): the flyer panel is always visible — no chevron, no collapse. White paper card with the small Mark + MystFlo, the workshop / event / retreat name, the scan matrix, and “Scan to book on WhatsApp”. Save image downloads a 2048×2560 PNG (print and social). Same card grammar for chat (3-chat) and the downloaded asset (3-card). Never a raw black-and-white matrix, never a new sprite, never lantern on the card. ONE home for every R33-bearing slot; never its own Quick-actions row, never a fifth share destination, never dropped.
  • 2-column pair at desktop/tablet (Peyton review 2026-08-22): metrics left (~45%) · the type's slot right (~55%), on one grid; Recent activity runs full-width below the pair — a ledger reads better wide and carries its own columns. The old single 640px column left a dead zone on the right; retired. 375 stays the single-column stack.
  • Activity on the tab is a 5-row PREVIEW, not the record (R37, 2026-09-03). 24h / 7d / 30d range chips STAY on the tab (real windows on the 5-row preview); the ‹ Newer · Page N of M · Older › pagination bar is REMOVED — it now lives in the nested Activity sheet (assistant-lifecycle.html 9f), opened from See all › on the sec-marker. Rows stay the EXACT Activity-tab ledger grammar (.al-ledger/.al-row, frame 4d): flat rows · event in founder words · quiet fact ($cost · runtime) or .al-att+View issue · time right, source mark dropped. No search input (Peyton 2026-08-22 — “filter is enough for now”). No day-group headers, no per-row status dots; never status-word-led.
  • Failed = founder one-liner + View issue → sheet 4b (same quiet-text action as 4d — no inline verb pile). No code dump.
  • Unhandled chat handoff (2026-08-24): same ledger, source mark still dropped. Subject Guest needs you — {why} · lantern Needs attention · View issue → Issue sheet 1q — not a conversation list, not I handled it on the row. Same event as account Activity 4c.
R34 amended 2026-08-27 — chat/support get the same share row as booking
  • Same Pulse-tab body as 3. Metrics stay the fixed four (no Bookings taken). Quick actions fills with a direct https://wa.me/{phone} — no booking prefill. Guests scan or tap and land in a chat with the founder number.
  • Same R33 destinations + branded flyer card, open on first paint (no chevron). CTA on the card is Scan to chat on WhatsApp. Title is the assistant name (here: On-Brand Support).
  • Empty phone → quiet “Connect WhatsApp to generate your chat link and QR.” Conversational Checkout uses this same slot (same chat QR, assistant name as title).
MystFlo Platform Preview
· Peyton
Pulse
Your active assistants
On-Brand Support #9P3✕
Pulse Overview Personalize Connect
Runs this month86
Health98%
Last runChatting now
Cost this month$6.40
Quick actions
Your WhatsApp chat — guests scan or tap to message you.
https://wa.me/16318181081
WhatsAppXThreadsCopy link
MystFlo
On-Brand Support
Scan to chat on WhatsApp
Flyer card · 2048px
Print and social · Save image
REVISIT · follow-up languages (#5130, 2026-09-20) — the free proof + the one REMIND
Three Pulse touchpoints, none of them a gate: the activity ledger carries the guest's language token on chat rows; one quiet meta line marks a follow-up that fell back to English; and ONE evidence-based Attention remind row (“Guests are writing in Spanish · Add Spanish follow-ups · $10 →”) sits in the real inbox on frame 1 / 1-m. Home for adding a language is the WhatsApp connection detail — never here.
connects.html #f6b — Follow-up message languages ↗
Chat · ****4471Answered a room question Bahasa Indonesia · ID2m
Chat · ****2208Deposit reminder sent Español · ES → English1h
Follow-ups to this guest go in English until you add Spanish → Connects
Chat · ****9930Handed to you — refund question3h
  • Story — As a founder, I see which language each guest chats in and the one time a follow-up had to drop to English, so I know when adding a language would actually matter.
  • Backend reconcile (#5166) — BUILD GAP, drawn ahead of data. Nothing shipped feeds the two ledger devices on this card: the resolver returns fellBack to its send-site caller and no caller persists it, and activity/run rows carry no language field. The per-row token could be derived from chat_sessions.metadata.thread_language (steps 1–4) if the feed joined the session; the “→ English” fallback line has no source at all. Both stay drawn as the target, both are outside the #5166 build and the F1–F5 spec — the Attention remind row above is the only Pulse device #5166 actually backs.
  • Acceptance — NEW (PRD debt) — chat ledger rows carry the detected language as a quiet token; rows in English carry none. · NEW (PRD debt) — a Meta-approved follow-up sent in English because the guest's language isn't added renders the token as {language} → English plus one meta line: “Follow-ups to this guest go in English until you add {Language} → Connects” — the link lands on the WhatsApp detail (6b). · NEW (PRD debt) — no per-row action, no count, no lantern; this is information, not an ask.
  • Acceptance — REMIND — NEW (PRD debt) — the Attention row appears only on evidence (a non-English thread whose Meta-approved follow-up fell back to English), once per language per account, dismissible (✕), deep-links to Connects → WhatsApp (6b); never on a schedule, never lantern (it is an offer, not a failure), never red. Copy: “Guests are writing in Spanish” · “Add Spanish follow-ups · $10 →”. · Backend reconcile (#5166) — evidence row = whatsapp_template_language_demand (one per user × language; written by the send-time resolver only when the guest's language is NOT purchased — a purchased-but-pending language never creates demand). Render when dismissed_at IS NULL and the language is not in the account's purchased[] (the resolver stops bumping a row once bought but never deletes it — the client must apply the second filter). Language word = catalog.label; price = the same price_usd the Connects list reads. ✕ → POST whatsapp?action=template-languages/dismiss { language }; dismiss is permanent for that language — the 30-day re-surface in architecture §7 is an open question, NOT built, so the frame promises nothing beyond “dismissible”. The row carries no count by rule, though fallback_count / last_seen_at exist if a later ruling wants one. Build gap: no API returns these rows today — the spec's dashboard-stats.language_demand field (F5) was not shipped in #5166; the FE either reads the table under its own RLS (SELECT own is granted) or the field gets added. attention_tile_count does not include this row either — the “Needs attention (4)” count drawn here assumes it will.
  • Design notes — Token is a hairline pill in the row's own type scale (fg-40), never a colored badge. Meta line is fg-30, one sentence, ≤20 words. Full tab is drawn once in the lifecycle master (9b); this card is the slot delta only.
The asset founders paste on a flyer or story (Peyton 2026-08-27)
  • White paper. Black ink. Small full Mark (stem on) + MystFlo. Program or assistant name. High-contrast QR. Quiet uppercase CTA.
  • 2048×2560 (4:5) so it scales down for a flyer or an IG story without the matrix going soft. No lantern. No new sprite. Booking CTA = Scan to book on WhatsApp. Chat CTA = Scan to chat on WhatsApp. Signup CTA = Scan to join.
MystFlo
Niseko winter
Scan to book on WhatsApp
Stay in the assistant (2026-08-24)
  • The founder is already in this instance’s Pulse tab. View issue on a needs-attention row opens the Issue sheet over this modal — it does not jump to the account Activity tab.
  • Same sheet as 4b. Chat leftover rows open the same chrome with lantern + chat verbs (1q).
MystFlo Platform Preview
· Peyton
Pulse
Your active assistants
Niseko winter bookings #4K2✕
Pulse Overview Personalize Connect
Runs this month142
Health96%
Last run2h ago
Cost this month$11.36
Quick actions
mystflo.com/b/niseko-winter
Recent activitySee all ›
Took Sofia’s booking — deposit requested$0.08 · 1.2s4:12pm
Sheet sync failed — Google Sheets didn’t respond in timeNeeds attentionView issueJul 17
Resumed by youJul 17
Issue ✕
Error Niseko winter bookings #4K2

Google Sheets didn’t respond in time

This run tried to read your sheet and gave up after waiting. The sheet was slow, offline, or Google needs a reconnect. Everything we know is here — there is no technical log behind a second door.

Tried 2 times · Jul 17, 9:41am
Reconnect
3q — click path from assistant-detail Pulse
  • Row stays subject · lantern · View issue · time. The sheet is the only expand.
  • One verb, from the rule that owns the fix (2026-08-24): this example is a connection error, so the verb is Connects’ Reconnect — never paired with Retry. Assistant-owned setup doors to that assistant’s Connect tab. Platform-owned (wallet, limit) uses the platform verb (Adjust limit / Add funds). No View technical logs — we do not have a founder-facing log, and the why already carries the error.
Assistant-level Failed ≠ run-level Error
  • Failed (Breakdown status / red rail) = this assistant instance is broken or terminal — open the detail modal, Pulse tab first, fix travels with the red.
  • Error on a Runs row = one bad run — open the issue sheet (frame 4b), not the whole assistant modal by default.
  • Needs attention = founder decision queue — act on the row (Reconnect / Mark paid / Adjust limit). Only open the modal if the row has no in-place fix.
MystFlo Platform Preview
· Peyton
Pulse
Overview · Breakdown name click
On-Brand Support #7Q2 Failed ✕
Pulse Overview Personalize Connect
Can’t reach WhatsApp
This assistant stopped talking to customers until WhatsApp is reconnected.
View issue
Runs this month311
Health94%
Last run12m ago · Failed
Cost this month$24.88
Recent activitySee all ›
24h7d30d
Guest needs you — AI wasn’t sureNeeds attentionView issue12m
Couldn’t reply to a guest — WhatsApp didn’t respondNeeds attentionView issue2h
Answered Liam — cancellation policy$0.08 · 0.9sYesterday
Fix lives on Connect · red travels with its fixOpen Connect →
Click map (CPO + Chief Designer, 2026-08-11) + chat/support instance of the unified template (R37, 2026-09-03)
  • Same body template as frame 3 — exception banner (top, full-width) → the fixed four metric rows (Cost MTD was missing here; now present) → the type's slot → activity, 24h/7d/30d chips + 5 rows + See all › (exact .al-ledger grammar, source mark dropped, full-width; the ‹ Newer · Page N of M · Older › pagination moved to the nested Activity sheet, search removed 2026-08-22 — “filter is enough for now”). Both frames Peyton compared now share ONE structure.
  • Quick actions slot is EMPTY here — by design, not a gap (CPO 2026-08-22). Chat/support has no routine action; its verbs are exception-only and live in the issue sheet — the exception banner is the same trio as every needs-attention surface (statement · info line · View issue → sheet 4b; no inline Reconnect shortcut, Peyton 2026-08-22); Resume for a paused card stays on the card. An empty slot renders NOTHING — no orphan header, no filler card (R34: the slot exists in the template; its content for this type is none).
  • Empty slot collapses the 2-col pair (Chief Designer 2026-08-22): when the slot has content (frame 3) metrics + Quick actions sit side by side; when it renders nothing, there is no second column to reserve — metrics keep a measured single column (640px readable label↔value span, never stretched sheet-wide) and the full-width banner above + full-width activity below carry the sheet's width. An empty reserved column would read as a bug, not quiet-empty.
  • Breakdown name → this modal (instance detail). Does not switch the page to Active/Past tabs.
  • Needs attention · Reconnect → /connects (or Connect tab). Mark paid / Extend → act on the row. Adjust limit → Usage.
  • Inside the modal, a failed run still uses View issue → sheet 4b (run-level), separate from the assistant Failed badge.
  • Unhandled chat handoff (2026-08-24): newest ledger row is Guest needs you — AI wasn’t sure · lantern · View issue → sheet 1q. The WhatsApp-down row is a different event (connection) and still opens 4b. Same grammar as frame 3 — source mark omitted because the modal already names On-Brand Support.
768 not yet drawn for this flow. Desktop and 375 are the contract.
Pulse
Your active assistants
Niseko winter bookings #4K2 Active✕
Pulse Overview Personalize Connect
Runs this month142
Health96%
Last run2h ago
Cost this month$11.36
Bookings taken this month38
AttendeesSee all 27 ›
30 seats · 24 booked · 6 left · synced 2 min ago
Sofia Marin 2 spots · link sent Feb 3awaiting paymentMark paid⋯
Kenji Ito 1 spot · booked Feb 4paid
Maria Alvarez 2 spots · booked Feb 4paid
Lars Berg 1 spot · booked Feb 3paid
Anya Petrova 1 spot · booked Feb 2paid
5 of 27 · 3 waiting
Your booking link
mystflo.com/b/niseko-winter
WhatsAppXThreadsCopy link
MystFlo
Niseko winter
Scan to book on WhatsApp
Flyer card · 2048px
Print and social · Save image
Recent activitySee all ›
24h7d30d
Guest needs you — AI wasn’t sureNeeds attentionView issue12m
Took Sofia’s booking — deposit requested$0.08 · 1.2s4:12pm
Answered Maria — dates for February$0.08 · 0.9s1:03pm
Sheet sync failedNeeds attentionView issueJul 17
Resumed by youJul 17
This assistant’s activity.
C11 — Pulse tab (A lock) · ONE template, typed slot, roster FIRST (R37, 2026-09-03)
  • Same template order as desktop frame 3 — 375 stacks to ONE column (desktop’s metrics/slot 2-col pair is desktop/tablet only): fixed four metrics (+ Bookings taken append) → the roster (Attendees · See all N ›, needs-verdict first, verdict pair on its own 44px line) → the booking link + R33 share row + branded flyer card (44px touch buttons, open on first paint, no chevron) → activity.
  • Activity is a 5-row PREVIEW + See all › — 24h/7d/30d chips stay; the ‹ Newer · Page N of M · Older › pagination bar is removed from this tab and lives in the nested Activity sheet (assistant-lifecycle.html 9f-m). Rows = the mobile Activity-tab two-line grammar (4d-m): event line, then quiet fact · time sub-line — source mark dropped (the sheet header names the assistant). No day headers, no dots, no search.
  • Unhandled chat handoff (2026-08-24): newest row is Guest needs you — AI wasn’t sure · lantern · View issue → 1q. Same event as desktop frame 3 — not a conversation list.
  • Records — roster FIRST in the slot (R37): same order as desktop frame 3 — roster header + See all, truth line, ≤5 rows — sits ABOVE the booking link/share row, not a full-width band after them. See all on the roster → the records sheet rises full-height over this sheet (assistant-lifecycle.html 9e-m); See all on activity → the new Activity sheet (9f-m).
Pulse
Your active assistants
On-Brand Support #9P3✕
Pulse Overview Personalize Connect
Runs this month86
Health98%
Last runChatting now
Cost this month$6.40
Quick actions
Your WhatsApp chat — guests scan or tap to message you.
https://wa.me/16318181081
WhatsAppXThreadsCopy link
MystFlo
On-Brand Support
Scan to chat on WhatsApp
Flyer card · 2048px
Print and social · Save image
C11 — Pulse tab · chat/support share (2026-08-27)
  • Same stack as 3-m. Quick actions is the chat link + R33 + branded flyer card. CTA = Scan to chat on WhatsApp. No booking prefill on the URL.
  • Activity rows below the slot carry the guest language token + the English-fallback meta line — see the revisit card at 3-chat · follow-up languages (one card, drawn once).
3Assistant detail modal — mobile 375px (Pulse tab, pending review)
Pulse
Your active assistants
October cohort waitlist #4B8 Active✕
Pulse Overview Personalize Connect
Waiting on youReview the launch message before it sends Review
Runs this month18
Health100% healthy
Last run6m ago
Cost this month$4.50
Signups page live214
Quick actions
mystflo.com/w/october-cohort
WhatsAppXThreadsCopy link
Recent activitySee all ›
24h7d30d
New signup214 total · page live6m ago
Activated by you8:02am
This assistant’s activity.
D-5 · R31 · D-3 · D-1 — Pulse tab, pending-review item at top · waitlist type (2026-08-22)
  • Pending item renders at the TOP of the tab body, above the metrics band and run feed — same flag grammar as the Pulse-wall card (eyebrow + one-line verb + right-aligned Review). It is a SEPARATE exception flag — never folded into Quick actions (D-5 stays where it is).
  • Metrics follow the fixed four (Runs · Health · Last run · Cost MTD) + the waitlist append row (Signups). Quick actions = signup link + R33 share row (steady-state; while pending template approval the slot carries the launch-broadcast action instead).
  • Still Active, still emerald — a flag on the card, not a status change (D-3). Max ONE pending item, oldest wins.
  • Review deep-links to the tab that owns the fix (D-1); the fix runs through the R35 split.
  • Two rows = one page → pagination hidden (platform convention: hidden when everything fits); a fuller history opens the same nested Activity sheet as every other type (assistant-lifecycle.html 9f-m). Master frame: 9b-x.
3Assistant detail modal — mobile 375px (Overview tab) R28 · REDRAWN 2026-08-29
Pulse
Your active assistants
Niseko winter bookings #4K2 Active✕
Pulse Overview Personalize Connect
What it does

Answers booking questions on WhatsApp and writes confirmed stays to your sheet.

How it works
01 · Guest messages your WhatsApp any hour — 11pm included
02 · Answers from your Brain real prices and dates, never invented
03 · Confirmed stay lands in your sheet tricky ones come to you
Key benefits
Answers while you sleep instant replies at the deciding moment
Never makes up a price or date if it isn't in your Brain, it brings you in
Activated Jul 17 · first period — Lifetime history shows after a stop + reactivate (frame 7).
Overview = understand only — R28, pre/post identical (REDRAWN 2026-08-29)
  • No metrics (runs/cost/health live on Pulse). No Customers (Future F2). No Recent / Go to Pulse (redundant).
  • Copy provenance (Peyton-approved 2026-08-29): the How it works / Key benefits rows are illustrative, adapted from signed On-Brand Support (9P3X) copy — NOT any template's details.flow/benefits. Sample copy for a schematic grammar frame; do not treat as sourced.
  • Supersedes the 2026-08-11 lock (PR #3399). Peyton, 2026-08-29, verbatim: “overview should not have 'your setup' at all.” No template gate, no carve-out — the setup read-back lives on Personalize (frame 3-Personalize / on-brand-support 9d), apps live on Connect. Overview = What it does → How it works → Key benefits, byte-identical to pre (R28), for every template.
  • Lifetime only when >1 activation — see frame 7. First period: quiet activated line only.
  • C1: header stays lit; dim + sheet only below.
3Assistant detail modal — mobile 375px (Personalize tab)
Pulse
Your active assistants
Niseko winter bookings #4K2✕
Pulse Overview Personalize Connect
Manual actions
Run now Trigger a run outside its scheduleRun now
Send a test message Check it end-to-endSend test
Personalization
Tone Friendly, casualEdit
Cancellation policy 48h notice, $50 feeEdit
Add-on assistant
Deposit chasing Reads the same BrainActivate add-on
Personalize tab
  • Manual-trigger actions up top (Run now, Send test).
  • This instance’s personalization entries + quiet "+ Add".
  • Add-on row: related assistant reading the same Brain — no re-teaching required.
3Assistant detail modal — mobile 375px (Connect tab)
Pulse
Your active assistants
On-Brand Support #7Q2✕
Pulse Overview Personalize Connect
Connected apps
WhatsApp Can’t reach — token expiredReconnect
Google SheetsConnected
Payment method
Visa •••• 4242Change →
Brain
Cancellation policy Missing — Support may answer wrongOpen Brain →
Your credentials are encrypted and never stored in third-party systems.
RP7 · RP8 — Connect tab
  • Unhealthy states stand out: lantern Reconnect on the broken WhatsApp row (needs-you semantics, 2026-08-22); Brain-health row surfaces only for a blocking gap ("Open Brain →"). Healthy rows (Google Sheets) stay quiet — no badge or color when nothing’s wrong.
  • RP7: Payment method between Connected apps and Brain (real 3-section order) — quiet status-with-edit row. Amended 2026-07-26 (#1419): "Change" opens the card form in place (no navigation, modal stays open) behind a one-line replace-confirm ("You have {method} on file. MystFlo keeps one payment method per type — saving a new one replaces the method of that same type") — never names a specific card, since the server only replaces the same type and a founder can tap Apple Pay/Google Pay/Link first. The action is disabled (dimmed) while payment data is still loading, so the gate can never be skipped on a cold Pulse open. A second saved method (card + Link) shows a small "Manage all payment methods →" link beneath the row, still routing to Billing — that path is unchanged.
  • RP8: one-line security footer = same trust copy as the pre-activation Connect step (founders re-authorize real accounts here).
Activity
Peyton 2026-08-22 — Runs + Activity become ONE tab, named Activity (CPO+CTO review, Peyton sign-off)
  • Story — As a founder, I open Pulse → Activity and see everything that happened, newest first: assistants replying, booking, chasing — and the Brain writing, confirming, saving. One feed, one grammar. I never pick a source first (Option B — combined default, Peyton's call).
  • Tab bar is now four: Overview · Active · Past · Activity. “Runs” no longer exists as a tab or a word in the bar. This restores the Records-Layer “never a fifth tab” bound the shipped 5-tab Pulse.tsx violates — the merge IS the fix, not a cosmetic rename.
  • Three filter layers. (1) Source scope is a real TAB STRIP All │ Assistant │ Brain (Peyton 2026-08-22 — was pills) — the page's own lit-underline in-page tab grammar one size down (playbook §3: active = white + 2px underline, inactive white/40, no filled pill anywhere); default All. The active tab decides which Layer 2/3 controls render on the row beneath it — never all controls in one flat row. ALL shows only the status toggle; Assistant shows drill picker + toggle; Brain shows its drill picker alone. (2) ONE status toggle chip — Needs attention off → Needs attention on — not a pill-pair, and no status “All” option: off = unfiltered, on = feed filtered to needs-attention (Peyton 2026-08-22 — two identical pill groups both opening with “All” visually fused into one confusing row; the tab strip + lone toggle removes the second “All” structurally, not cosmetically). The chip is icon-free (Peyton 2026-08-22 — a label filter, no dot): off/on is carried by the chip fill/border/text alone (.assist-filter.on), the same icon-free active grammar as the tabs; the lantern mark stays on exception ROWS only (T1203: marks are for exceptions, not inventory). Deliberately NOT a per-source success/failure tree: a failed Brain generation never writes a row, so a Brain “Failed” option would always be dead; Needs attention surfaces genuine assistant-side errors only. (3) Drill pickers appear only inside a scope's tab: an assistant-name picker under Assistant (frame 4d), a Brain action-type picker — Written · Rewritten · Saved to Doc · Confirmed · Read notes (5 options, Peyton 2026-08-22: every real Brain action individually filterable, none folded) — under Brain (frame 4e).
  • Every row states its subject. Never a bare “v3 saved” — the row says what it's about: Replied to Maria — deposit question, Rewrote the invite copy · Sunrise Yoga Retreat, Sheet sync failed · Needs attention, Confirmed Section 3 — policies · v5.
  • One row grammar, both sources: source mark (assistant name, or Playbook / Launch Kit / Our read) · event in founder words · optional quiet fact (vN, program, cost when scoped) · time right. Same line structure whichever side wrote the row — provenance lives in the mark, never in a different row shape.
  • AC status — supersedes 2026-08-21. AC-PULSE-23/24 as written lock the two-ledger split (“the two tabs never mix rows”) — this merge retires that lock; the PRD must be rewritten before those ids are cited as holding. Everything drawn here is NEW (PRD debt) until then — this artifact mints no ids. AC-PULSE-25's empty-state convention (real chrome + one quiet line) carries over unchanged (frame 2b).
  • URL: ?tab=activity is this tab. Old ?tab=runs deep links land here — a deliberate re-key, never a 404 or a fall-through to Overview.
  • Shipped vs drawn: shipped code still renders five tabs with DashboardRunFeed and PulseActivityFeed apart. This artifact is the build contract for the merge. The 2026-08-22 morning draft (grouped Brain generation / Launch Kit sections) was superseded the same day by this mixed-chronology default.
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention 9 of 600 events
On-Brand SupportGuest needs you — AI wasn’t sureNeeds attentionView issue12m
On-Brand SupportReplied to Maria — deposit question answerednow
Launch KitRewrote the invite copySunrise Yoga Retreatnow
Niseko winter bookingsSheet sync failedNeeds attentionView issue2h ago
Retreat BookingTook Sofia’s booking — deposit requested5h ago
October waitlistPaused by you6h ago
PlaybookConfirmed Section 3 — policiesv51d ago
Launch KitSaved V3 to your Doc · Open DocSunrise Yoga RetreatAug 14
On-Brand SupportAnswered Liam — cancellation policyAug 14
Our readRead your site again — a fresh passv3Aug 12
October waitlistAdded 3 people to the waitlistAug 12
Retreat BookingPaused — needs a reconnectNeeds attentionView issueAug 11
‹ Newer Page 1 of 67 Older ›
4 — Activity tab, desktop (combined default — ALL)
  • Row anatomy: fixed-width quiet uppercase source mark (assistant name, or Playbook / Launch Kit / Our read) · event in founder words with its subject · optional quiet fact chip (program name, vN) · time right, tabular. Ledger rows, no thead — this is a feed, not the Breakdown table.
  • THIRD source — lifecycle events (Peyton 2026-08-22, rollout-plan ruling): Paused / Resumed / Stopped rows (source: assistant_status_events, the same rail the post modal already merges) render in the ONE grammar — mark = assistant name, verb in founder words: Paused by you · Paused — needs a reconnect · Resumed by you · Stopped. ALL + Assistant scopes only, never Brain (Brain has no lifecycle). No cost fact — lifecycle isn’t a run. Activation events are NOT in the set (the first run row + the Pulse card already carry it). System-pause rows JOIN the Needs-attention toggle — a real needs-you event with a row (lantern mark + View issue → sheet 4b, which owns Reconnect); founder-pause / Resumed / Stopped stay neutral and excluded. Unhandled chat handoffs also write a feed row (2026-08-24 amend) — subject Guest needs you — {why}, lantern + View issue → Issue sheet 1q. That is the event, not a conversation list.
  • Needs attention grammar: lantern dot + “Needs attention” on the row, quiet View issue as the row’s ONLY action → issue sheet (frame 4b), which owns the one verb from the owning rule (Peyton 2026-08-24 — Reconnect + Retry was an unclear pair; the row is subject · status · time). Color semantics (Peyton 2026-08-22): red = error, lantern = needs attention / quick action — needs-attention marks are lantern, never --amber (amber stays pending / PREVIEW only, playbook §3); red stays errors-only inside the sheet’s Error badge. No account-wide error banner — the row is the signal (Peyton 2026-08-11, carried over from Runs).
  • Pagination — PLATFORM CONVENTION (Peyton 2026-08-22): every paginated list pages with ‹ Newer · Page N of M · Older › (Prev/Next labels on non-chronological lists) — the “Load older” append button is retired platform-wide; other surfaces match this pattern (archetype: pulse-surface.md). Right-aligned under the list, position always stated, page swaps in place, hidden when everything fits on one page, disabled direction stays visible at 30%.
  • Open Doc only on saved rows — quiet text link, same verb as everywhere else. Never a button.
  • Filters filter, they don't navigate. The source tab strip swaps which rows show (lit-underline grammar, playbook §3 — never filled pills); the Needs-attention toggle chip hides everything that doesn't need you — icon-free, same chip grammar as the Customers Needs-action chip, engaged state = .assist-filter.on fill alone. In ALL only the toggle sits under the strip — no drill picker until a scope tab is active. No cost column in ALL — Usage owns cost aggregates; per-run cost appears only as a quiet fact when scoped to Assistant (frame 4d).
  • See also — the trails that feed this tab: Brain home · 9-preview (right-rail Activity preview) and Launch Kit tab · 9e (≤5-row preview + fold). Both files' “See all →” land on this frame.
  • Empty (Peyton 2026-08-23): both sources at zero → this exact page with the list header standing (strip + toggle + quiet 0 events + .al-ledger hairline) and Source · Event · When field header + the quiet line IN the first ledger row (.al-row.al-empty), left-aligned — never a centered hero that drops the list. Pagination still hides at zero. Drawn in frame 2b (AC-PULSE-25 ↗ convention). The page itself is left-aligned to the Pulse title in ALL states — production’s mx-auto max-w centering is drift, not this contract.
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview
Active
Past
Activity
AllAssistantBrain
All assistants Needs attention 50 of 588 runs
On-Brand SupportReplied to Maria — deposit question answered$0.08 · 1.2s4:12pm
Niseko winter bookingsSheet sync failed — Google Sheets didn’t respond in timeNeeds attentionView issue9:41am
Retreat BookingTook Sofia’s booking — deposit requested$1.75 · 0.6s8:20am
Retreat BookingResumed by youAug 14
On-Brand SupportAnswered Liam — cancellation policy$0.08 · 0.9sAug 14
October waitlistAdded 3 people to the waitlist$0.12 · 1.4sAug 12
‹ Newer Page 1 of 12 Older ›
4d — Assistant scope (the old Runs job lives here)
  • Activating the Assistant tab reveals the drill picker — All assistants ▾, id+name match, the same dropdown grammar DashboardRunFeed ships today — on the control row under the strip. It appears only in this tab; ALL stays clean.
  • Rows keep the ONE grammar and gain a quiet run fact — $cost · runtime — because a scoped run log is where a founder audits what ran and what it cost. Lifecycle rows (Paused / Resumed / Stopped — third source, 2026-08-22) appear here too and carry NO cost fact. Failed rows carry the founder one-liner in the event text — never raw provider codes.
  • Needs attention toggle here (icon-free; on = chip fills) filters to error runs + system-pause lifecycle rows (“Paused — needs a reconnect” — 2026-08-22; founder-pause stays neutral, excluded). The row’s only action is View issue (→ 4b) — the one verb lives INSIDE the issue sheet, not inline (Peyton 2026-08-24: not Reconnect + Retry; the row stays subject line · status label · timestamp).
  • Count line reads runs (“50 of 588 runs”) — in scope, these ARE the runs; the word is allowed here, just never in the tab bar.
  • Entry points (2026-08-22): the Assistant tab in-strip; an Overview Breakdown row click (drops in pre-filtered — ?tab=activity&filter_assistant=<id>, never ?assistant=); and Usage’s “View run-by-run detail in Activity →” — Usage went aggregates-only (metrics spec §0 v1.13), so this scope owns the run-by-run cost read.
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention 2 events
Niseko winter bookingsSheet sync failed — Google Sheets didn’t respond in timeNeeds attentionView issue9:41am
Retreat BookingPaused — needs a reconnectNeeds attentionView issueAug 11
4d2 — Needs-attention toggle ON (ALL scope shown; same filter behavior in Assistant scope)
  • Filters the current scope's feed down to exception rows only — error runs + system-pause lifecycle rows (“Paused — needs a reconnect”). Everything else (successful runs, Brain writes, founder-initiated pause/resume) drops out. Chip fill is the only on/off signal (.assist-filter.on) — never a second color.
  • Count line drops the “of Y” denominator while the toggle is on — the unfiltered account-wide total no longer describes what's being counted, so it reads a bare N events instead of pairing a filtered numerator with an unfiltered one. ALL scope only. Assistant scope keeps N of Y runs even with the toggle on, because both halves come from the same filtered request there — don't file that as drift.
  • Pagination reflects the FILTERED count, not the unfiltered total — hidden here because both matching rows fit on one page (10g: hidden at one page).
  • Row grammar is unchanged from the unfiltered feed — lantern Needs attention mark + View issue stay the row's only action; no new row shape for this state.
  • No filtered-and-empty case is drawn separately — it reuses frame 2b's tab-empty quiet line (AC-PULSE-25 convention), same as the tab's own zero state.
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview
Active
Past
Activity
AllAssistantBrain
All actions 12 events
Launch KitRewrote the invite copySunrise Yoga Retreatnow
PlaybookConfirmed Section 3 — policiesv51d ago
Launch KitSaved V3 to your Doc · Open DocSunrise Yoga RetreatAug 14
PlaybookSaved Business playbook V4 · Open Docv4Aug 13
Our readRead your site again — a fresh passv3Aug 12
‹ Newer Page 1 of 3 Older ›
4e — Brain scope
  • The drill picker becomes All actions ▾ — Written · Rewritten · Saved to Doc · Confirmed · Read notes (5 options — Peyton 2026-08-22, O-1 ruling: every real Brain action individually filterable; playbook confirms = Confirmed, Our-read notes = Read notes, never folded into the generation verbs). Same chip idiom as the assistant picker, different vocabulary; it exists only in this scope.
  • No status filter here — the Needs-attention toggle is hidden in Brain scope: a failed generation never writes a row, so there is nothing for it to show. Drawing a dead toggle would be the exact per-source tree the merge decision rejected.
  • Rows are the version trail: source mark (Playbook / Launch Kit / Our read) · event with its subject · quiet vN or program fact · time. Open Doc on saved rows only. Never an emerald success chip — vN is a fact, not a status (C12).
Tap intent (Peyton 2026-08-11, carried into the merged tab) — no pop-up · height follows content
  • Founder reads why + acts → do something → bottom sheet. Not a centered dialog. Not a left slide-over. Never a right drawer. This flow ports unchanged from the old Runs tab — the trigger is now any Assistant row marked Needs attention, in ALL or Assistant scope.
  • Short content = partial rise. Sheet only as tall as the issue (handle + title + copy + CTA). Rest of the feed stays visible under a dark translucent dim.
  • One verb (Peyton 2026-08-24): Reconnect + Retry was an unclear pair. The verb comes from the rule that owns the fix — connection → Connects Reconnect; assistant setup → that assistant’s Connect tab; platform (wallet / limit) → Adjust limit / Add funds. No Retry beside Reconnect. No technical logs — we do not show founders a log, and the why carries the error.
MystFlo Platform Preview
· Peyton
Pulse
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention
On-Brand SupportReplied to Maria — deposit question answerednow
Niseko winter bookingsSheet sync failedNeeds attention9:41am
Retreat BookingTook Sofia’s booking — deposit requested8:20am
PlaybookConfirmed Section 3 — policiesv51d ago
Issue ✕
Error Niseko winter bookings #4K2

Google Sheets didn’t respond in time

This run tried to read your sheet and gave up after waiting. The sheet was slow, offline, or Google needs a reconnect. Everything we know is here — there is no technical log behind a second door.

Tried 2 times · Jul 17, 9:41am
Reconnect
4b — Issue sheet, desktop
  • Sheet height = content. The Activity feed remains visible above under the translucent dark dim — the founder never loses where they were.
  • Still a bottom sheet (edge-to-edge width), not a centered card. Build: ModalWrapper presentation="sheet", auto height for short bodies.
  • Red Error badge lives here, inside the sheet — the feed row itself stays lantern Needs-attention (red = error, lantern = needs you; 2026-08-22).
  • Sheet structure (Peyton 2026-08-22, chat leftover 2026-08-24): (a) overview — badge + assistant (or AI action / category) + plain-English TLDR (lead) + why (why) → (b) activity info — the tried-count/timestamp line rides directly under the why, before any action → (c) what to do — the action row. Title is always Issue. Chat leftover is the same structure on 1q (lantern badge, chat verbs) — not a second sheet family.
  • One verb (Peyton 2026-08-24, amends 2026-08-22 Retry + logs): primary = .btn-cta with the SHORT verb the owning rule already uses — here Reconnect (Connects), never “Reconnect Google Sheets”. No Retry. No technical-logs link. A second button that restates the same fix is a FAIL.
  • ONE attention pattern, everywhere (Peyton 2026-08-22): every needs-attention occurrence — Overview rail row, Activity row, the modal’s exception banner — is the same trio: plain statement · quiet info line · View issue → THIS sheet. No inline Reconnect shortcut anywhere skips the sheet; the one verb lives here.
768 not yet drawn for this flow. Desktop and 375 are the contract.
Overview
Active
Past
Activity
AllAssistantBrain
Needs attention
9 of 600 events
On-Brand SupportReplied to Maria — deposit questionnow
Launch KitRewrote the invite copySunrise Yoganow
Niseko winter bookingsSheet sync failedNeeds attentionView issue2h ago
Retreat BookingTook Sofia’s booking — deposit requested5h ago
October waitlistPaused by you6h ago
PlaybookConfirmed Section 3 — policiesv51d ago
Launch KitSaved V3 to your Doc · Open DocSunrise YogaAug 14
Our readRead your site again — a fresh passv3Aug 12
‹ Newer Page 1 of 67 Older ›
4-m — Activity tab, mobile (ALL)
  • Two-line row at 375: source mark + event first, then a quiet fact · time sub-line. The row itself doesn't navigate — taps only where a link exists (Open Doc, View issue).
  • The source tab strip sits on its own line (lit-underline, scrolls in-strip if ever needed); the icon-free Needs-attention toggle chip takes the control line below it — tabs and chip are different primitives now, so the two-look-alike-pill-rows trap is gone structurally.
  • Kit program mark shortens to the short name (“Sunrise Yoga”); never truncates the event text.
  • Lifecycle rows (Paused / Resumed / Stopped — third source, 2026-08-22) use the same two-line grammar; no cost fact. System-pause carries the attention sub-line + View issue like any needs-attention row.
Overview
Active
Past
Activity
AllAssistantBrain
All assistants Needs attention
50 of 588 runs
On-Brand SupportReplied to Maria — deposit question$0.08 · 1.2s4:12pm
Niseko winter bookingsSheet sync failedNeeds attentionView issue9:41am
Retreat BookingTook Sofia’s booking — deposit requested$1.75 · 0.6s8:20am
October waitlistAdded 3 people to the waitlist$0.12 · 1.4sAug 12
4d-m — Assistant scope, mobile
  • Assistant picker + the icon-free Needs-attention toggle share one wrapping control row under the source tab strip. Run fact ($cost · runtime) rides the sub-line.
  • Failed row actions stay quiet text — View issue opens the sheet (4b-m); the one verb lives inside it (2026-08-24 — no inline verb pile at any width).
Overview
Active
Past
Activity
AllAssistantBrain
All actions
12 events
Launch KitRewrote the invite copySunrise Yoganow
PlaybookConfirmed Section 3 — policiesv51d ago
Launch KitSaved V3 to your Doc · Open DocSunrise YogaAug 14
Our readRead your site again — a fresh passv3Aug 12
4e-m — Brain scope, mobile
  • Action picker (Written · Rewritten · Saved to Doc · Confirmed · Read notes — 5 options, Peyton 2026-08-22) replaces the assistant picker; no Needs-attention toggle in this scope — a failed generation never writes a row.
Overview
Active
Past
Activity
AllAssistantBrain
On-Brand SupportReplied to Maria4:12pm
Niseko winterSheet sync failedNeeds attention9:41am
PlaybookConfirmed Section 3v51d ago
Issue ✕
Error Niseko winter bookings #4K2

Google Sheets didn’t respond in time

This run tried to read your sheet and gave up after waiting. The sheet was slow, offline, or Google needs a reconnect. Everything we know is here — there is no technical log behind a second door.

Tried 2 times · Jul 17, 9:41am
Reconnect
4b-m — Issue sheet, mobile
  • Sheet hugs content — the Activity feed still peeks above through the dark wash.
  • Header stays lit (C1). Borderless edge (T1249). Handle 48×6. Close 44×44. Full-width CTA.
Part II · Future — build later
Everything below is deferred, not the current build — never a build target (kit canon U9). It is the Customers work: ActivityFeed is unmounted in prod through the Nina demo (Peyton, 2026-07-11) and its distinct-customer count (#2656) isn’t built. F1 is a duplicate-and-tweak — the Active desktop Overview (frame 1) with the Customers section added back; F2/F3 are the standalone Customers frames; F4 is export (CSV / Google Sheets) for this assistant’s runs — Peyton A+C lock 2026-08-11. Spec: prd-pl-whatsapp-activity-log.md → “Future — Considered, Not Yet Built”.
§ Desktop journey every desktop frame, journey order
F4 · Export this assistant’s runs — CSV / Google Sheets Peyton A+C · 2026-08-11
Not Active — analysis takeaway, not browse
F4Mobile 375 — export from Pulse tab
Export runs ✕

Niseko winter bookings #4K2 · last 30 days · 48 runs

Download CSV Save to Google Sheets
Stays on this assistant — doesn’t open the account-wide Activity feed.
F4Desktop — same compact sheet
MystFlo Platform
Assistant Pulse tab · Export →
Export runs ✕

Niseko winter bookings #4K2 · last 30 days · 48 runs

Download CSV Save to Google Sheets
Stays on this assistant — doesn’t open the account-wide Activity feed.
F1 · Overview with Customers threaded in — desktop duplicate of Active frame 1 + Customers
MystFlo Platform Preview
· Peyton
Workspace
Support
Account
Pulse
Your active assistants
Overview2
Active
Past
Activity
July 2026
Runs this week
142
588 this month
Attention
2
2 failed runs this month
View issues →
MTD Cost
$41.20
Runs $30.20 · AI Usage $11.00
See where it’s going →
Needs attention (2)All activity →
On-Brand Support #7Q2
A connected app disconnected — reconnect to keep it running
View issue
Retreat Booking #2M5
Booker owes deposit — was due Jul 12
Mark paid · Extend · Release
Breakdown — July 2026
Status Active Paused Completed Stopped Failed
Assistant Status Runs▼ Cost Health Lifetime
On-Brand Support #7Q22x Failed 311 $24.88 94% 2,140
Niseko winter bookings #4K2 Active 142 $11.36 96% 918
Bali balance chasing #9T1 Paused by you 88 $6.20 91% 340
Retreat Booking #2M5 Active 5 $1.75 100% 5
Total 6 active 546 $44.19 95% 3,403
‹ Prev Page 1 of 2 Next ›
Customers
Needs action 2 All activity
Today
Maya booked the Bali retreat· deposit paid2h ago
Jonas asked about the refund policy· escalated to you4h ago
Reply on WhatsApp ↗
Yesterday
Priya confirmed her Niseko dates1d ago
F1 — duplicate-and-tweak of Active frame 1 (U9)
F2 · Customers section, filtered to one assistant formerly 1d · desktop, then mobile
Overview tab — Customers section
Customers
Niseko winter bookings #4K2 ✕ Needs action All activity
Yesterday
Priya confirmed her Niseko dates1d ago
Monday, Jul 20
Tomás asked about the ski rental add-on2d ago
Desktop
  • Same filtered scoping, wider row — the three chips sit inline with the section marker, never a separate toolbar.
F3 · Customers section — empty state formerly 1e · desktop, then mobile
Overview tab — Customers section
Customers
◎
No customer activity yet
When your assistants handle customers — bookings, payments, questions — it shows up here.
Desktop
  • Identical copy and ring treatment, wider padding.
§ Mobile journey — 375 same frames, same order, 375 tier — laid out side by side, not stacked — F1 is desktop-only, no mobile rendering exists
F2Customers section, filtered to one assistant — mobile 375px
Overview tab — Customers section
Customers
Niseko winter bookings #4K2 ✕ Needs action All activity
Yesterday
Priya confirmed her Niseko dates1d ago
Monday, Jul 20
Tomás asked about the ski rental add-on2d ago
C6 — entry + filter chips
  • Entry (Future only): a quiet “Customers →” cross-link from the detail modal Overview — not in Active Overview (metrics/Customers/Recent removed 2026-08-11). Lands here scoped to one instance by nickname + ID chip (C6).
  • Applied filter = the engaged chip (✕ clears back to account-wide); Needs action + All activity sit alongside, same chip class, unengaged.
  • We log actions, not conversations.
F3Customers section — empty state — mobile 375px
Overview tab — Customers section
Customers
◎
No customer activity yet
When your assistants handle customers — bookings, payments, questions — it shows up here.
Section-level empty state
  • Founder already has active assistants (Overview above still shows their metrics) — just no customer outcomes logged yet.
  • No step guide or CTA — that’s the whole-account empty state (Active frame 2); just the honest quiet line, matching ActivityFeed.tsx’s real empty copy.
  • We log actions, not conversations.