Usage dashboard
Three meters (training characters, messages, chatbots) at /app/usage, with color bands at 75%, 90%, and 100%.
The usage page at /app/usage shows three meters against your plan's limits. The urgency escalates as you get closer to hitting one.
Page header
- Eyebrow: USAGE
- Heading: How much of your plan you're using
- Subtitle: "[plan name] plan". If the billing period has start and end dates, "· resets [end date]" is appended.
Top-right link: See plans →
Thresholds
Each meter is color-coded by how much you've used:
| Percent used | Level | Color |
|---|---|---|
| 0 – 74% | OK | primary |
| 75 – 89% | Warning | amber |
| 90 – 99% | Critical | red |
| 100% | Full | red |
Warning and critical banners
A banner appears above the meters depending on the worst meter:
- If any meter is critical or full and there's a higher plan you could move to: critical banner (red).
- Else if any meter is warning and there's a higher plan: warning banner (amber).
Critical copy (verbatim)
- Heading: "You've hit one or more plan limits"
- Body: "Your chatbots will stop accepting new content, messages, or training until you upgrade."
- Button: Upgrade to [next plan name] (filled)
Warning copy (verbatim)
- Heading: "You're approaching your plan limits"
- Body: "Upgrade to [next plan name] to avoid interruptions and keep growing."
- Button: See plans (outline)
Both buttons go to /app/billing.
Hero meter — Training content
The first meter, in its own larger card:
- Label: Training content
- Subtitle: "Total characters across every chatbot. This is your primary training limit — once you hit it, new URLs, files, and Q&As are rejected."
- Used and max values are formatted with K / M suffixes
- Progress bar colored per level (primary / amber / red)
- Footer line (only when the meter is warning, critical, or full and a higher plan exists): "[next plan] gives you [N] characters · Upgrade for $[price]/[interval]" — the "Upgrade for…" part is a link to the billing page.
Two secondary meters
Side-by-side below the hero:
Messages
- Label: Messages
-
Subtitle:
- When the billing period has start and end dates: "[start] → [end]"
- Otherwise: "This billing period"
- Empty-state hint (shown when you're well under the limit): "When your chatbot runs out of messages, visitors see an error instead of a reply."
Chatbots
- Label: Chatbots
- Subtitle: "Total active bots on your account"
- Empty-state hint (shown when you're well under the limit): "One use case per chatbot: separate bots for sales, support, and FAQ each train on their own content."
Both secondary meters replace the empty-state hint with "[next plan]: [value] →" as a link once you cross into warning territory.
"What you're missing" card
Shown only if there's a higher plan you could upgrade to:
- Eyebrow: "Unlocks on [next plan]" (or "Get more with [next plan]" when a meter is critical or full)
- Heading: "What you're missing on [current plan]"
- Body: "Upgrade to [next plan] for $[price]/[interval] and unlock:"
The bulleted list contains:
- One item for each feature the next plan adds
- "[N] training chars (currently [M])"
- "[N] messages/mo (currently [M])"
Feature labels (verbatim)
These labels appear only in the "what you're missing" list on the usage page — they differ slightly from the billing page:
- "WhatsApp integration (10× engagement vs web)"
- "Telegram integration"
- "AI Tools — lead capture, booking, email send, webhooks"
- "Human handoff — seamlessly hand hot leads to your team"
- "Remove ChatbotGen branding from the widget"
- "Priority support (24h response SLA)"
Right side of the card:
- When any meter is critical: a quiet "Go to billing →" link (since the critical banner above already has the primary CTA)
- Otherwise: a large Upgrade to [next plan] → button
Operational-limits footer
A muted strip at the bottom:
Operational limits (per chatbot)
Documents: up to [N] · URLs: up to [N]
These numbers come from your plan and are informational — they're not shown as meters. In practice, the training characters bar is what you should watch.
Loading state
If the usage data hasn't loaded yet, the page shows "Loading usage…" and nothing else.