📋 The Brief
The Problem: Building the Same LMS Over and Over Again
The client was a corporate training company delivering compliance, leadership and skills programmes to mid-market enterprises. Every time they signed a new corporate client, the client asked the same question: "Can we have this on our own platform with our branding?" The answer was always no — they were using an off-the-shelf LMS with no white-labelling capability.
They were losing deals because of it. Larger corporate clients expected a branded learning environment for their employees — not a generic platform with someone else's logo. The inability to white-label was costing them an estimated 30% of enterprise deals.
The brief was to build an LMS from scratch with white-labelling as a first-class architectural requirement — not a bolt-on. Each client tenant needed their own domain, their own complete visual identity, their own learner database with full data isolation, and the training company needed to be able to spin up a new branded environment for a new client in minutes, not weeks.
❌ Challenge
Off-the-shelf LMS had no white-labelling — losing 30% of enterprise deals to competitors who offered branded learning environments
✓ Solution
White-labelling as a first-class architectural feature — complete visual theming, custom domain, own branding, live in 15 minutes per client
❌ Challenge
Corporate clients had strict data requirements — learner progress and PII had to be completely isolated between tenants
✓ Solution
Database-per-tenant architecture with schema isolation — zero possibility of data leakage between client environments
❌ Challenge
Existing course content was in SCORM format — the new platform had to be able to import and run it without rebuilding everything
✓ Solution
Full SCORM 1.2, SCORM 2004 and xAPI (Tin Can) support — existing content imported and running on day one without modification
🎨 The Theming System
How a New Brand Goes Live in 15 Minutes
The white-labelling architecture was designed so that provisioning a new client brand required zero developer involvement. The platform owner fills in a brand configuration form — and a fully deployed, custom-domain LMS environment is live within 15 minutes.
| Config field | What it controls | Live without redeploy? |
| Primary colour |
All buttons, progress bars, active states, hover highlights |
✓ CSS vars, instant |
| Logo (light + dark) |
Navbar, login page, email headers, certificates |
✓ CDN swap, instant |
| Custom domain |
e.g. learn.acmecorp.com — SSL auto-provisioned |
~5 min DNS + cert |
| Favicon + page title |
Browser tab, bookmark, PWA manifest |
✓ Instant |
| Email sender name |
Notification emails come from "Acme Learning Team" |
✓ Instant |
| Welcome copy |
Login page headline, onboarding message, footer text |
✓ Instant |
| Feature flags |
Enable/disable community, certificates, leaderboard per tenant |
✓ Instant |
📦 Platform Features
A Complete LMS. White-Labelled Throughout.
🎨
Full Visual Theming
Logo, colours, typography, custom domain and SSL — all configurable per tenant without touching code. New brand live in 15 minutes.
📦
SCORM & xAPI Support
SCORM 1.2, SCORM 2004 and xAPI packages import and run natively. Completion and score data tracked per learner. Legacy content needs zero modification.
👥
Learner Management
Bulk user import via CSV, SSO/SAML integration, group management, cohort enrolment and per-learner progress dashboard — fully isolated per tenant.
📊
Completion Reporting
Per-learner, per-course and per-cohort completion reports. Exportable to CSV. Automated compliance reports emailed to client HR teams on a schedule.
🏆
Certificates (Branded)
Auto-generated completion certificates carrying the client's own branding — logo, colours, signatory name. Verifiable via unique URL. LinkedIn share button.
💳
Billing & Plan Management
The platform owner bills each tenant via Stripe — per-seat or per-course models. Usage metered per tenant. Invoice history and plan upgrades self-serve.
⚙️ Tech Stack
Technologies Used
Next.js 14
React 18
TypeScript
PostgreSQL (per-tenant schema)
Prisma ORM
SCORM runtime (scorm-again)
xAPI / TinCan
AWS S3 (content hosting)
AWS CloudFront
Let's Encrypt (auto SSL)
Stripe
SendGrid
📅 Timeline
Multi-Tenant Platform Live in 12 Weeks
1
Week 1–2
Architecture Design & Multi-Tenancy Strategy
Evaluated three multi-tenancy patterns: shared schema, schema-per-tenant and database-per-tenant. Selected schema-per-tenant as the right balance of isolation and operational simplicity for their scale. Theming system architecture designed. SCORM runtime selection evaluated.
2
Week 3–5
Core LMS — Course Player & Learner Dashboard
SCORM runtime integrated and tested against 12 existing course packages. Learner dashboard, progress tracking and completion logic built. First branded tenant provisioned — theming system validated end-to-end.
3
Week 6–8
Admin Portal, User Management & Reporting
Per-tenant admin panel with learner management, bulk CSV import, group/cohort tools and completion reporting. Certificate generation with brand theming. Scheduled compliance email reports built.
4
Week 9–10
Custom Domain Provisioning & SSL Automation
Automated custom domain provisioning — platform owner enters a domain, DNS instructions are shown, SSL cert provisioned via Let's Encrypt automatically once DNS propagates. Full domain-to-brand mapping system operational.
5
Week 11–12
Billing Integration, QA & First Client Launched
Stripe per-tenant billing live. Platform-owner admin panel for managing all tenants, monitoring usage and billing. End-to-end QA across 3 test tenants. First real corporate client launched under their own brand on launch day.
📈 Results
The Deal Blocker Became a Deal Closer.
The first thing the client did after launch was re-approach two enterprise deals they'd lost the previous year specifically because of the branding requirement. Both converted within 60 days. The platform feature that had been costing them business was now a differentiator they could lead with in sales conversations.
15min
To launch a fully branded new client environment — from zero
8
Corporate clients onboarded in the first 90 days post-launch
2
Previously-lost deals recovered immediately after launch
Within 90 days of launch, 8 corporate clients had been onboarded — each on their own branded domain, with their own learner databases and their own course libraries. The platform owner said the 15-minute onboarding time meant they could close a deal on Monday and have the client's branded LMS live by Monday afternoon.
The client has since commissioned SAML/SSO integrations for enterprise clients who require single sign-on, and an AI-powered course recommendation engine as the next phase of the product.