Five NestJS services in a Turborepo monorepo, each running on its own port:
• API Gateway (3000) - Routing, JWT validation, rate limiting, request aggregation, health check aggregation
• Auth Service (3001) - Registration, login, JWT tokens, password reset, Passport.js strategies
• User Service (3002) - Profiles, preferences, addresses; listens for auth.user.registered events
• Product Service (3003) - Catalog, categories, inventory; publishes inventory.low_stock alerts
• Payment Service (3004) - Orders, payments, refunds; maintains denormalized product cache from product events
All inter-service communication flows through a RabbitMQ topic exchange (microservices.events). Events follow the {service}.{entity}.{action} naming convention. Shared packages ensure publisher and consumer always agree on routing key strings.
Infrastructure: Docker Compose for local development (PostgreSQL, Redis, RabbitMQ, Adminer), Kubernetes manifests for production deployment with readiness/liveness probes.