All Docs
FeaturesCSI Teachable Replacement AppUpdated March 15, 2026

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:

  1. Receive and parse those query parameters.
  2. Show the user an appropriate success or cancellation message.
  3. 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=true or ?canceled=true query params and displays contextual feedback (e.g. "Your subscription has been updated" or "Checkout was cancelled").
  • Billing actions — surfaces the BillingPortalButton so 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/settings continue to work.
  • If you have hardcoded Stripe success_url or return_url values pointing to /dashboard/settings, update them to /dashboard/billing to take advantage of the new redirect-handling logic.
  • The BillingPortalButton remains available on the Settings page as well, so no existing user flows are removed.