I’m building a Learning Management System SaaS called eCourses, designed specifically for small communities and independent educators who feel priced out or over‑engineered by existing platforms.
This post is the first in a series where I’ll walk through the architecture, decisions, and “lessons learned” from shipping an LMS from scratch — in public, open source, and on a tight budget.
Why I Built eCourses
Most LMS platforms are either:
- Too expensive for solo creators and small communities.
- Too complex for simple “course + modules + lessons + live sessions” workflows.
- Too rigid to let instructors experiment with their own teaching style.
I wanted something that:
- Feels native to communities (not just single instructors).
- Scales technically and financially under $10/month at reasonable load.
- Lets me experiment with API design, caching, and complex state in a real product context.
That’s how eCourses started — as a personal itch, and now as a real product and portfolio project.
What eCourses Is (Right Now)
At its core, eCourses is:
- A community‑scoped LMS SaaS with
communitySlug‑based routing. - An admin panel where instructors can:
- Create, edit, and soft‑delete courses (with image upload via ImageKit).
- Reorder modules and lessons with drag‑and‑drop (optimistic UI, two‑pass
indextransactions). - Assign non‑student members as instructors.
- A structure that prepares the ground for:
- Public course pages.
- Video upload and playback.
- Live sessions and recordings.
- Student progress tracking and analytics.
The live version is currently deployed at https://ecourses-sigma.vercel.app, and the whole stack is open source under the MIT license.
The Big Picture: Tech Stack
Right now the stack is optimized for type‑safe, fast iteration rather than maximal feature‑bloat:
| Layer | Tech / Pattern |
|---|---|
| Framework | Next.js 15 (App Router + Turbopack) |
| Language | TypeScript |
| Auth | Clerk |
| Database | PostgreSQL |
| ORM | Prisma v7 |
| Cache | Upstash Redis |
| File Storage | ImageKit |
| Frontend UI | Tailwind CSS v4 + shadcn/ui + dnd‑kit, nuqs, React Hook Form + Zod |
| State (HTTP) | TanStack Query v5 (React Query v4 in browser) |
This gives me strong typing, rapid iteration, and a clear path to a mobile‑ready backend later.
If You Want to Follow Along
Right now eCourses is:
- Live at: https://ecourses-sigma.vercel.app.
- Open source under MIT.
- Actively under development, with plans to ship to real communities within the next few months.
You can:
- Star / fork the repo and open issues or PRs.
- Comment here with questions or suggestions (especially around LMS‑specific UX, API patterns, or caching).
- Follow as I keep shipping and documenting — if you’ve ever wondered what a “real‑sized” LMS architecture looks like at SaaS‑scale, this is a good place to watch it evolve.
Top comments (0)