Account Settings
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.
app/billing-page.tsxnpx hoverlab add billing-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.
Your plan, what you have used, and everything you have been charged.
Your plan, your next charge and how it is paid.
Current plan
Team$490/month
Next charge
$490.00
on 1 September 2026
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
Every charge on this account. PDFs are available for seven years.
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 Dashboards.
Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.
/**
* The billing screen — plan, usage, invoices.
*
* Ordered by the question a user arrived with. "What am I paying" comes
* first; "why" comes second, because usage only means something once the
* plan's limits are on screen; "what have I paid before" comes last, since
* history is a lookup rather than a check.
*
* The usage panel is given the upgrade link rather than the plan panel.
* Upgrade prompts land when a user is looking at a bar that is nearly full,
* not when they are looking at a card that says what they already chose.
*/
import * as React from 'react'
import { DashboardShell } from '@/components/dashboard-shell'
import { DashboardPageHeader } from '@/components/dashboard-page-header'
import { BillingPlanSummary } from '@/components/billing-plan-summary'
import { UsageMeterPanel } from '@/components/usage-meter-panel'
import { InvoiceHistoryTable } from '@/components/invoice-history-table'
export default function BillingPage() {
return (
<DashboardShell activeLabel="Settings">
<DashboardPageHeader
title="Billing"
description="Your plan, what you have used, and everything you have been charged."
crumbs={[{ label: 'Settings', href: '#' }, { label: 'Billing' }]}
tabs={[]}
primaryAction={undefined}
secondaryAction={{ label: 'Download all invoices' }}
/>
<div className="mt-6 space-y-6">
<BillingPlanSummary />
{/* Upgrade prompt lives here — beside a bar that is nearly full. */}
<UsageMeterPanel upgradeHref="/pricing" />
<InvoiceHistoryTable />
</div>
</DashboardShell>
)
}
components/ — each block page has its own copy button.app/billing-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.
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.
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.