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
| Scenario | Current Behaviour | Expected Behaviour |
|---|---|---|
Learner SSO redirect lands on / | Sees placeholder marketing page | Redirected to /{orgSlug}/courses |
| Learner bookmarks root URL | Sees placeholder marketing page | Redirected to /{orgSlug}/courses |
Admin visits / | Sees placeholder marketing page | Redirected 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_uriper 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.