Account Settings
Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.
Both directions, because only one of them is usually built: a radiogroup with the prorated charge announced as it changes, and a cancellation with the end date, what breaks, and one honest alternative offered once.
app/plan-change-page.tsxnpx hoverlab add plan-change-page
Or over MCP, from your editor's agent — no account needed.
Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.
Both directions, with the charge shown before the button and the end date shown before the cancellation.
Changes take effect immediately. Downgrades credit the unused remainder against your next invoice.
You can do this yourself, right here, and it takes one click once you have read what happens.
The real page, rendered in your current theme — every section below is a live block, not a screenshot.
Only want one section? Open it and copy that block instead — browse Pricing.
/**
* Changing a plan, including downwards.
*
* `billing-page` shows what someone is on. This is the screen where they
* change it, and the reason it is a separate page is the third block.
*
* Almost every billing UI ships the upgrade path and treats cancellation as
* a support ticket. That asymmetry is the design: make leaving annoying
* enough and some fraction stays. It also produces chargebacks, one-star
* reviews, and — since June 2025 in the EU and under the FTC's click-to-
* cancel rule in the US — a regulatory problem, because cancellation is
* required to be no harder than signing up.
*
* picker a native radiogroup with the current plan disabled and the
* prorated charge announced as the selection changes, so the
* number is known before the button is pressed
* cancel the exact date access ends, what breaks, one honest
* alternative offered once
* confirm the irreversible step, stated as what it does
*
* The one honest alternative is the line worth defending. Offering a pause
* or a downgrade at the moment of cancellation is legitimate and often what
* the person actually wanted. Offering four of them, each behind its own
* click, is a retention funnel wearing a helpfulness costume — and the
* difference between the two is entirely in the count.
*/
import * as React from 'react'
import { PricingPlanPicker } from '@/components/pricing-plan-picker'
import { SubscriptionCancelFlow } from '@/components/subscription-cancel-flow'
import { ConfirmDialog } from '@/components/confirm-dialog'
export default function PlanChangePage() {
return (
<main className="min-h-screen bg-background text-foreground">
<section className="mx-auto w-full max-w-5xl px-6 pb-2 pt-12">
<h1 className="text-2xl font-bold tracking-tight">Change plan</h1>
<p className="mt-1 text-sm text-muted-foreground">
Both directions, with the charge shown before the button and the
end date shown before the cancellation.
</p>
</section>
<PricingPlanPicker />
{/* As easy to leave as it was to arrive. */}
<SubscriptionCancelFlow />
<ConfirmDialog />
</main>
)
}
components/ — each block page has its own copy button.app/plan-change-page.tsx. The imports already point at @/components/…, so they resolve with no edits.The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.
Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.
Plan, quota meters and invoice history, with the upgrade prompt placed beside a bar that is nearly full rather than on the plan card.
Consumption in the order the questions arrive: the overage warning first because it is time-critical, then the meters, then what actually happens at each limit.
Billing history laid out for finance rather than for the user — a retrieval screen, so the table leads and the payment method comes last.
Notifications from the receiving end: the inbox you arrived from, per-event and per-channel control, and the push prompt asked after the decision rather than on arrival.
The admin screen a security questionnaire is really asking about — seats with the bill shown first, invitations, scopes split from bundles, sharing stated as its consequence, live sessions, and the audit trail underneath.