Skip to content

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.

3 blocks41 lineslucide-reactAdded 9 Sept 2026

What's included

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

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab add invoices-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

Invoices

Every charge, downloadable as a PDF. Nothing here needs an account on the product itself.

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

Invoice INV-2026-0841

paid

Issued 31 August 2026 · Due 14 September 2026

Download PDF

Billed to

Acme Corp14 Bridgewater StreetManchester M1 5ANUnited Kingdom
Invoice number
INV-2026-0841
Tax registration
GB 123 4567 89
Payment method
Visa ending 4242
DescriptionQtyUnitAmount
Studio plan — 40 seats1 Aug – 31 Aug 202640$12.00$480.00
Unused time on Team plan20 Aug – 31 Aug 202624$12.00-$103.20
Remaining time on Studio plan20 Aug – 31 Aug 202640$12.00$172.00
AI credit pack — 2,000 credits1$15.00$15.00
Subtotal$563.80
VAT (United Kingdom) at 20%$112.76
Total$676.56

Payment methods

Receipts and failed-payment notices go to billing@acme.com.

  • Visa ending 4242Default

    Expires 11/2026

  • Mastercard ending 5100

    Expires 03/2029

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

Built from

All blocks
  1. Invoice HistoryPast invoices with tabular figures, worded statuses rather than bare coloured dots, and per-invoice download labels.
  2. Invoice DetailOne invoice with the arithmetic shown: proration split into a credit and a charge with their own date ranges, tax as a line with its jurisdiction, and totals in a real tfoot.
  3. Payment Methods On FileCards on file with the two failures that cost the subscription: expiry called out before it fails, and the default stated on the row rather than implied by ordering.

Only want one section? Open it and copy that block instead — browse Billing & Usage.

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/invoices-page.tsx
/**
 * Billing history, for the person who did not buy the product.
 *
 * The reader here is usually finance, not the user — they arrived from an
 * email asking for a receipt, they do not know the product, and they want
 * one document. That reframes the whole layout: this is a retrieval
 * screen, not a dashboard.
 *
 * So the history table leads, an expanded invoice sits under it as the
 * shape of what a row opens into, and the payment method is last. The
 * obvious wrong answer is card-first, which is what a product-led design
 * does because the card is the thing the *user* changes — and it is the
 * one thing finance does not need.
 *
 * The detail block is on the page rather than behind a modal for the same
 * reason: an invoice is printed and forwarded, and a modal is neither.
 */

import * as React from 'react'
import { InvoiceHistoryTable } from '@/components/invoice-history-table'
import { BillingInvoiceDetail } from '@/components/billing-invoice-detail'
import { PaymentMethodCard } from '@/components/payment-method-card'

export default function InvoicesPage() {
  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">Invoices</h1>
        <p className="mt-1 text-sm text-muted-foreground">
          Every charge, downloadable as a PDF. Nothing here needs an account
          on the product itself.
        </p>
      </section>

      <InvoiceHistoryTable />
      <BillingInvoiceDetail />
      <PaymentMethodCard />
    </main>
  )
}

How to use it

  1. 1. Copy each of the 3 blocks above into components/ — each block page has its own copy button.
  2. 2. Drop this file at app/invoices-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

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.

Account & Billing5 blocks44 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

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