Skip to main content

Monorepo Architecture

The repository is organized as a pnpm workspace with Turbo for task orchestration.

Structure:

apps/
web/ # Next.js app (App Router)
functions/ # Firebase Cloud Functions (v2 HTTPS + schedulers)
packages/
shared/ # Shared JS utilities (published via workspace)

Root configuration:

  • pnpm-workspace.yaml declares apps/* and packages/*.
  • package.json scripts use Turbo to run dev/build across apps.
  • firebase.json configures Functions source and emulators.

Key decisions:

  • Use workspace dependency @repo/shared inside apps/web.
  • Node 22 at root; Functions specify node 20 runtime.
  • Stripe and Firebase Admin only used server-side via API routes or Functions.