ShopEase Platform

Production-Grade Microservices Β· Polyglot Persistence Β· 5-Layer Test Pyramid Β· Full Observability

🟒 Live in Production 4 Services  |  330+ Tests  |  85%+ Coverage  |  ~5 min Deploy Request Live Access GitHub β†—

Overview

ShopEase is a full-stack, cloud-native eCommerce platform built to production standards. Every service is independently deployable, domain-modelled behind a bounded context, continuously integrated via a five-layer test pyramid, and instrumented end-to-end with OpenTelemetry auto-instrumentation. The platform runs on Kubernetes with GitOps deployment and zero-trust network policies.

This is not a tutorial project β€” it is a living, deployed system demonstrating enterprise engineering patterns that are often described but rarely shown together in a single repository.

Architecture Diagram

Database as a Service Diagram

Platform Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               Cloudflare Tunnel + Access                         β”‚
β”‚               shop.kunlecreates.org                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  NGINX Ingress Controller                        β”‚
β”‚           (TLS termination, path-based routing)                  β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚              β”‚              β”‚              β”‚
  /frontend      /api/user      /api/products   /api/orders
       β”‚              β”‚              β”‚              β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚frontend β”‚  β”‚user-svc  β”‚  β”‚product  β”‚   β”‚order-serviceβ”‚
  β”‚Next.js  β”‚  β”‚Java 21   β”‚  β”‚NestJS   β”‚   β”‚Java 21      β”‚
  β”‚         β”‚  β”‚Spring    β”‚  β”‚Node.js  β”‚   β”‚Spring Boot  β”‚
  β”‚         β”‚  β”‚Oracle DB β”‚  β”‚Postgres β”‚   β”‚MS SQL Serverβ”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                                                   β”‚ async notify
                                             β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”
                                             β”‚notif-serviceβ”‚
                                             β”‚Python 3.12  β”‚
                                             β”‚FastAPI/SMTP β”‚
                                             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Service Breakdown

πŸ” user-service Java 21 Spring Boot 3 Oracle DB 23c

Full identity & auth domain: registration, JWT/RS256, email verification, password reset, RBAC (CUSTOMER/ADMIN), and login audit logging. Every token value is stored as a bcrypt hash β€” plaintext secrets never persist.

🏷️ product-service Node.js 20 NestJS 10 PostgreSQL 17

Product catalogue, full-text search (TSVECTOR), inventory tracking, and stock movement audit. Prices stored as integer cents (no floating-point). JSONB attributes column handles flexible per-SKU metadata without schema migrations.

πŸ›’ order-service Java 21 Spring Boot 3 MS SQL Server 2022

Cart lifecycle (OPEN β†’ CHECKED_OUT β†’ ABANDONED), order management, payment metadata. Shipping address snapshotted at checkout β€” historical orders are immutable. Only display-safe payment metadata stored (PCI scope reduction).

πŸ“§ notification-service Python 3.12 FastAPI Stateless

Stateless email dispatcher. Consumes order events, renders Jinja2 templates, dispatches confirmation emails via SMTP. No database β€” trivially scalable and independently testable. Async call from order-service post-checkout.

Test Pyramid (330+ Tests)

Layer Location Tools Blocks PR? Tests
Unit services/*/test/ JUnit 5, Jest, pytest βœ… Yes 277
Frontend Unit frontend/__tests__/ Jest βœ… Yes 53
Integration services/*/test/integration/ Testcontainers (real DBs) βœ… Yes ~40
API Contracts api-tests/ Supertest, RestAssured βœ… Post-deploy 18 files
E2E e2e/ Playwright ❌ Monitoring 7 spec files

CI/CD Pipeline

GitHub Actions β†’ GHCR β†’ Kubernetes Helm deploy. All five services build in parallel. Total time from git push to live deployment: ~5 minutes.

πŸ“Š

Coverage Authority Workflow β€” Platform-Level Quality Visibility

The Coverage Authority is a dedicated GitHub Actions workflow that runs after all five service CI pipelines complete. It collects the per-service coverage artefacts, computes a weighted aggregate across the entire platform (∼85%+ current), and auto-publishes the updated badge to the coverage-badge branch on every push. This is not per-service coverage tracking β€” it is a cross-platform signal that treats quality as a platform-level concern. A single service dropping below threshold fails the aggregate gate and alerts the team before any deployment proceeds.

1️⃣ All 5 service CIs run in parallel 2️⃣ Coverage Authority workflow triggers on completion 3️⃣ Artefacts aggregated across Java, Node.js & Python 4️⃣ Weighted aggregate computed 5️⃣ Badge auto-updated on coverage-badge branch 6️⃣ README badge reflects live state on every push

Observability Stack

OpenTelemetry Operator auto-injects agents β€” no SDK changes required in application code.

Security Architecture

Polyglot Persistence

ServiceEngineWhy This Engine
user-service Oracle DB 23c Free Complex relational auth domain. JSON constraint (IS JSON) for domain event outbox. Enterprise audit capability.
product-service PostgreSQL 17 Native TSVECTOR full-text search. JSONB for flexible product attributes. Best-in-class ORM support for NestJS.
order-service MS SQL Server 2022 Schema isolation via order_svc schema qualifier. Strong typing for financial transactions. Spring Data JPA + MSSQL Testcontainers.

UI Walkthrough (GIF Preview)

End-to-end user journey through the ShopEase web application β€” registration, product browsing, cart management, and order placement.

ShopEase Web Application UI Walkthrough

Read More

I wrote detailed engineering deep dives covering this platform:

Architecture Deep Dive β€” All 6 Engineering Pillars β†’

Database-as-a-Service Engineering Deep Dive β†’

Contact

The source code is public on GitHub. For a walkthrough of any specific service, the CI/CD pipeline configuration, or the Kubernetes manifests, contact me directly.

Back to top