E-Commerce · Project details

Dukan - Multi Tenant SaaSbased E-commerce Platform

Multi-tenant e-commerce platform with 3 .NET 10 microservices (Clean Architecture + CQRS) and Next.js 16 frontend.

View source RoleFull-stack EngineerTimeline2026PlatformNext.js 16 · .NET 10 · PostgreSQL · Redis

Core Tech Stack

.NET 10 logo
.NET 10
MediatR logo
MediatR
FluentValidation
EF Core logo
EF Core
Redis Streams logo
Redis Streams
SignalR logo
SignalR
MinIO logo
MinIO
SkiaSharp
Hangfire
Next.js 16 logo
Next.js 16
TanStack Query logo
TanStack Query
Tailwind v4 logo
Tailwind v4
OpenTelemetry logo
OpenTelemetry
Grafana logo
Grafana
PostgreSQL 17 logo
PostgreSQL 17
Redis 7 logo
Redis 7
Docker Compose logo
Docker Compose
xUnit + Jest logo
xUnit + Jest
Product mockup

system architecture & data flow

Flows →
Service LayerData StoresObservabilityREST :5001Upload :5002WebSocket :5003Poll statusStreamAdd order-eventsStreamReadGroupSignalR BackplaneNext.js FrontendBrowser :3000dukaan-apiREST :5001dukaan-mediaUpload :5002notification-apiWebSocket :5003PostgreSQLPrimary RDBMSMinIO S3Object StorageRedisCache & StreamsOTel CollectorTelemetry GatewayGrafanaDashboardsPrometheusMetrics TSDBLokiLog AggregationTempoDistributed Tracing

Log 005 · Engineering Specification

architectural specification & system patterns

01🏗️

Clean Architecture Foundation

Designed a strict layered architecture across three microservices — Domain, Application, Infrastructure, Host — ensuring dependencies flow inward and the domain remains framework-agnostic.

Onion ArchitectureDependency Inversion
02🔐

Multi-Tenant Isolation

Implemented shared-database multi-tenancy with EF Core global query filters, tenant interceptors for auto-stamping, and tenant resolution middleware — keeping each merchant's data isolated at the application level.

EF Core FiltersInterceptors
03📦

CQRS via MediatR

Separated commands and queries into distinct handlers with a FluentValidation pipeline behavior — keeping controllers thin as one-liners and centralizing cross-cutting concerns.

MediatRFluentValidation
04

Event-Driven Communication

Wired Redis Streams for async cross-service events — order placement triggers notification dispatch through at-least-once delivery with consumer groups for load balancing.

Redis StreamsAt-Least-Once
05🔔

Real-Time Notifications

Built a SignalR hub with Redis backplane for horizontal scaling — delivering in-app alerts, email digests, and WebSocket pushes to the frontend with a strategy-pattern dispatcher.

SignalRStrategy Pattern
06🖼️

Media Processing Pipeline

Created a chunked upload protocol → MinIO storage → background SkiaSharp WebP conversion pipeline, generating original, display, and thumbnail variants asynchronously via Hangfire jobs.

MinIOSkiaSharpHangfire
07🎨

Next.js 16 Storefront

Built a responsive frontend with App Router, TanStack Query for server state, and Tailwind v4 — covering merchant dashboards, customer storefronts, and admin panels.

Next.js 16React 19
08📊

Full Observability Stack

Instrumented the entire system with OpenTelemetry — shipping traces to Tempo, logs to Loki, metrics to Prometheus, all visualized in custom Grafana dashboards with alerting rules.

OpenTelemetryGrafana
09🧪

Testing Strategy

Unit tests with xUnit and FluentAssertions for backend handlers and dispatchers; Jest with React Testing Library for frontend components and hooks — ensuring critical paths are covered.

xUnitJest

Appendix · Roadmap

what ships next

Continuous Refactoring

Keep the codebase modular and aligned with system performance standards.

Extensible Integration

Designed to interface easily with future services and APIs.

Built with clarity. Scaled with discipline.

Seamless merchant store management, low-latency customer checkout, and real-time order processing.