Wires up the missing frontend billing surfaces that TrialPill, UpgradePrompt,
NextStepCard, and SetupChecklist all link to. Trial-expired, canceled,
past-due, and "Pick a plan" CTAs no longer 404.
- BillingPage: subscription summary, status-specific messaging
(trialing / past_due / canceled / complimentary), Manage billing button
routed through the Stripe Customer Portal, and a Pick/Change-plan link.
- SelectPlanPage: plan picker with monthly/annual toggle + seat count.
Starter/Pro hit /billing/checkout-session; Enterprise links to
/contact-sales. Active current plan is tagged "Current plan" with a
disabled CTA.
- billingApi.getPortalSession + createCheckoutSession; getPortalSession
surfaces a typed BillingPortalError (no_stripe_customer / stripe_not_
configured) so the UI can show the right toast.
- AccountSettingsPage gets a Billing link card so the page is discoverable
from the account hub.
- 10 new vitest cases covering subscription summary, trial/past-due/
canceled/complimentary states, portal-session error fallback, plan-card
rendering, checkout payload, and current-plan badge.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>