Language Learning
Education · React + Node (Express) · 19 @molecule/* packages
Duolingo-like language learning app with lessons, exercises, streaks, and XP — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (13)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Dashboard
/dashboard(signed in) - Lessons
/lessons(signed in) - LessonDetail
/lessons/:id(signed in) - Vocabulary
/vocabulary(signed in) - Practice
/practice(signed in) - Leaderboard
/leaderboard(signed in) - Profile
/profile(signed in) - Settings
/settings(signed in)
Data model (13 tables)
- activities — id, actorId, action, resourceType, resourceId, metadata, createdAt
- activity_seen_status — userId, lastSeenActivityId, updatedAt
- course_enrollments — id, course_id, user_id, current_unit, current_lesson, enrolled_at
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- exercise_results — id, exercise_id, user_id, answer, is_correct, xp_earned, time_taken_ms, completed_at
- exercises — id, lesson_id, type, prompt, choices, correct_answer, explanation, xp_value, …
- follows — id, followerId, targetType, targetId, createdAt, updatedAt
- language_courses — id, language_name, language_code, flag, level, unit_count, lesson_count, description, …
- lessons — id, unit_id, course_id, title, duration_min, lessons_remaining, progress_percent, level, …
- notifications — id, user_id, type, title, body, href, unread, created_at
- units — id, course_id, position, title, description, created_at
- user_profiles — user_id, total_xp, lessons_completed, current_streak, longest_streak, daily_goal_xp, last_activity, target_languages, …
- vocabulary_items — id, user_id, word, pronunciation, translation, example, language_code, mastery, …
API (10 handlers)
- \_seed
api/src/handlers/_seed.ts - courses
api/src/handlers/courses.ts - dashboard
api/src/handlers/dashboard.ts - exercises
api/src/handlers/exercises.ts - leaderboard
api/src/handlers/leaderboard.ts - lessons
api/src/handlers/lessons.ts - practice
api/src/handlers/practice.ts - preferences
api/src/handlers/preferences.ts - progress
api/src/handlers/progress.ts - vocabulary
api/src/handlers/vocabulary.ts
Subscription tiers
free / pro / team — gated by: maxCourses, maxExercises, maxLeaderboard, maxLessons, maxProgress, advancedFeatures, canExport, retentionDays
Built from 19 @molecule/* packages
@molecule/api-ai-speech-openai@molecule/api-cron-node-cron@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-push-notifications-web-push@molecule/api-reporting-database@molecule/api-resource-activity-feed@molecule/api-resource-follow@molecule/api-resource-payment@molecule/api-resource-user@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-command-palette@molecule/app-data-table@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringOPENAI_API_KEYOpenAI API key for speechS3_BUCKETS3 bucket for audio assets
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing