An experimental full-stack application showcasing cutting-edge technologies and architectural patterns for building scalable e-commerce systems.
β If you find this project useful, please consider giving it a star! It helps others discover the project.
βββ Core # Building blocks and abstractions
βββ Core.Infrastructure # Shared infrastructure implementations
β
βββ Crosscutting
β βββ ServiceClients # Kiota-generated HTTP clients
β βββ ApiGateway # Ocelot API Gateway
β βββ SignalR # Real-time communication
β βββ IdentityServer # Authentication & authorization
β
βββ Services
β βββ CustomerManagement
β βββ InventoryManagement
β βββ OrderProcessing
β βββ PaymentProcessing
β βββ ProductCatalog
β βββ QuoteManagement
β βββ ShipmentProcessing
β
βββ SPA # Angular frontend
βββ docker-compose # Container orchestration
| Layer | |
|---|---|
| Core | Defines building blocks and abstractions used across all projects. Highly abstract with no implementations. |
| Core.Infrastructure | Shared infrastructure abstractions and implementations for all microservices. |
| Crosscutting | Projects that cross-cut all microservices: IdentityServer, API Gateway, and ServiceClients with Kiota-generated HTTP clients. |
| Services | Backend microservices built with a vertically sliced structure. |
| SPA | Lightweight Angular-based Single Page Application. |
Each microservice follows a clean vertical slice architecture.
βββ EcommerceDDD.ProductCatalog
β βββ API # RESTful endpoints
β βββ Application # Use cases, commands & queries
β βββ Domain # Aggregates, entities, domain events
β βββ Infrastructure # Data persistence & external integrations
- Koalesce.OpenAPI aggregates all OpenAPI definitions exposed in the API Gateway.
- Kiota generates typed TypeScript clients from this unified spec.
- The Angular SPA communicates through the API Gateway using the clients.
Microservices communicate directly using Kiota-generated typed HTTP clients.
| Technology | Version |
|---|---|
| .NET | 10 |
| C# | 12 |
| Koalesce | 1.0.0-beta.10 |
| Ocelot | 24.1.0 |
| Marten | 8.22.1 |
| Confluent Kafka | 2.13.1 |
| Entity Framework Core | 10.0.3 |
| Npgsql (PostgreSQL) | 10.0.0 |
| Duende IdentityServer | 7.4.6 |
| Polly | 8.6.5 |
| Microsoft Kiota | 1.21.2 |
| OpenTelemetry | 1.15.0 |
| xUnit | 2.9.3 |
| NSubstitute | 5.3.0 |
| Swashbuckle.AspNetCore.SwaggerUI | 10.1.4 |
| FluentResults | 4.0.0 |
| Technology | Version |
|---|---|
| angular | 21.1.3 |
| typescript | 5.9.3 |
| jest | 30.2.0 |
| @ng-bootstrap/ng-bootstrap | 20.0.0 |
| bootstrap | 5.3.5 |
| @fortawesome/angular-fontawesome | 4.0.0 |
| ngx-toastr | 19.0.0 |
Backend only β starts all microservices, databases, Kafka, and infrastructure:
docker compose upBackend + Frontend β also builds and serves the Angular SPA at http://localhost:4200:
docker compose --profile frontend upπ‘ Tip: You can also set
docker-compose.dcprojas the startup project in Visual Studio for debugging.
If you prefer running the frontend outside Docker for development, start the backend with docker compose up, then:
cd src/EcommerceDDD.Spa
npm install
ng serveThe app will be available at http://localhost:4200.
Tool services are defined in docker-compose.override.yml, which Docker Compose loads automatically alongside docker-compose.yml. After the main stack is running, use one of the commands below:
| Command | What it generates |
|---|---|
docker compose --profile tools run regenerate-clients |
Both backend and frontend clients |
docker compose --profile tools run regenerate-backend-clients |
Backend C# clients only (ServiceClients/Kiota/) |
docker compose --profile tools run regenerate-frontend-clients |
Frontend TypeScript client only (EcommerceDDD.Spa/src/app/clients/) |
- Issues: Report bugs or request features via GitHub Issues.
- Contributing: Contributions are welcome! Please read CONTRIBUTING.md before submitting PRs.
This project is licensed under the terms of the LICENSE file.
Made with β€οΈ by Felipe Henrique




