finds.dev← search

// the find

MrHacker26/next-lms

★ 105 · TypeScript · updated May 2025

Next LMS: A blazing-fast, user-friendly Learning Management System built with Next.js.

A Next.js 13+ App Router learning management system with separate student and teacher areas, course and chapter authoring, Stripe checkout, and Clerk auth. It is aimed at developers who want a starting point for a paid course platform and are willing to read the code to fill in the gaps.

- The route groups split (auth), (course), and (dashboard), and the teacher/ subtree has its own layout, so the student and author surfaces are separated in the file tree.

- The Prisma migrations are readable in order (courses, attachments, chapters, progress, purchases, Stripe customer), so the data model can be traced from history without reading the whole schema.

- Payments are wired end to end: a checkout route, a Stripe webhook route, a lib/stripe.ts wrapper, and a purchase model that the course pages can read from.

- Aggregation logic (progress, analytics, dashboard courses) lives in actions/ instead of inside components, which keeps the page files thin.

- The README is still the untouched create-next-app boilerplate. Nothing covers setup beyond the dev command, the required env vars, how to configure the Stripe webhook, or how to run the Prisma migrations.

- The last push was May 2025, about 16 months ago, and the project has not been updated since. Expect drift in Next.js, Clerk, and UploadThing APIs if you adopt it as is.

- There is no test directory in the tree, and the only script is scripts/seed.ts, so nothing guards the purchase or progress logic against regressions.

- The migrations include a Mux data model, but the tree shows no Mux client code in lib/. Whoever adopts it will need to check whether video hosting is still wired up or whether that model is a leftover.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →