Billing Subscription Re Activation Offer
A win-back offer card for bringing churned subscribers back, typically shown on an account page or in an email landing page after cancellation. It pairs a discount badge with an expiry label, an optional list of what the customer has missed since leaving, and a single prominent reactivate button. The expiry is a display label the caller computes, so the block has no ticking timer or client-side date math.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge, button dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/billing-subscription-re-activation-offer.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/billing/billing132.tsx instead.
Usage
The file also exports billing132Demo, 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 { Billing132, billing132Demo } from "@/components/blocks/billing/billing132"; export default function Page() { return <Billing132 {...billing132Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| eyebrow | string | "Welcome back" | Small label above the heading. |
| heading | string | none | Main headline; omitted if not passed. |
| message | string | none | One or two lines of supporting copy under the heading. |
| discountLabel | string | none | Description of the offer, for example "30% off for 3 months". |
| expiresLabel | string | none | Display text for the offer's expiry, for example "Expires in 47h"; a plain string, not a live countdown. |
| missedFeatures | string[] | [] | Optional list of features or improvements shipped since the customer canceled. |
| reactivateLabel | string | "Reactivate my plan" | Label on the primary call-to-action button. |
| reactivateHref | string | "#" | Destination for the reactivate button. |
| className | string | none | Extra classes for the outer container. |
Behavior notes
- expiresLabel is a static string, not a live countdown; recompute and re-render it yourself on an interval if you want the displayed time to tick down.
- The missed-features list is only rendered when at least one entry is passed, so the card also works as a lean discount-only offer with nothing set.
- The reactivate button is a next/link, not a fetch call, so point reactivateHref at a checkout or reactivation route that applies the discount server-side.
- The card uses a subtle primary-tinted gradient background to visually separate it from neutral billing cards, since it's meant to read as a special, time-bound offer.
- There's no dismiss action built in; add one around the component if you want customers to be able to close the offer without reactivating.
Frequently asked questions
More Billing Blocks
View all →Billing Invoice List
Invoice history table with status badges, formatted amounts, and a per-row download link, built with shadcn/ui and Tailwind CSS.
Billing Failed Payment Alert
High-contrast failed-payment alert with a message, a retry button, and an optional update-payment-method button, built with shadcn/ui and Tailwind CSS.
Billing Credit Balance
Compact credit balance card with a large total, an optional purchased-versus-promotional breakdown, a low-balance notice, and a top-up button.
Billing Payment Methods
A saved payment method list for React and Next.js with brand icons, a default badge, near-expiry warnings, and remove/set-default actions per row.
Billing Add Card
A card entry form for React and Next.js with auto-formatted fields, internal brand detection, and per-field validation feedback built with shadcn/ui and Tailwind CSS.
Billing Coupon Code
An inline promo code input for React and Next.js with a simulated loading state, an applied summary showing the discount amount, and an invalid-code message.