← All templates

LMS

Education · React + Node (Express) · 25 @molecule/* packages

Canvas-like learning management system with courses, assignments, grades, and discussions — including a built-in subscription tier (Free / Pro / Team) backed by Stripe

Open in Molecule

What is inside

  • auth
  • search
  • notifications
  • file-upload
  • calendar
  • subscriptions

Screens (11)

  • Dashboard /dashboard (signed in)
  • CourseDetail /course/:courseId (signed in)
  • Assignments /assignments (signed in)
  • Discussions /discussions (signed in)
  • Gradebook /gradebook (signed in)
  • Lesson /course/:courseId/lesson/:lessonId (signed in)
  • Login /login
  • Settings /settings (signed in)
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password

Data model (17 tables)

  • activities — id, actorId, action, resourceType, resourceId, metadata, createdAt
  • activity_seen_status — userId, lastSeenActivityId, updatedAt
  • assignments — id, course_id, title, description, due_date, points, type, created_at, …
  • comments — id, resourceType, resourceId, userId, parentId, body, editedAt, createdAt, …
  • course_modules — id, course_id, title, description, position, created_at, updated_at, updatedAt
  • courses — id, instructor_id, name, description, status, published_at, archived_at, created_at, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • discussion_replies — id, discussion_id, author_id, content, created_at, updatedAt
  • discussions — id, course_id, author_id, title, content, reply_count, created_at, updated_at, …
  • enrollments — id, course_id, student_id, student_email, role, status, enrolled_at, updated_at, …
  • grades — id, assignment_id, student_id, course_id, score, max_score, letter_grade, feedback, …
  • module_items — id, module_id, title, type, content_id, url, position, created_at, …
  • lesson_completions — id, user_id, course_id, lesson_id, completed_at
  • notifications — id, createdAt, updatedAt
  • resource_tags — id, tagId, resourceType, resourceId, createdAt
  • submissions — id, assignment_id, student_id, content, file_url, status, submitted_at, updatedAt
  • tags — id, name, slug, color, description, createdAt, updatedAt

API (10 handlers)

  • \_lmsAccess api/src/handlers/_lmsAccess.ts
  • assignments api/src/handlers/assignments.ts
  • courses api/src/handlers/courses.ts
  • discussions api/src/handlers/discussions.ts
  • enrollments api/src/handlers/enrollments.ts
  • grades api/src/handlers/grades.ts
  • leaderboard api/src/handlers/leaderboard.ts
  • modules api/src/handlers/modules.ts
  • stats api/src/handlers/stats.ts
  • users api/src/handlers/users.ts

Subscription tiers

free / pro / team — gated by: maxCourses, maxStudents, maxModulesPerCourse, maxAssignments, maxStorageMb, liveClasses, certificates, advancedAnalytics, customBranding, ssoLogin

Built from 25 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • S3_BUCKET S3 bucket for file uploads
  • MAILGUN_API_KEY Mailgun API key for email notifications

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing