Skip to content
CAI
Software that uses CAICheck a score

idugalic/micro-company

50.0

Weak · 21 September 2026

4k

lines of production code

Java

with JavaScript, TypeScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a microservices-based application demonstrating Event Sourcing and CQRS patterns using the Axon Framework and Spring Boot. It provides distinct command-side services for creating and publishing blog posts and managing projects, alongside query-side services that maintain materialized views of that data. The architecture includes supporting infrastructure for service discovery, centralized configuration, and authentication, all containerized for deployment.

Features

Add Docker Compose and Swarm deployment scripts for microservices

Users can now deploy the microservices architecture locally or on AWS using Docker Swarm. The change introduces \docker-compose.yml\ and \docker-compose-v3.yml\ files to define the service topology, a \micro-company.dab\ bundle for Docker application bundles, and shell scripts (\swarm-mode-local.sh\, \swarm-mode-aws.sh\) to automate the creation of Docker machines, initialization of the Swarm cluster, and deployment of the stack. This enables users to spin up the full microservices environment with a single command.

docker · high confidence

Add Spring Boot Admin Server for application monitoring

A new Spring Boot Admin Server has been introduced to provide a centralized dashboard for monitoring and managing the application's health and status. This includes the necessary Java application class with \@EnableAdminServer\, configuration files (\application.yml\, \bootstrap.yml\) to connect to the config server and discovery client, and a Dockerfile based on \eclipse-temurin:11\ to containerize the admin server.

adminserver · high confidence

Add Spring Cloud Config Server for centralized configuration

A new Config Server has been introduced to manage application configuration via a Git repository (micro-company-config), enabling externalized settings for microservices. The server runs on port 8888, is containerized using an Eclipse Temurin 11 base image, and is configured to connect to a specific Git branch (axon3-boot) for configuration data.

configserver · high confidence

Add blog and project management features to the monolithic frontend

The monolithic application's frontend now includes full-featured Angular components for managing blog posts and projects. Users can view, create, and view details for both blog posts and projects, supported by dedicated services, routing, and unit tests. This adds the core content management capabilities to the single-page application.

monolithic/src · high confidence

Add command-side API for creating and publishing blog posts

The command-side-blog module now exposes endpoints to create and publish blog posts. A new BlogController handles POST requests at /blogpostcommands to create a post and at /blogpostcommands/{id}/publishcommand to publish it. These endpoints map to CreateBlogPostCommand and PublishBlogPostCommand respectively, which are handled by the new BlogPostAggregate. The aggregate enforces that only draft posts can be published, throwing a PublishBlogPostException if the post is not in draft status. Validation errors are handled via JSR303 and logged using Logback.

command-side-blog · high confidence

Add documentation module with C4 architecture diagrams

A new documentation module has been introduced to generate and upload C4-style architecture diagrams using Structurizr. The module includes a Spring Boot application that defines a microservices model (including an API gateway, command/query services, and message bus) and generates static context/container views as well as dynamic views for blog and project workflows. The application uploads the resulting workspace to Structurizr, with placeholder API credentials configured in application.properties.

documentation · high confidence

Added Docker and build infrastructure for query-side services

The query-side-blog-service and query-side-project-service now include Dockerfiles that use the eclipse-temurin:11 base image, along with a wait-for-it.sh script to handle service startup dependencies. Each service also received a Maven wrapper (mvnw/mvnw.cmd) and a .mvn/wrapper/maven-wrapper.properties file to standardize the build environment. Additionally, each service was provided with a manifest.yml for PCF Dev deployment, a Spring Boot Application class, and configuration classes for RabbitMQ, security, and cloud profiles, establishing the foundational runtime and build support for these microservices.

query-side-blog-service, query-side-project-service · high confidence

Added Eclipse-based code formatting and import order configurations

Developers can now use the provided Eclipse code formatter and import order files to standardize code style across the project. The \style/mycompany-format.xml\ file defines the formatting rules, while \style/mycompany.importorder\ specifies the import ordering. These files are intended for use with the Eclipse code formatter plugin for IntelliJ IDEA, ensuring consistent code style enforcement.

style · high confidence

Added Eureka registry service with Docker support

The registry module now includes a functional Eureka server implementation, enabling service discovery within the microservices architecture. The change introduces the core Java application class, configuration files (bootstrap.yml, application.yml), and a .gitignore for the registry module. Additionally, Dockerfile and helper scripts (wait-for-it.sh) are added to support containerized deployment, allowing the registry to be built and run as a Docker container.

registry · high confidence

Added Maven wrapper and deployment manifests for command-side services

The command-side-blog-service and command-side-project-service now include Maven wrapper scripts (mvw and mvnw.cmd) and Cloud Foundry deployment manifests (manifest.yml). These additions allow developers to build the services without pre-installing Maven and provide a ready-to-use configuration for deploying to PCF Dev or Pivotal Cloud Foundry, simplifying the local development and deployment workflows.

