← All templates

Course Marketplace

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

Udemy-like course marketplace with listings, enrollment, video lessons, and certificates — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • search
  • payments
  • video
  • file-upload
  • subscriptions

Screens (16)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Browse /browse
  • CourseDetail /courses/:id
  • Lesson /courses/:id/lessons/:lessonId (signed in)
  • MyLearning /my-learning (signed in)
  • InstructorDashboard /instructor (signed in)
  • Settings /settings (signed in)
  • Checkout /checkout (signed in)
  • InstructorCourseEditor /instructor/courses/:id/edit (signed in)
  • InstructorProfile /instructors/:id
  • Certificate /my-learning/:courseId/certificate (signed in)
  • Notifications /notifications (signed in)

Data model (16 tables)

  • bookmarks — id, userId, resourceType, resourceId, folder, createdAt, updatedAt
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • orders — id, userId, status, subtotal, tax, shipping, discount, total, …
  • order_items — id, orderId, productId, variantId, name, price, quantity, image
  • order_events — id, orderId, status, metadata, createdAt
  • payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
  • reviews — id, resourceType, resourceId, userId, rating, title, body, helpful, …
  • review_helpful — reviewId, userId, createdAt
  • tags — id, name, slug, color, description, createdAt, updatedAt
  • resource_tags — id, tagId, resourceType, resourceId, createdAt
  • courses — id, instructor_id, user_id, title, slug, description, category, thumbnail_url, …
  • lessons — id, course_id, user_id, title, description, video_url, video_hls_url, thumbnail_url, …
  • enrollments — id, user_id, course_id, payment_id, progress, completed_at, enrolled_at, created_at, …
  • lesson_progress — id, user_id, lesson_id, course_id, watched_seconds, completed_at, created_at, updated_at, …
  • certificates — id, user_id, course_id, enrollment_id, certificate_number, pdf_url, issued_at, created_at, …
  • notifications — id, user_id, type, title, body, href, entity_id, unread, …

API (10 handlers)

  • \_decorate api/src/handlers/_decorate.ts
  • \_seed api/src/handlers/_seed.ts
  • catalog api/src/handlers/catalog.ts
  • certificates api/src/handlers/certificates.ts
  • checkout api/src/handlers/checkout.ts
  • enrollments api/src/handlers/enrollments.ts
  • instructors api/src/handlers/instructors.ts
  • lessons api/src/handlers/lessons.ts
  • notifications api/src/handlers/notifications.ts
  • reviews api/src/handlers/reviews.ts

Subscription tiers

free / pro / team — gated by: maxCatalog, maxCertificates, maxEnrollments, maxInstructors, maxLessons, maxReviews, advancedFeatures, canExport, retentionDays

Built from 22 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • STRIPE_SECRET_KEY Stripe secret key
  • STRIPE_PUBLISHABLE_KEY Stripe publishable key
  • S3_BUCKET S3 bucket for videos and assets
  • MAILGUN_API_KEY Mailgun API key

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