Skip to main content
BACK TO INDEX
NODE_STUDY // ACTIVE

LMS Platform

End-to-end ownership: data model, auth, payments, video streaming, and UI — all designed and shipped solo. A full-stack Learning Management System on Next.js 14 App Router. Teachers build courses with rich-text descriptions, video chapters, and attachments; students browse the catalog, enroll for free or via Stripe Checkout, watch videos, and track chapter progress on a personal dashboard.

LIVENODE_LMS_PLATFORMNext.js 14React 18TypeScriptPostgreSQLPrismaBetter AuthStripeTailwind CSSshadcn/ui
[01]Executive Summary / Overview

End-to-end ownership: data model, auth, payments, video streaming, and UI — all designed and shipped solo. A full-stack Learning Management System on Next.js 14 App Router. Teachers build courses with rich-text descriptions, video chapters, and attachments; students browse the catalog, enroll for free or via Stripe Checkout, watch videos, and track chapter progress on a personal dashboard.

STATUS FILE METADATA
ROLEFull-Stack Developer — Pet Project
PERIOD2025–2026
[02]Aims & Technical Goals
  • 01 / GOAL

    Rebuilt a legacy tutorial codebase into a self-hosted stack: replaced Clerk, Mux, and PlanetScale with Better Auth, a custom video pipeline, and PostgreSQL + Prisma.

  • 02 / GOAL

    Designed a pluggable storage layer (lib/storage): local disk with HTTP Range streaming for video seeking, or Cloudflare R2 — switched by a single env variable.

  • 03 / GOAL

    Integrated Stripe Checkout with webhook-driven purchase fulfillment; free courses enroll instantly without payment.

  • 04 / GOAL

    Built a course builder with drag-and-drop chapter reordering, per-chapter free/paid access, publish validation, and revenue/sales analytics charts.

  • 05 / GOAL

    Udemy-style access model: any user can teach; every mutation enforces ownership at the query level.

[03]Technology Assembly & Stack
Next.js 14
React 18
TypeScript
PostgreSQL
Prisma
Better Auth
Stripe
Tailwind CSS
shadcn/ui
[04]Technical Depth

Mutations go through route handlers with client-side revalidation via router.refresh() — a deliberate choice over Server Actions. Optimistic cookie-based auth check in middleware keeps every route private except auth and webhook endpoints. An idempotent seed provisions demo teacher and student accounts with courses, purchases, and progress in one command.