Account Settings
Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.
Consumption in the order the questions arrive: the overage warning first because it is time-critical, then the meters, then what actually happens at each limit.
app/usage-page.tsxnpx hoverlab add usage-page
Or over MCP, from your editor's agent — no account needed.
Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.
This billing period, with what happens at each limit rather than only how close you are to it.
Everything is still running. You are being billed for the overage, and this is what it looks like so far.
Projected from 6 GB a day over 21 days so far. It is a straight line, not a forecast — a quiet week moves it.
Upgrading is usually cheaper than paying overage at this volume. Capping stops the charges and starts returning 429s — some teams genuinely prefer that, and it is a real option rather than a threat.
Resets 1 September
You are over the limit on at least one quota. Overage is billed at the end of the period.
84% of your limit used
80% of your limit used
94% of your limit used
28 GB over your limit
No limit on this plan
2,110credits available
320 credits from monthly allowance expire in 1 days; 150 credits from launch bonus expire in 3 days. They are spent last, so use them before buying more.
320 / 500
Included with Pro+. Resets on the 1st and does not roll over. Expires .
1,640 / 2,000
Purchased 12 August 2026. Never expires.
150 / 250
Granted with your first purchase. Expires .
Credits are spent from the top of this list down, so the allowance included with your plan is used before anything you paid for.
Pricing tables list what a plan includes. They rarely say what happens at the limit, which is the thing that decides whether a limit is survivable.
The real page, rendered in your current theme — every section below is a live block, not a screenshot.
Only want one section? Open it and copy that block instead — browse Billing & Usage.
Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.
/**
* What the account has consumed, and what happens when it runs out.
*
* A usage screen is a meter and, almost always, nothing else. The meter
* answers "how much have I used" and leaves the two questions that
* actually bring someone here: am I about to be charged, and what happens
* at the line.
*
* So the page runs in the order those questions arrive. The overage notice
* is first because it is the only part that is time-critical — a warning
* below the fold is a warning that arrives with the invoice. The meters
* come second, the credit balance third, and the limits table last.
*
* The obvious wrong answer is meter-first with the consequences on a
* linked pricing page. Someone reading a usage screen is already worried;
* sending them to marketing for the answer is where the support email is
* written.
*
* The limits panel is the part most products never build, and it is the
* one that makes the rest safe to read: a soft limit and a hard limit look
* identical on a progress bar.
*/
import * as React from 'react'
import { UsageOverageNotice } from '@/components/usage-overage-notice'
import { UsageMeterPanel } from '@/components/usage-meter-panel'
import { BillingCreditBalance } from '@/components/billing-credit-balance'
import { PlanLimitsList } from '@/components/plan-limits-list'
export default function UsagePage() {
return (
<main className="min-h-screen bg-background text-foreground">
<section className="mx-auto w-full max-w-5xl px-6 pb-2 pt-12">
<h1 className="text-2xl font-bold tracking-tight">Usage</h1>
<p className="mt-1 text-sm text-muted-foreground">
This billing period, with what happens at each limit rather than
only how close you are to it.
</p>
</section>
{/*
Time-critical first — see the note above.
The notice is pointed at Bandwidth deliberately, because that is
the quota the meter panel below already shows over its limit
(128 of 100 GB). Left on its own defaults the two blocks disagreed
on the same screen — the notice said API requests were 140% over
while the meter said they were at 84% — which reads as a bug in the
product rather than as two components with independent demo data.
Composing blocks means reconciling their examples.
*/}
<UsageOverageNotice
metricLabel="Bandwidth"
included={100}
used={128}
unit="GB"
ratePerUnit={0.09}
rateUnitSize={1}
/>
<UsageMeterPanel />
<BillingCreditBalance />
<PlanLimitsList />
</main>
)
}
components/ — each block page has its own copy button.app/usage-page.tsx. The imports already point at @/components/…, so they resolve with no edits.The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.
Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.
Plan, quota meters and invoice history, with the upgrade prompt placed beside a bar that is nearly full rather than on the plan card.
Billing history laid out for finance rather than for the user — a retrieval screen, so the table leads and the payment method comes last.
Notifications from the receiving end: the inbox you arrived from, per-event and per-channel control, and the push prompt asked after the decision rather than on arrival.
The admin screen a security questionnaire is really asking about — seats with the bill shown first, invitations, scopes split from bundles, sharing stated as its consequence, live sessions, and the audit trail underneath.
Both directions, because only one of them is usually built: a radiogroup with the prorated charge announced as it changes, and a cancellation with the end date, what breaks, and one honest alternative offered once.