Usage is the spend page — aggregates only: daily, by assistant, AI vs run cost. Run-by-run detail lives in Pulse Activity.
PR 2 proposal on top of the Billing simplification — Usage as its own nav destination:
shipped BillingUsage.tsx restyled, plus proposed month picker, the tabbed
Cost breakdown (Pulse table grammar, 2026-08-22), and an explicit empty state.
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: § Desktop
journey first — every desktop frame, full flow, journey order — then § Mobile
journey — 375 below it — every mobile frame, same order, laid out side by side as a
wrapping grid (never a tall single-file column of phone screens). Two sections, never
interleaved — 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.
| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
| Autumn retreat support #7Q1 | 142 | $8.52 | $2.84 | $11.36 | 28% |
| Spring retreat booking #2K9 | 5 | $8.75 | — | $8.75 | 21% |
| Front desk bookings #6L4 | 44 | $5.65 | $0.55 | $6.20 | 15% |
| All assistants | 588 | $31.40 | $3.39 | $34.79 | 84% |
BillingUsage.tsx restyled + PR 2 proposals
MetricStatCard), daily/monthly/yearly toggle, "AI vs run cost" split bar + legend wording, external-apps notice.surface-hairline boxes; KPI values pinned to the 26px/500 tier lock (T1124).Pulse.tsx:2177) now sits under the spend chart — money-safety belongs with the aggregates page. It replaces the old “Monthly cap off · Set a cap →” hairline row: ONE budget affordance, and the language is safety line / budget, never “cap” (budget = safety line concept, billing lock). Shown only while no budget is set; with a budget set this slot shows the budget status row instead..id-chip #XYZ grammar (last 3 of assistants.display_id) — never the full ASST-… dump. Same chip as Pulse cards / Breakdown / Attention..act-tabs as Pulse Activity Layer-1), each tab a real .bd-table. Consistent columns replace the per-row metadata strings ($11.36 · 142 runs · 28% vs “no AI” vs “incl. AI $0.55” — no two rows parsed alike). The proposed EXPANDABLE rows are retired: Run fees / AI actions / Combined are flat COLUMNS, so the expansion had nothing left to reveal. The combined-attribution backend check stays open — same data, now two columns instead of a hidden panel..bar-track carried no meaning beyond the % number beside it — decoration, not information. “% of total” is a sortable number column; the ONE proportional visual is the split bar in the section summary. Default sort = Combined ▼ (money page — biggest spend first); no severity rail and no status column (health is Pulse’s job; money rows are never tinted, C12)./pulse?tab=activity Assistant scope. Row click drills into Activity with the picker pre-set to that instance — the same contract as Pulse Breakdown (?tab=activity&filter_assistant=<id>, never ?assistant=).BillingUsage.tsx §5) comes OUT — Pulse Activity’s Assistant scope (pulse.html 4d) now does the per-run cost read better. Usage is aggregates-only: totals, trend chart, cost-by-assistant %, Runs+AI=Total split, invoice language. The “View run-by-run detail in Activity →” rowlink is the door — target /pulse?tab=activity (Assistant scope; never ?assistant=, that opens the detail modal). Metrics spec §0 amended to v1.13 in the same PR.| Action | When | Cost▼ | % of total |
|---|---|---|---|
| Brain research | Jul 16 | $2.50 | 6% |
| Read my site | Jul 12 | $2.50 | 6% |
| Voice refine | Jul 08 | $1.41 | 3% |
| Standalone AI | $6.41 | 16% |
.bd-table grammar: Action · When · Cost · % of total, ending in its own total row ($6.41 · 16%) — one table family across both tabs, one % denominator ($41.20).Button group in BillingUsage.tsx), restyled to a pill segment.position:absolute, z-index above the KPI cards, page beneath unchanged.| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
| Autumn retreat support #7Q1 | 142 | $8.52 | $2.84 | $11.36 | 28% |
| Spring retreat booking #2K9 | 5 | $8.75 | — | $8.75 | 21% |
| Front desk bookings #6L4 | 44 | $5.65 | $0.55 | $6.20 | 15% |
| All assistants | 588 | $31.40 | $3.39 | $34.79 | 84% |
use-mobile.tsx) — full header + rail render, rail collapsed to its 64px icon width.BillingUsage.tsx is grid-cols-1 sm:grid-cols-2 lg:grid-cols-4; 768 sits between sm 640 and lg 1024, so four cards become a 2×2. Never a squeezed 4-up..id-chip #XYZ grammar (same as desktop). Six columns may scroll inside .bd-scroll — the page never scrolls horizontally.sm). 375 is the named-breakpoint drop to a full-width row.| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
| Autumn retreat support #7Q1 | 142 | $8.52 | $2.84 | $11.36 | 28% |
| Spring retreat booking #2K9 | 5 | $8.75 | — | $8.75 | 21% |
| Front desk bookings #6L4 | 44 | $5.65 | $0.55 | $6.20 | 15% |
| All assistants | 588 | $31.40 | $3.39 | $34.79 | 84% |
.kpi hairline-row shape as Billing — never a squeezed 3-up grid at 375px..bd-table — ALL SIX columns kept; the table (min-width:560px) scrolls sideways inside .bd-scroll to reach the fee/AI split. The scroll lives inside the table wrapper only — the PAGE never scrolls horizontally. The cut column edge at the frame’s right is the scroll affordance. Name cells stay one line (nowrap)..id-chip #XYZ. The chip is nowrap; extra width is paid by the existing sideways table scroll, not by dropping identity.| Action | When | Cost▼ | % of total |
|---|---|---|---|
| Brain research | Jul 16 | $2.50 | 6% |
| Read my site | Jul 12 | $2.50 | 6% |
| Voice refine | Jul 08 | $1.41 | 3% |
| Standalone AI | $6.41 | 16% |
| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
|
No spend yet
Browse assistants →
Activate an assistant and its cost lands here — runs, AI, and share of total.
|
|||||
| All assistants | 0 | $0.00 | $0.00 | $0.00 | — |
Sparkline.tsx renders nothing for <2 points (archetype check 11); the chart keeps its axes with a flat baseline. Budget nudge stays — a budget is settable before the first run.instances.length === 0 (never activated anything) → THIS frame’s row, “No spend yet · Browse assistants →” with the door. instances.length > 0 && monthCombined === 0 (has assistants, quiet month — incl. a past month picked in the period selector) → frame 3b’s quieter row, NO door (nothing to browse to — they already own assistants). Pulse’s one-quiet-line grammar (“Nothing logged yet.” / AC-PULSE-25) in both.| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
| Nothing has run yet this month. | |||||
| All assistants | 0 | $0.00 | $0.00 | $0.00 | — |
| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
|
No spend yet
Browse assistants →
Activate an assistant and its cost lands here — runs, AI, and share of total.
|
|||||
| All assistants | 0 | $0.00 | $0.00 | $0.00 | — |
| Assistant | Runs | Run fees | AI actions | Combined▼ | % of total |
|---|---|---|---|---|---|
|
No spend yet
Browse assistants →
Activate an assistant and its cost lands here.
|
|||||
| All assistants | 0 | $0.00 | $0.00 | $0.00 | — |
.length > 0. This frame SUPERSEDES that gating AND the earlier centered “No runs yet” block: the Cost breakdown keeps its chrome at zero — empty split track, zero legend, tabs, headers standing, one quiet tip row with the door (“No spend yet · Browse assistants →”, Pulse Breakdown’s empty grammar), zero total row (% = “—”)..btn-primary Explore block — never a get-started swap on a metrics page (Pulse lock, 2026-08-18). Pagination and the Activity doorway hide at zero.