Skip to content

Billing & Usage Screen

Plan, quota meters and invoice history, with the upgrade prompt placed beside a bar that is nearly full rather than on the plan card.

5 blocks44 lineslucide-reactAdded 8 Aug 2026

What's included

  • app/billing-page.tsx
  • 5 blocks it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab add billing-page

Or over MCP, from your editor's agent — no account needed.

License

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.

Was this useful?

Preview

Billing

Your plan, what you have used, and everything you have been charged.

Billing

Your plan, your next charge and how it is paid.

Current plan

Team$490/month

  • Up to 10 seats
  • SSO and audit log
  • Priority support
  • Invoice billing

Next charge

$490.00

on 1 September 2026

Payment method

Visa ending 4242Expires 09/28

Manage billing

Usage this period

Resets 1 September

Upgrade plan

You are over the limit on at least one quota. Overage is billed at the end of the period.

  • API requests842,000 / 1,000,000

    84% of your limit used

  • Team seats8 / 10

    80% of your limit used

  • Storage47 GB / 50 GB

    94% of your limit used

  • Bandwidth128 GB / 100 GB

    28 GB over your limit

  • Projects23of unlimited

    No limit on this plan

Invoice history

Every charge on this account. PDFs are available for seven years.

Billing portal
Invoice history
InvoiceDateStatusAmountDownload
INV-2026-0812Team plan — AugustPaid$490.00
INV-2026-0745Team plan — JulyPaid$490.00
INV-2026-0698Additional seats (3)Refunded$147.00
INV-2026-0671Team plan — JuneFailed$490.00
INV-2026-0602Pro plan — MayPaid$190.00

The real page, rendered in your current theme — every section below is a live block, not a screenshot.

Built from

All blocks
  1. Sidebar Dashboard ShellSidebar, top bar and scrollable content slot, with a mobile drawer that closes on Escape and marks the active route.
  2. Page Header With TabsBreadcrumb, title, action buttons and a counted tab row that sits flush with the bottom rule.
  3. Plan & Next Charge SummaryCurrent plan, next charge with an actual figure and date, payment method, and a prominent pending-cancellation state.
  4. Quota & Usage MetersConsumption against plan limits, with warning thresholds, honest overage display and unmetered quotas that do not fake a bar.
  5. Invoice HistoryPast invoices with tabular figures, worded statuses rather than bare coloured dots, and per-invoice download labels.

Only want one section? Open it and copy that block instead — browse Dashboards.

Shipped in these templates

Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.

Source

app/billing-page.tsx
/**
 * 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>
  )
}

How to use it

  1. 1. Copy each of the 5 blocks above into components/ — each block page has its own copy button.
  2. 2. Drop this file at app/billing-page.tsx. The imports already point at @/components/…, so they resolve with no edits.
  3. 3. Delete the sections you do not want. Every block takes props, so the copy changes without the layout moving.

For AI

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.

See the prompt

More Account & Billing

Open the full page for this page

Account Settings

Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.

Account & Billing5 blocks39 lines
Open the full page for this page

Usage & Limits

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.

Account & Billing4 blocks66 lines
Open the full page for this page

Invoices

Billing history laid out for finance rather than for the user — a retrieval screen, so the table leads and the payment method comes last.

Account & Billing3 blocks41 lines
Open the full page for this page

Notification Settings

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.

Account & Billing5 blocks59 lines
Open the full page for this page

Team & Access

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.

Account & Billing6 blocks61 lines
Open the full page for this page

Change Plan

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.

Account & Billing3 blocks52 lines