Reference
Architecture overview
Apps, packages, deployment topology, data flow.
Monorepo layout
| Path | What |
|---|---|
| apps/web | Next.js 15 App Router (storefronts + admin + provider) |
| apps/api | NestJS REST API (Bearer + JWT + tenant middleware) |
| apps/ai | NestJS AI service (chat, recommendations, translate, …) |
| apps/worker | BullMQ worker (notifications, fanout, crons) |
| packages/database | Prisma schema + seed + enrich-demo |
| packages/shared | Zod schemas shared between api / web |
| packages/auth | Mock + Firebase auth providers |
| packages/ui | Reusable UI primitives |
Data flow
Browser → web (Next.js, server components + API proxy) → api (NestJS, tenant middleware resolves Host header → tenantId, withTenant() Prisma extension scopes every query). Worker side: BullMQ queues for outbound webhooks, content-i18n, custom-domain verifier, status-poll. AI service is internal-only (api → /chat → Anthropic).
Deploy
GCP Cloud Run (us-east4) behind a global HTTPS load balancer with a wildcard cert for *.orkestr.in. Pushing to GitHub main triggers per-service Cloud Build. Adding a tenant = pure DB write — zero infra changes.