Bug Fixes
- replace useEffect setState with derived state for GSTIN initialization
- track auto-verify by subscription ID so plan switches trigger re-verify
- add safe JSON parsing and network error handling to ApiClient
- improve auth and server error messages with actionable guidance
- force refetch after checkout and open checkout on plan change requiring re-auth
- handle UPI subscriptions by cancel+recreate when plan update fails
Features
- add billing history section, GSTIN input on pricing card, and pre-fill from business settings
- add switch plan CTA with confirmation dialog in current plan card
- auto-verify CREATED subscriptions on page load and add dev tools for trial/sync
- redesign billing page with pricing cards, monthly/yearly toggle, and comprehensive feature list
- add shared error categorization handler for tool responses
- add Chrome extension and MCP server to premium plan features
- add BillingPeriod enum and billingPeriod field to Subscription model
- add migration for billing period field
- accept billingPeriod param and select monthly/yearly Razorpay plan
- add change-plan API to switch between monthly/yearly via Razorpay
- add dev-only subscription reset endpoint for testing
- add invoices API to fetch billing history from Razorpay
- add PATCH endpoint to force-end trial and set subscription active
- add useChangePlan hook for switching billing period
- add useInvoices hook, GSTIN support in create mutation, and gstNumber in response type
- add useVerifySubscription and useDevEndTrial hooks, return status from verify
- create Razorpay customer with GSTIN and save to business on subscribe
- include business gstNumber in subscription GET response
- pass billingPeriod to create mutation and add dev-reset hook
- pass GSTIN via Razorpay customer when recreating subscription on plan change
