Summary
Subscription billing: provider-agnostic library with local DB state, Stripe implementation, subscription management UI, billing settings, and a public pricing page.
Scope
- Billing library core — provider-agnostic interface. Models for plans, subscriptions, invoices, payment methods (state stored locally). Subscription lifecycle. Plan definitions with features and limits. Trial support.
- Stripe provider — implementation of the billing interface. Customer sync. Webhook handling for payment and subscription events (idempotent). Payment method management via Stripe Elements.
- Subscription management UI — subscribe, upgrade/downgrade with proration, cancel with grace period, resume. Current plan display with usage and limits.
- Billing settings — invoice history with PDF download. Update payment method. Update billing info. Separate billing email.
- Public pricing page — Livewire page with plan comparison cards, feature lists, annual/monthly toggle. CTAs link to sign-up with the selected plan pre-selected.
Acceptance criteria
- Teams (or users, per scoping decision) can subscribe to a plan and pay via Stripe
- Plan changes apply immediately with correct proration
- Cancellations enter a grace period and can be resumed before expiry
- Webhooks keep local subscription/invoice state in sync with Stripe
- Public pricing page renders all plans with working CTAs
- Invoices are listed and downloadable as PDFs
- The billing library can be swapped to another provider without changing app code
Summary
Subscription billing: provider-agnostic library with local DB state, Stripe implementation, subscription management UI, billing settings, and a public pricing page.
Scope
Acceptance criteria