Skip to content

Monorepo shape

  • apps/learner-web is the primary product surface and should be scaffolded first.
  • apps/teacher-portal is a separate frontend with a different workflow focus, but it should reuse shared UI and domain packages.
  • apps/api hosts backend endpoints and sync services.
  • packages/ui for reusable presentational components and hooks
  • packages/domain for language-learning entities, validation, and shared business types
  • packages/db for Drizzle schema and migrations
  • packages/offline-data for offline-first, pgxsinkit and PGlite logic
  • packages/config for shared env/config helpers
  • Public function endpoints should use the canonical /functions/v1/<function-name> path on the API host. This will be stripped by the supabase/istio proxy, so runtime handlers should only accept /<function-name>.
  • Workflow state endpoints follow this convention as /workflow/state (canonical).
  • repo-wide namespace: emergent
  • internal package scope: @emergent/*
  • app directory names: role-based and explicit, such as learner-web and teacher-portal