All Docs
FeaturesCSI Teachable Replacement AppUpdated March 15, 2026

Root `/` Page: Placeholder Content & Tenant Routing Gap

Root / Page: Placeholder Content & Tenant Routing Gap

Status: Known issue — fix in progress as of v1.0.53.

Background

The platform is a B2B multi-tenant LMS where learners access their organisation's course catalog through a dedicated URL path (/{orgSlug}/courses). Authentication is handled entirely via SSO — learners do not create standalone credentials and are not expected to interact with a generic marketing homepage.

During a review in v1.0.53, the root / route (src/app/page.tsx) was found to be rendering scaffold/placeholder content that is not suitable for production.

What Was Found

Placeholder Copy

The page currently displays:

CSI Teachable Replacement App — We are building a B2B multi-tenant SaaS platform...

Feature descriptions on the page are truncated with ..., confirming the content was never replaced after initial scaffolding.

Missing Tenant Disambiguation

For this platform's architecture, / has no meaningful role in the learner journey:

  • Learners authenticate via SSO and should land directly on /{orgSlug}/courses.
  • There is no logic on / to detect which organisation a user belongs to.
  • There is no redirect to an appropriate org-scoped URL.
  • A learner arriving at / — through a misconfigured redirect URI, bookmark, or direct link — reaches a dead end.

Impact

ScenarioCurrent BehaviourExpected Behaviour
Learner SSO redirect lands on /Sees placeholder marketing pageRedirected to /{orgSlug}/courses
Learner bookmarks root URLSees placeholder marketing pageRedirected to /{orgSlug}/courses
Admin visits /Sees placeholder marketing pageRedirected to admin dashboard or org catalog

Recommended Fixes

Option 1: Cookie-Based Redirect (Client or Middleware)

If the SSO onboarding flow sets an x-org-slug cookie upon successful authentication, the root page (or a Next.js middleware) can use it to redirect returning users:

// middleware.ts (example)
import { NextRequest, NextResponse } from 'next/server';

export function middleware(req: NextRequest) {
  const orgSlug = req.cookies.get('x-org-slug')?.value;
  if (req.nextUrl.pathname === '/' && orgSlug) {
    return NextResponse.redirect(new URL(`/${orgSlug}/courses`, req.url));
  }
}

export const config = { matcher: ['/'] };

This ensures any user with an established session is sent directly to their organisation's course catalog.

Option 2: Fix the SSO Post-Login Redirect URI

The more robust long-term fix is to ensure the identity provider (IdP) redirect URI is always configured as /{orgSlug}/courses rather than /. This means:

  • The SSO onboarding flow must write the correct redirect_uri per organisation at configuration time.
  • Learners never touch the root page during normal use.

Option 3: Finalise the Root Page Copy

If the root page is intentionally kept (e.g. for public marketing or admin entry), all placeholder text must be replaced with production-ready copy and the truncated feature descriptions must be completed before the page is served to end users.

Files Affected

  • src/app/page.tsx — contains placeholder hero text and no tenant routing logic.

Related