command-side-blog-service, command-side-project-service · high confidence

Added common base classes for commands and events with audit support

The common module now includes new base classes to support command and event patterns with built-in audit tracking. Specifically, it adds AuditableAbstractCommand and AuditableAbstractEvent, which extend their respective abstract bases to include an AuditEntry (containing 'who' and 'when' details). This allows all commands and events in the system to carry audit information by default.

common · high confidence

Added monolithic application scaffolding and build tooling

The monolithic application now includes the necessary files to build and run the service using Maven. This includes a \.gitignore\ file to exclude the \/data/\ directory, a \README.md\ documenting the deployment as a single monolithic application using Event Sourcing and CQRS, and the standard Maven wrapper scripts (\mvnw\, \mvnw.cmd\) and configuration (\.mvn/wrapper/maven-wrapper.properties\) to manage the Java build environment.

monolithic · high confidence

Added project command-side implementation with Axon 3.0

The command-side-project now includes the full implementation for managing projects using the Axon 3.0 framework. This adds the \ProjectAggregate\ and \ProjectRelease\ domain models, along with \CreateProjectCommand\ and \UpdateProjectCommand\ handlers. A \ProjectController\ exposes REST endpoints at \/projectcommands\ to create and update projects, mapping web requests to Axon commands. The project also includes a \ValidationWsDto\ to handle JSR-303 validation errors and a \logback.xml\ for logging configuration.

command-side-project · high confidence

Added project lifecycle event models and Maven wrapper

Introduced new domain events for project management, specifically ProjectCreatedEvent and ProjectUpdatedEvent, which capture details such as name, repository URL, site URL, category, and description. These events extend the existing AuditableAbstractEvent base class. Additionally, the project now includes the standard Maven wrapper scripts (mvn, mvn.cmd, and maven-wrapper.properties) to ensure consistent build environment setup.

common-project · high confidence

Added query-side project read model and event handling

A new query-side project module was introduced, providing a JPA entity for the Project domain, a Spring Data repository exposing a REST endpoint at /projects, and an Axon event handler that persists ProjectCreatedEvent data into the database.

query-side-project · high confidence

Initial release of the common-blog module

The common-blog module is introduced, providing the foundational structure for blog functionality. This includes the Maven build configuration (mvnw, maven-wrapper.properties), the application properties, and core domain models such as the BlogPostCategory enum. Additionally, new domain events (BlogPostCreatedEvent, BlogPostPublishedEvent) are added to support blog post creation and publication workflows.

common-blog · high confidence

Introduce blog query-side with JPA entity, event handler, and read-only repository

The query-side-blog module now provides the read-side infrastructure for blog posts. A new JPA entity, BlogPost, is mapped to the database, and a corresponding read-only Spring Data JPA repository exposes query methods for retrieving blog posts by draft status, category, publication date, and author. An event handler listens for BlogPostCreatedEvent and BlogPostPublishedEvent to keep the materialized view in sync. The module also includes standard Maven wrapper scripts and a basic Logback configuration.

query-side-blog · high confidence

Introduce circuit-breaker service with Hystrix dashboard and Docker support

A new circuit-breaker service is added, featuring a Spring Boot application with the Hystrix dashboard enabled for monitoring. The service includes a Dockerfile based on Eclipse Temurin 11 and a wait-for-it script to handle service dependencies during container startup. Configuration is managed via bootstrap.yml, which sets the application name and connects to a config server, with specific settings for Docker environments.

circuit-breaker · high confidence

Introduction of a new OAuth2 Authorization Server

A new authorization server component has been added to the platform, providing OAuth2 endpoints for token acquisition, user authorization, and token validation. The server is configured with in-memory user credentials and client definitions, and includes a custom login and approval UI templates. It is also prepared for containerized deployment via a new Dockerfile and supporting scripts.

authserver · high confidence

New API Gateway with WebSocket event streaming

A new API Gateway service has been introduced to act as a central entry point for client applications. It is configured to listen to all system events via RabbitMQ and proxies them to connected clients using a WebSocket-based interface (exposed at /company). A demo HTML page is included to test the live event streaming on /static/socket/index.html.

api-gateway · high confidence

Behavioural changes

Add exception handling and Axon 3.0 configuration

The command-side-project-service now includes a new exception handler that maps Axon 3.0-specific exceptions (such as CommandExecutionException and JSR303ViolationException) to appropriate HTTP status codes, ensuring consistent error responses for clients. Additionally, the service is configured to use Axon 3.0, featuring a BeanValidationInterceptor on the command bus and updated Spring Boot application entry points.

command-side-project-service/src/main/java · high confidence

