Staaarter

Billing Payment Success Confetti

A payment success screen for the moment right after checkout, pairing a checkmark with a small burst of colored dots arranged around it for a celebratory feel. The dots are static Tailwind-styled elements, not a canvas or JavaScript animation, so there's nothing to load or trigger. Built for the redirect target after a successful charge or subscription upgrade.

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

Docs

Installation

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

npx shadcn add https://staaarter.com/r/billing-payment-success-confetti.json

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

Usage

The file also exports billing88Demo, 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 { Billing88, billing88Demo } from "@/components/blocks/billing/billing88";

export default function Page() {
  return <Billing88 {...billing88Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Payment successful"Main headline.
messagestringnoneOptional supporting sentence under the heading.
amountstringnoneOptional amount charged, shown in a highlighted box.
planNamestringnoneOptional plan or billing cadence text under the amount.
ctaLabelstring"Go to dashboard"Label on the primary button.
ctaHrefstringnoneDestination for the primary button.
secondaryLabelstringnoneOptional label for a secondary text link, e.g. "View receipt".
secondaryHrefstringnoneDestination for the secondary link. Both secondaryLabel and secondaryHref must be set for the link to render.
classNamestringnoneExtra classes for the outer card.

Behavior notes

  • The confetti effect is a fixed set of small colored spans positioned around the checkmark with Tailwind position and rotation utilities, not an animation library or canvas element, so it renders identically on every page load with zero client-side JavaScript.
  • The amount/plan box only renders when at least one of amount or planName is passed, so the card still looks complete without transaction details.
  • The secondary link only renders when both secondaryLabel and secondaryHref are provided.
  • The decorative dots are wrapped in an aria-hidden span so screen readers skip straight to the heading and message.
  • This is a static, non-interactive component; there's no confetti trigger, timer, or replay action.

Frequently asked questions