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
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
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
@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-image-sharp@molecule/api-media-streaming-hls@molecule/api-payments-stripe@molecule/api-pdf-pdfkit@molecule/api-reporting-database@molecule/api-resource-bookmark@molecule/api-resource-order@molecule/api-resource-payment@molecule/api-resource-review@molecule/api-resource-tag@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-command-palette@molecule/app-data-table@molecule/app-file-upload@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringSTRIPE_SECRET_KEYStripe secret keySTRIPE_PUBLISHABLE_KEYStripe publishable keyS3_BUCKETS3 bucket for videos and assetsMAILGUN_API_KEYMailgun API key
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing