Staaarter

Billing Receipt Email Preview

A receipt preview styled like an automated billing email, with a company header, a Paid badge, a list of line items, and a subtotal/discount/tax/total breakdown. Meant for a dashboard preview of what a customer's receipt email looks like, not for sending the actual email.

By Staaarter Team
Billing
Updated June 1, 2026
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/billing-receipt-email-preview.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/billing/billing109.tsx instead.

Usage

The file also exports billing109Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Billing109, billing109Demo } from "@/components/blocks/billing/billing109";

export default function Page() {
  return <Billing109 {...billing109Demo} />;
}

Props

PropTypeDefaultDescription
companyNamestring"Staaarter"Name shown next to the receipt icon in the header.
receiptNumberstringnoneReceipt identifier shown under the header.
datestringnoneDate the receipt was sent, already formatted.
customerEmailstringnoneRecipient email shown in the 'Sent to' line.
itemsReceiptLineItem[]noneLine items rendered in the order given.
subtotalstringnoneSubtotal amount, already formatted as currency.
discountstringnoneOptional discount line, omitted when not passed.
taxstringnoneOptional tax line, omitted when not passed.
totalstringnoneTotal amount, shown in bold at the bottom of the breakdown.
paymentMethodLabelstringnoneOptional footer text describing what was charged, e.g. "Visa ending in 4242".
classNamestringnoneExtra classes for the outer container.

Types

interface ReceiptLineItem {
  description: string;
  amount: string;
}

Behavior notes

  • Every amount (subtotal, discount, tax, total, and each line item) is a plain string, so currency formatting and symbol placement are entirely up to the caller.
  • The discount and tax rows only render when their prop is passed, so a receipt with no discount or no tax simply omits that row instead of showing a zero.
  • The payment method footer only renders when paymentMethodLabel is passed; otherwise the card ends after the totals.
  • This is a static preview component with no state; it does not send an email or fetch receipt data itself.

Frequently asked questions