Usage & Limits
Show customers how much of their plan they've used and handle the moment they hit a limit without breaking their work.
6 states5 edge casesDesktop + Mobile
01The problem
Plans are defined by limits — seats, projects, API calls, AI credits, storage. Customers rarely know where they stand until something stops working, usually in the middle of a task. A limit that appears without warning feels like a trap, and a blocked action with a bare “Upgrade” button feels like extortion.
02When to use
Use when
- Plans with quotas: seats, projects, storage, API requests, AI credits
- Usage-based billing where customers need to predict their bill
- Free tiers that lead to paid plans
Avoid when
- Limits exist only to prevent abuse and real customers never approach them — enforce quietly with rate limiting.
- Unlimited plans — showing a meter for something unmetered creates anxiety.
03Recommended UX
Statecraft recommendation
Show usage as “used of limit” with a reset date wherever the limit matters, warn at 80% before anything stops, and when a limit is reached, finish or save the user's current work, then explain the limit and the options — upgrade, wait for the reset, or free up usage.
“7,820 of 10,000 credits · resets 1 Dec” answers both “how much?” and “until when?”. A bare percentage answers neither.
Warning at 80% gives customers a choice while they still have room. Discovering the limit at 100% removes it.
Losing work at the limit is the most damaging moment in the pattern. Let the in-progress action finish, then stop the next one.
04Interaction flow
- 01
Normal usage
Meter visible in billing and near the limited feature.
- 02
Approaching limit
80%: quiet warning to admins with the reset date.
- 03
Limit reached
Current work finishes or is saved; next action explains the limit.
- 04
Choose
Upgrade, buy add-on, wait for reset, or free up usage.
Result
- Upgraded
- Waiting for reset
- Usage freed
05Desktop behaviour
On desktop, show usage in two places: a full breakdown on the billing page, and a small meter near the feature that consumes it.
Desktop rules
- Meters show used, limit, unit and reset date as text; the bar is secondary.
- Show meters near the action that consumes them, e.g. under the AI prompt box: “212 credits left this month”.
- At the limit, disable the action with the reason inline, and offer the choices beside it.
- For usage-based billing, show the projected bill for the period, not just usage.
06Mobile behaviour
On mobile, keep meters out of the way until they matter, and keep the limit explanation short with one clear next step.
Mobile rules
- Hide meters below 80%; show a compact “212 credits left” line near the action above it.
- At the limit, use a bottom sheet with the reason, the reset date and up to two actions.
- Link to the billing page for full details instead of rendering every meter.
07States
Normal
Meter with used, limit and reset date. No alerts.
Approaching
At 80%: meter turns amber, admins notified once.
Limit reached
Action blocked with reason and options; existing work untouched.
Over limit (soft)
Allowed to continue, with overage charge stated: “$0.02 per extra credit”.
Upgraded
New limit applied immediately; blocked action can be retried.
Reset
New period starts; meter returns to zero; any block lifted.
08Edge cases
EC-01
Limit hit mid-task
An AI generation runs out of credits halfway through.
Recommendation
Let the in-flight request finish (absorb the small overage) and block the next one. Never discard partial output because of a limit.
EC-02
Member hits a limit only admins can change
A member tries to create the 11th project on a 10-project plan.
Recommendation
Explain the limit and offer “Ask an admin to upgrade”, which notifies them. Don't show a checkout to someone who can't pay.
EC-03
Downgrade below usage
A team using 14 projects moves to a 10-project plan.
Recommendation
Keep existing projects readable but block new ones, and state which actions are limited. Never delete or hide data to enforce a limit.
EC-04
Usage counts that look wrong
A customer thinks they've used far fewer credits than shown.
Recommendation
Make the meter drill down: usage by day, by user or by feature. An unexplained number creates disputes.
EC-05
Usage delayed
Metering is processed in batches; the meter lags by an hour.
Recommendation
Show “Updated 40 minutes ago” on the meter so customers don't make decisions on stale numbers.
09Microcopy
Meter
Avoid
“78% used”
Prefer
“7,820 of 10,000 credits · resets 1 Dec”
Warning
Avoid
“You’re running low!”
Prefer
“You’ve used 80% of this month’s credits. 2,180 left until 1 Dec.”
Limit reached
Avoid
“Upgrade to continue”
Prefer
“You’ve used all 10,000 credits this month. They reset on 1 Dec, or upgrade for 50,000.”
Member at limit
Prefer
“Your plan allows 10 projects. Ask an admin to upgrade”
10Accessibility
- Use a meter or progressbar element with an accessible name and value text, e.g. “Credits: 7,820 of 10,000 used”.
- Never convey the warning level by colour alone; the text changes too.
- Disabled actions at the limit stay focusable or have adjacent text so the reason is reachable by keyboard and screen reader.
11Developer notes
- 01
Enforce limits on the server; the UI meter is informational and may lag.
- 02
Check limits before starting expensive work, and allow in-flight operations to complete.
- 03
Store usage in an append-only ledger and derive meters from it, so counts can be explained and audited.
- 04
Emit warning notifications once per threshold per period, not on every request above 80%.
12Implementation prompt
For Claude Code, Codex or Cursor
Implement usage meters and limit handling for the existing product. Requirements: - Usage meters showing "used of limit unit · resets date", with an accessible meter element. - Billing page: all meters with drill-down by day/user/feature and "updated X ago". - Contextual meter near consuming actions (e.g. "212 credits left this month"). - 80% threshold: amber state and a single admin notification per period. - At the limit: server-side enforcement; block the next action, not in-flight work; inline explanation with options (upgrade, add-on, wait for reset date). - Members without billing rights get "Ask an admin" which notifies admins. - Soft limits: allow overage with the price stated. - Upgrades apply immediately and the blocked action can be retried. - Downgrades below usage keep data readable and block only new creation. - Usage stored as an append-only ledger. - Mobile: hide meters below 80%; bottom sheet at the limit. Do not redesign the existing interface. Keep limit checks in a shared server-side module.