Back to Case Studies
Full StackGHLDeployed

MET Academy Student Portal: E-Learning Platform with Cloudflare DRM + Bilingual UI

Client: METCARE / My Esthetic TravelRegion: FranceIndustry: Healthcare / Medical Tourism
20Training modules
2hVideo token expiry (DRM)
FR/ENBilingual
0Open enrollment — admin-only

Bilingual (FR/EN) custom LMS built from scratch for a French medical aesthetics platform — 20 training modules delivered via Cloudflare Stream signed tokens, admin-controlled access, and a GHL patient journey automation capturing leads from two Vercel landing pages through to post-payment nurture.

The Problem

METCARE needed a secure, professional e-learning platform for post-operative aesthetic training that no off-the-shelf LMS could provide: bilingual (French/English), admin-only enrollment (no open registration), DRM-level video protection without enterprise licensing, and integration with their patient acquisition funnel. Platforms like Kajabi or Teachable couldn't handle the access control requirements or the French-language patient journey automation alongside the LMS.

The Solution

Two parallel systems. (1) MET Academy LMS: built from scratch with Next.js + Node.js REST API on Vercel, Supabase PostgreSQL with Row Level Security for auth, and Cloudflare Stream for video delivery. Admin creates student accounts manually → activation email sent via Resend → student sets password → auto-logged in. All video content delivered via signed Cloudflare Stream tokens with 2-hour expiry — direct URL sharing is technically impossible; tokens require an active authenticated session. 3 public intro videos use unsigned tokens for marketing access. 20 training modules with Previous/Next navigation and sidebar. FR/EN UI toggle persistent in localStorage (default French). httpOnly JWT cookie authentication — not localStorage. Full forgot-password flow with email-triggered reset. (2) Parcours 360 Patient Journey: 2 GHL workflows — 'Website → GHL' captures form submissions from the Vercel funnel (`parcours-360-ide.vercel.app`) into GHL contacts with team notification; 'Post Payment Email Sequence' fires after payment to handle nurture and onboarding.

Tech Stack

Next.jsNode.jsSupabaseCloudflare StreamVercelResendGHLn8n

Screenshots

Results

  • Custom LMS operational with admin-controlled enrollment — no self-registration, no off-the-shelf platform dependencies
  • Video DRM via Cloudflare Stream signed tokens with 2-hour expiry — direct URL sharing technically impossible without an active authenticated session
  • 3 free public intro videos use unsigned tokens for marketing access, seamlessly integrated alongside gated content
  • Bilingual FR/EN UI (default French) with language preference persisted in localStorage across sessions
  • httpOnly JWT cookie auth prevents XSS token theft — more secure than localStorage-based auth common in LMS platforms
  • Parcours 360 patient journey: form submissions from 2 Vercel funnels captured into GHL with team notification + post-payment email sequence running automatically