A full-stack LMS with Bunny.net video streaming, Mux live streaming, Stripe multi-seat subscriptions, three-role RBAC, and “The Vault” — a members-only discussion forum.

01 — Overview
LKnight is a production LMS: a Category → Course → Module → Lesson hierarchy with Bunny.net video lessons, Mux live streaming, Stripe subscription billing (including multi-seat team plans), and “The Vault” — a subscription-gated, anonymous discussion forum. Built as an Express 5 + Prisma 7 backend with a Next.js 16 / React 19 frontend.
Role
Timeline
Stack
02 — Context
An LMS has to stream video cost-effectively without exposing source files, gate every action by role, take recurring and team payments securely, and stay responsive as courses and users grow.
I built the full stack. Video lives off-origin on Bunny.net and is served through cryptographically signed, time-limited (1-hour) embed URLs, with resumable tus uploads and webhook-driven encoding status. RBAC spans three roles (Student / Instructor / Admin) with DB-backed checks rather than trusting JWT claims, plus subscription-level roles for team seats. Stripe handles subscriptions and multi-seat invites with signature-verified raw-body webhooks, and the Postgres schema is comprehensively indexed — cursor pagination for the Vault feed, offset pagination for catalogs — to stay fast at scale.
03 — Showcase



04 — Capabilities
05 — Contribution
As Full-Stack Engineer, here is exactly what I owned and delivered on this project.
06 — Engineering
Challenge
Serving course video without exposing source files or blowing up origin bandwidth.
Solution
Offloaded delivery to Bunny.net and served only SHA-256-signed, 1-hour embed URLs; encoding status synced via webhooks.
Challenge
Authorization across three roles plus team-subscription seats, with anonymity in the Vault.
Solution
DB-backed role guards (not trusting JWT claims alone) and an author-display layer that masks identities for members but reveals them to admins.
Challenge
Stripe webhooks and checkout are eventually consistent.
Solution
Verified raw-body webhook signatures and polled the API with exponential backoff on success pages until the subscription settled.
07 — Toolbox
08 — Impact