Senior backend portfolio

Spring Modulith Order Platform

A production-oriented modular monolith for order management. It demonstrates Spring Modulith boundaries, contract-first REST APIs, PostgreSQL persistence, domain events, architecture tests and generated documentation without distributed-system theater.

Architecture

A modular monolith with explicit boundaries.

The application keeps one deployment unit and uses Spring Modulith to make module relationships visible and enforceable. Cross-module collaboration goes through named API packages or domain events.

Inside each module, the project follows a pragmatic ports-and-adapters style: domain logic stays framework-independent, application services orchestrate use cases, and infrastructure contains persistence adapters.

Spring Modulith module dependency map Orders uses customer and pricing APIs. Payments and notifications react to events emitted by orders and payments. orders customers named API pricing named API payments order event notifications
Module boundaries

Small public APIs, private implementation details.

Each module owns a narrow business capability. JPA entities stay in infrastructure packages, while public module APIs expose intentional records and interfaces.

identity

Customers

Registers customers and exposes customer lookup for order validation.

catalog

Pricing

Reads active catalog prices and calculates deterministic quotes.

workflow

Orders

Coordinates customer validation, pricing, persistence and order events.

state

Payments

Prepares pending payments after order commit and authorizes matching amounts.

events

Notifications

Records notification intents created from order and payment events.

contract

Generated API

Generated REST interfaces and DTOs stay at the API boundary.

Quality gates

Verification is part of the build, not a checklist in prose.

The repository favors behavior-focused tests and build-time artifact checks over decorative coverage targets.

Generated documentation

Published Pages are assembled from Maven outputs.

Maintained site sources live under src/site. Maven copies the landing page, User Guide and shared assets alongside generated reports in target/pages.

Local development

Run the same verification path locally.

PostgreSQL is the development and test database. H2 is intentionally excluded so schema behavior stays realistic.

docker compose up -d
./mvnw clean verify
./mvnw spring-boot:run
CI/CD

One Maven verification, then publish only generated Pages.

The workflow keeps CI direct: no matrix builds, no duplicated Maven runs, and no generated reports committed to Git.

  1. Verify once Set up Java 21 with Maven cache and run ./mvnw -B -ntp clean verify.
  2. Check artifacts Fail if the site assets, User Guide, coverage, Javadoc, OpenAPI or Pages outputs are missing.
  3. Package and publish Validate Docker Compose, build the image and deploy only target/pages.