## Monorepo Architecture (2025)

### Structure

```
apps/
  portal/              # Next.js frontend
  bff/                 # NestJS Backend-for-Frontend
packages/
  domain/              # Pure domain/types/utils (isomorphic)
```

### Portal (Next.js)

```
src/
  app/                 # App Router routes
  components/          # Design system (ui, layout, common)
  features/            # Feature modules (auth, billing, ...)
  lib/                 # Core utils/services (api, query, env, utils, types)
  providers/           # Context providers (QueryProvider, ThemeProvider)
  styles/              # Global styles
```

Conventions:

- Use `@/lib/*` for shared frontend utilities and services.
- Avoid duplicate layers: do not reintroduce `core/` or `shared/` inside the app.
- Feature modules own their `components/`, `hooks/`, `services/`, and `types/` as needed.
- Cross-feature UI belongs in `components` (atomic design).

### BFF (NestJS)

```
src/
  modules/             # Feature-aligned modules (auth, orders, billing, ...)
  common/              # Nest providers/interceptors/guards
  shared/              # Backend-only shared types if any
  main.ts              # Entry point
```

Conventions:

- Prefer `modules/*` over flat directories per domain.
- Keep DTOs and validators in-module; reuse `packages/domain` for domain types.

### packages/domain

- Domain models, status enums, validation helpers, logger, etc.
- Must be framework-agnostic (no React/Nest imports).

### Path Aliases

- Portal: `@/*`, `@/lib/*`, `@/features/*`, `@/components/*`, `@/providers/*`.
- BFF: `@/*` mapped to `apps/bff/src` (via tsconfig/jest config).
- Domain: import via `@customer-portal/domain`.

### Error Handling & Security

- Never leak sensitive details to end users; map errors to user-friendly messages.
- Centralize fetch/api concerns in `@/lib/api/*` with interceptors and strict typing.

### Testing & DX (optional enhancements)

- Consider adding unit/integration tests per feature module.
- Enforce ESLint/Prettier consistent across repo.
- Optional: generators for feature scaffolding.
