Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Cancellation Runway Success Block for React

A confirmation page for a cancelled subscription: a ring counting the days of paid access still ahead, the day access ends, the reason given quoted back, and a Reactivate button that turns the page in place.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Show people how much of what they paid for is still theirs with this confirmation page for React with Base UI. It's the page Cadencerun, a running-coach app, shows once a plan is cancelled: the page's side rails and one band, with a single narrow centred column. A check in a tile, the heading and one sentence, then the runway: a Circular Progress ring of the days of the paid period still ahead (19 of 30) with the day access ends beside it, a short list of what happened and the reason the visitor gave, quoted back. The one Shine Button, Reactivate, turns the page in place into "Cadencerun Pro is active again", and a Download Trigger styled as an outline Button saves a small JSON file of the account's history. The frame's lines are drawn by Guides. For subscription cancellations, win-back flows and any ending that leaves time on the clock.

FAQ

What stays in the page, and how do I wire it for real?

Nothing was cancelled or reactivated. The account, the reason and every date are typed or worked out from AS_OF, PERIOD_START and ACCESS_ENDS, and Reactivate only changes this page, saying so in a polite status line ("Plan reactivated in this demo. Nothing was changed or charged."). To wire it, post to your reactivation endpoint from reactivate, then build the period and the reason from what your billing API returns for the cancelled subscription.

Where do 19 days and the ring come from?

From the dates. The days to go are the whole days, counted in UTC, between the typed AS_OF and the last day of access; the period length is the days between its first day and that last day, and the ring is filled to that share (63%). Nothing reads the clock, so the page says the same on the server and on every visitor's device. The ring is drawn with the catalog Circular Progress and hidden from assistive technology; the caption beside it says the same thing in words.

What happens when I press Reactivate?

The page turns in place into "Cadencerun Pro is active again": both states sit in one grid cell, so the page keeps its height and the centred heading doesn't move. Focus moves to the new heading, the ring now counts down to the renewal, the list shows the next charge, and the primary becomes a link back into the app, with a quiet button to cancel again so the demo can be repeated. The state that isn't showing is invisible and inert.

Does Export my data really work?

Yes, it uses what the browser offers. The Download Trigger builds a small JSON file from the typed account details and saves it as a sample, named so, and the status line says it holds no real runs. In your app, build the file from the account's real export.

How does it look on a phone?

The column keeps its order, the ring and the quote stay and the two buttons stack, the primary first and full width, pinned to the bottom of the screen so it stays in reach; from the small breakpoint up they sit side by side in the flow. The quoted reason is cut to two lines on a phone.

  • Pro

    Cancel Retention Billing

    Upsell and retention

    A cancel flow in three steps: a reason picker, an offer that matches it (half off for three months, or a pause), and a last page with the exact end date, each step taking focus and every outcome ending on a confirmation.

  • Pro

    Pause Subscription Billing

    Upsell and retention

    Pause instead of cancelling: one, two or three months as choice cards, the resume date and first charge worked out, a timeline that grows with the choice, what stays available while paused, and one button that pauses and resumes.

  • Pro

    A confirmation page for a scheduled account deletion: what was switched off, a 30-day bar cut at day 14 into a restore zone and a removal zone, a Cancel deletion button that flips the page in place and a data download.

  • Pro

    A confirmation page for moving from Pro to Free: what was scheduled, two cards with the workspace's three limits as bars (solid up to a cut mark, hatched beyond it) and an optional row of reason chips.

  • Pro

    Current Plan Billing

    Plan and usage

    The account's current plan in app settings: plan, price, renewal date and card, a change-plan action, every quota's usage this period on shared hairlines, and the next invoice.

  • Pro

    Refund Timeline Success

    Payments and refunds

    A confirmation page for a refund: the amount in the headline, ten business days drawn on an axis with the days the bank usually posts it, and a list of the refund, the card and a reference you can copy.