← All templates

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

Open in Molecule

What is inside

  • auth
  • notifications
  • speech
  • subscriptions

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

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • OPENAI_API_KEY OpenAI API key for speech
  • S3_BUCKET S3 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