Fixing the Missing Billing Page: What Changed in v1.0.41
Fixing the Missing Billing Page: What Changed in v1.0.41
Background
In v1.0.41 we closed a navigation gap that affected every user trying to manage their subscription. The dashboard sidebar had a Feedback link (backed by a real page at /dashboard/feedback) but no Billing link — even though billing functionality existed inside the Settings page. This inconsistency meant there was no discoverable route from the sidebar to /dashboard/billing, and Stripe redirects had nowhere clean to land.
The Problem in Detail
When a user completes or cancels a Stripe Checkout or Customer Portal session, Stripe redirects them back to your application with query parameters such as ?success=true or ?canceled=true. Without a dedicated billing page, there was no reliable place to:
- Receive and parse those query parameters.
- Show the user an appropriate success or cancellation message.
- Surface further billing actions (e.g. opening the portal again, viewing plan details).
The BillingPortalButton component existed, but it was reachable only by navigating manually to /dashboard/settings. Nothing in the sidebar pointed users there for billing purposes.
What Was Added
Billing Link in the Sidebar
The sidebar navigation in src/app/dashboard/layout.tsx now includes a Billing entry alongside the other dashboard links. Users can navigate directly to /dashboard/billing at any time — no more hunting through Settings.
Dashboard
├── Overview
├── Courses
├── Members
├── Settings
├── Billing ← new
└── Feedback
Dedicated Billing Page (/dashboard/billing)
A new page at src/app/dashboard/billing/page.tsx now serves as the canonical billing destination. It is responsible for:
- Stripe redirect handling — reads
?success=trueor?canceled=truequery params and displays contextual feedback (e.g. "Your subscription has been updated" or "Checkout was cancelled"). - Billing actions — surfaces the
BillingPortalButtonso users can open the Stripe Customer Portal from a clearly labelled billing context. - Clean separation of concerns — billing management is no longer mixed into the general Settings page.
How Stripe Redirects Work Now
When you configure your Stripe Checkout or Customer Portal session, set the return_url / success_url / cancel_url to:
https://your-app.com/dashboard/billing?success=true
https://your-app.com/dashboard/billing?canceled=true
The /dashboard/billing page reads those query parameters on load and renders the appropriate UI state, so users always land on a page that acknowledges what just happened.
Upgrade Notes
- No breaking changes. Existing links to
/dashboard/settingscontinue to work. - If you have hardcoded Stripe
success_urlorreturn_urlvalues pointing to/dashboard/settings, update them to/dashboard/billingto take advantage of the new redirect-handling logic. - The
BillingPortalButtonremains available on the Settings page as well, so no existing user flows are removed.