LMS · 2023 In development
LearnLoop
Multi-tenant gamified LMS with RBAC, webhooks, and analytics.
Tech stack
Next.js 15 Prisma PostgreSQL Auth.js Tailwind Stripe Vercel
The problem
Corporate training LMS tools are either bloated enterprise products or vendor-locked SaaS. Small organizations need multi-role RBAC, content authoring, and progress tracking without Moodle-level complexity or Cornerstone-level pricing.
Goals
- Multi-role RBAC covering learner, instructor, and admin
- Gamification engine that actually motivates without dark patterns
- Webhook integrations so external systems get events in real time
- Live deployment with preview environments for every branch
The solution
- Course authoring with lessons, quizzes, and media
- XP, badges, streaks, and a leaderboard
- Webhook integrations signed with HMAC
- Admin analytics for learning outcomes
- Bulk user import and role assignment
My role
- → Architecture across Next.js 15 App Router and Prisma
- → Server-component-first data fetching
- → Postgres schema with tenant scoping
- → Vercel deploy with preview environments
- → CI with GitHub Actions
UI direction
Minimal, dark-mode first, content-over-decoration. Server-component-first architecture so most pages ship with near-zero client JS.
User flows
Learner flow
- 1 Sign in and land on a personalized dashboard
- 2 Take today's lesson
- 3 Complete the quiz
- 4 Earn XP and unlock badges on streaks
Admin flow
- 1 Author a new course with lessons and quizzes
- 2 Bulk import users from a CSV
- 3 Assign roles and cohort membership
- 4 Review analytics on completion and engagement
Screenshots
Key learnings
- Postgres RLS is cleaner than application-layer tenant scoping once the query count grows
- Webhook HMAC patterns generalize across SaaS products
- Gamification without dark patterns is a design discipline, not a feature flag
- Next.js 15 server actions replace most REST boilerplate in a tenant-scoped admin app
Want something like LearnLoop?
I'm open to senior contract work. Let's talk about what you're building.
Get in touch