Staaarter

Billing Promotion Banner

A promotion banner for billing and checkout pages, pairing a headline and short description with a visible discount code and a call-to-action button. Meant for seasonal sales, trial-to-paid conversion pushes, or upgrade nudges shown above billing settings or inside the checkout flow.

By Staaarter Team
Billing
Updated April 18, 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-promotion-banner.json

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

Usage

The file also exports billing103Demo, 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 { Billing103, billing103Demo } from "@/components/blocks/billing/billing103";

export default function Page() {
  return <Billing103 {...billing103Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstring"Limited-time offer"Small uppercase label above the title.
titlestringnoneMain promotion headline.
descriptionstringnoneOptional sentence under the title explaining what the offer covers.
discountCodestringnoneOptional code shown in a dashed-border badge. Omit it for offers with no code to enter.
expiresLabelstringnoneOptional plain-text expiration note, for example "Offer ends in 3 days".
ctaLabelstring"Apply discount"Label on the call-to-action button.
ctaHrefstringnoneLink the CTA button points to.
classNamestringnoneExtra classes for the outer container.

Behavior notes

  • This is a static banner: the discount code, expiration text, and CTA are all plain props, not live state, so nothing updates itself after render.
  • expiresLabel is a plain string you compute and pass in, there's no built-in countdown timer that ticks down in the browser.
  • The discount code renders in a dashed-border badge only when discountCode is set; leave it out for banners that link straight to a discounted plan with no code to enter.
  • The CTA is a next/link styled as a button, so it navigates directly. Point it at your checkout or upgrade page, or swap in an onClick handler in your own client wrapper if applying the code needs a network call first.
  • Layout stacks vertically on narrow screens and goes side-by-side from the sm breakpoint up.

Frequently asked questions