2.0 KiB
2.0 KiB
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/orshared/inside the app. - Feature modules own their
components/,hooks/,services/, andtypes/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/domainfor 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 toapps/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.