## Summary
Let users upgrade, change, or cancel their subscription from the product (Account / billing UX), not only via opaque Stripe flows.
## Context
- Account already has Billing with Stripe Customer Portal (`Manage subscription`) and checkout for unpaid users.
- Plan & usage lives on Account; users will expect clear actions next to limits (upgrade when capped, change plan, cancel).
## Goals
1. **Upgrade** — discover higher plans, compare quotas/price, start upgrade checkout or portal flow.
2. **Change plan** — switch between public selectable plans (upgrade/downgrade) with clear confirmation of quota/price changes and when they take effect.
3. **Cancel** — cancel subscription (end of period vs immediate per product policy), with confirmation and post-cancel access messaging.
## Proposed approach
- Prefer Stripe Customer Portal / Checkout where possible for PCI and dunning.
- Surface primary CTAs on Account (Usage card + Billing): Upgrade / Change plan / Cancel.
- If portal covers change+cancel today, improve in-app copy and deep-links; add plan comparison UI if portal alone is insufficient.
- Coordinate with backend finance APIs (list plans, create checkout for plan change, portal session).
## Acceptance criteria
- [ ] Paid user can open a clear path to upgrade to a higher plan.
- [ ] Paid user can change to another selectable plan (or documented limitation if Stripe portal-only).
- [ ] Paid user can cancel; UI states remaining access until period end (or immediate, if product chooses).
- [ ] Complimentary / no-checkout users see appropriate messaging (no fake cancel).
- [ ] Errors and loading states handled; analytics events for upgrade/change/cancel intents.
## Out of scope (unless needed)
- Admin-granted plan overrides UX
- Refunds / proration policy docs beyond linking Stripe
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Let users upgrade, change, or cancel their subscription from the product (Account / billing UX), not only via opaque Stripe flows.
Context
Manage subscription) and checkout for unpaid users.Goals
Proposed approach
Acceptance criteria
Out of scope (unless needed)