Dockerfiles updated to use Eclipse Temurin 11 and include wait-for-it.sh helper

The Dockerfiles for the command-side-blog-service and command-side-project-service have been updated to use the eclipse-temurin:11 base image, replacing the previous Java 8/8-based images. Both services now include a wait-for-it.sh script in their Docker images, which allows the application to wait for dependent services to become available before starting, improving container startup reliability.

command-side-blog-service/src/main/docker, command-side-project-service/src/main/docker · high confidence

Maven wrapper configuration added

The project now includes a Maven wrapper configuration file (.mvn/wrapper/maven-wrapper.properties) that specifies the use of Apache Maven 3.3.3. This ensures that all users and build environments use the same version of Maven, improving build consistency and reproducibility.

.mvn · high confidence

Project documentation and repository configuration updated

The repository now includes a Code of Conduct, an Apache 2.0 license file, and a Jekyll minimal theme configuration for GitHub Pages. Documentation has been significantly expanded to cover cloud-native architecture, Spring Cloud, and Axon Framework 3.0, with a new table of contents. Repository settings are configured to treat static assets as vendored, and a Maven wrapper script is added to ensure consistent builds.

(repo-wide) · high confidence

Refactored application entry point and added comprehensive exception handling for Axon commands

The application entry point (Application.java) was restructured to use Spring Boot's standard main method and environment logging. A new global exception handler (RestResponseEntityExceptionHandler) was introduced to standardize error responses for Axon command execution failures, validation errors (JSR303), and data access issues. Additionally, Axon framework configuration was updated to include a BeanValidationInterceptor on the command bus, ensuring that command validation errors are caught and handled consistently.

command-side-blog-service/src/main/java · medium confidence

Standardized Maven wrapper configuration for command-side services

The Maven wrapper configuration for the command-side-blog-service and command-side-project-service has been standardized to use Apache Maven 3.3.3. This ensures consistent build environments across these services.

command-side-blog-service/.mvn, command-side-project-service/.mvn · medium confidence

Dependencies

Initial Maven project structure with Spring Boot, Axon, and Docker support

The project is initialized with a multi-module Maven structure, establishing a parent POM that defines versions for Spring Boot 1.5.22, Spring Cloud Dalston, and Axon Framework 3.4.4. This change introduces the foundational build configuration, including Docker image building via the Spotify docker-maven-plugin, and sets up the core microservices architecture with modules for command/query sides, authentication, configuration, and a monolithic fallback. Additionally, an Angular 2.2.1 frontend is added to the monolithic module.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 54 → 50 (-3.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 92 → 89 (-2.5)
  • Architecture 100 → 86 (-13.7)
  • Maturity 52 → 52 (+0.0)
  • Readiness 46 → 40 (-6.2)
  • Security 74 → 68 (-5.9)
  • Domain Modelling 100 → 66 (-33.5)
  • Event Sourcing 100 → 100 (+0.0)
  • Accessibility 48 → 54 (+5.5)

Resolved (49)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/Application.java)
  • Duplicated block (11 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
  • Duplicated block (12 lines × 3) (api-gateway/src/main/java/com/idugalic/apigateway/Application.java)
  • Duplicated block (5 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
  • Duplicated block (6 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/aggregate/BlogPostAggregate.java)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • LLM evaluation failed
  • Low IaC: DS-0005 (adminserver/src/main/docker/Dockerfile)
  • Low IaC: DS-0005 (api-gateway/src/main/docker/Dockerfile)
  • Low IaC: DS-0005 (authserver/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (adminserver/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (api-gateway/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (authserver/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (circuit-breaker/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (command-side-blog-service/src/main/docker/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (command-side-project-service/src/main/docker/Dockerfile)
  • …and 29 more

New (113)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Duplicated block (11 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/Application.java)
  • Duplicated block (12 lines × 3) (api-gateway/src/main/java/com/idugalic/apigateway/Application.java)
  • Duplicated block (15 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/web/ValidationWsDto.java)
  • Duplicated block (16 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
  • Duplicated block (27 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/configuration/AxonConfiguration.java)
  • Duplicated block (45 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/configuration/RabbitConfiguration.java)
  • Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (5 lines × 6) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/aggregate/BlogPostAggregate.java)
  • Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/web/BlogController.java)
  • Duplicated block (6 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
  • Duplicated block (6 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (7 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
  • Duplicated block (82 lines × 2) (query-side-blog-service/src/main/java/com/idugalic/queryside/blog/configuration/RabbitConfiguration.java)
  • High IaC: WD-COMPOSE-0002 (docker/docker-compose-monolithic.yml)
  • High IaC: WD-COMPOSE-0002 (docker/docker-compose-v3.yml)
  • …and 93 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

idugalic/micro-company was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9102aa048fb5246d87d1d116c7fcd2dd8fa0a926 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.