Skip to content
CAI
Software that uses CAICheck a score

Angular2Guy/AngularAndSpring

56.7

Adequate · 21 September 2026

15.6k

lines of production code

Java

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cryptocurrency trading application featuring an Angular frontend and a Spring Boot backend that aggregates market data from exchanges like Bitfinex, Bitstamp, and Coinbase. It processes and stores orderbook quotes and statistics in MongoDB, utilizing Kafka for event streaming and JWT for secure user authentication. The infrastructure supports local development and deployment via Minikube and Helm, with comprehensive architectural testing and monitoring tools integrated throughout the stack.

How it got here

2017–2020 — Project scaffolding and Kubernetes deployment

7 changes.

This period established the foundational infrastructure for the Angular and Spring Boot application, including Docker, CI, and IDE configurations. It progressed to upgrading core dependencies to Spring Boot 4.1 and Java 25, and introduced initial Helm charts and scripts for deploying the application stack on Minikube with Kafka and MongoDB.

2022 — Initial project scaffolding and architecture

10 changes.

This period established the foundational structure for a crypto trading application, introducing a Spring Boot backend with MongoDB and Kafka integration alongside an Angular 18 frontend. The work focused on setting up core security, data persistence, and event streaming capabilities while enforcing architectural standards through comprehensive unit and architecture validation tests. Development environments were standardized with Eclipse configurations and Helm charts for local Kubernetes deployment.

2023–2026 — test coverage and architecture documentation

5 changes.

This period focused on expanding unit test coverage for backend components, including the MyUser controller, MongoQuoteRepository, and JWT utilities, while configuring test environments for MongoDB and Kubernetes. Additionally, system architecture diagrams were added to document the Angular and Spring system structure.

Features

Add Helm chart for local Kafka and Zookeeper development setup

A new Helm chart named 'kafkadev' has been added to the minikube/kafka directory to facilitate local development environments. This chart provisions Zookeeper and Kafka deployments, along with their respective services and Kubernetes Secrets for configuration. The Kafka container image is sourced from 'soldevelo/kafka' (latest), while Zookeeper uses 'bitnami/zookeeper' (latest). The setup exposes Kafka via a NodePort service on port 9092 and configures the broker to connect to Zookeeper on port 2181, allowing users to deploy a functional message queue stack locally with minimal configuration.

minikube/kafka · high confidence

Add Minikube Helm templates for Angular and Spring Boot deployment

This change introduces new Helm chart templates for the minikube Angular and Spring Boot application. The \_helpers.tpl file provides utility functions for generating resource names and listing environment variables from secrets and config maps. The kubTemplate.yaml file defines the Kubernetes resources required to run the application, including a Secret for sensitive configuration, PersistentVolume and PersistentVolumeClaim for MongoDB data storage, a Deployment and Service for the MongoDB database, and a Deployment and NodePort Service for the web application. The web application deployment includes liveness and startup probes configured to check the Spring Boot Actuator health endpoints.

minikube/angularandspring/templates · high confidence

Added Eclipse IDE configuration files for Java 25 and UTF-8 encoding

New Eclipse project settings have been added to standardize the development environment. The project is now configured to use Java 25 as the source, compliance, and target platform, with preview features disabled. Additionally, all source and resource directories are explicitly set to use UTF-8 encoding, and M2E workspace project resolution is enabled.

backend/.settings · high confidence

Added Eclipse IDE configuration files for the backend

The backend module now includes .classpath and .project files, enabling direct import and building of the project within the Eclipse IDE using the JDT and M2E plugins. The configuration targets Java SE 25 and defines source folders for main and test code, along with output directories under target.

.settings, backend · high confidence

Added Eclipse IDE configuration files for the frontend module

The frontend module now includes .classpath and .project files, enabling direct import and building of the project within the Eclipse IDE using the JDT and M2E plugins. This configuration defines the source folders (src/main/java, src/main/resources, src/test/java, src/test/resources), sets the Java SE-25 runtime, and configures the Maven build path, allowing developers to work on the frontend code using Eclipse without relying solely on external build tools or other IDEs.

frontend · high confidence

Added minikube setup and helm command scripts

New shell scripts have been added to the minikube directory to assist with local Kubernetes environment configuration. minikubeSetup.sh provides commands to configure minikube resources (memory, CPU, driver), enable the metrics-server addon, and start the cluster with an expanded node-port range. helmCommand.sh contains commented-out examples for installing Helm charts for Angular/Spring and Kafka applications.

minikube · high confidence

Added system architecture diagrams and workspace configuration

The \structurizr\ directory now includes a \.gitignore\ file to exclude local workspace artifacts (\workspace.json\, \.structurizr/\) and a new SVG component diagram (\structurizr-1-Components.svg\) that visualizes the Angular and Spring system's architecture, detailing components such as the Angular Frontend, User Controller, Kafka Consumer/Producer, and various services.

structurizr · high confidence

Initial Helm chart for Angular and Spring with Kafka deployment

This change introduces the initial Helm chart structure for deploying the Angular and Spring application integrated with Kafka. It includes the chart metadata (Chart.yaml), default configuration values (values.yaml), and ignore patterns (.helmignore). The configuration defines container images for the web application, MongoDB, Kafka (using the Soldevelo image), and Zookeeper (using the Bitnami image), along with service names, environment variables, and secret references required for the Kubernetes deployment.

minikube/angularandspring, minikube/angularandspringwithkafka · high confidence

Initial Helm chart templates for Kubernetes deployment

Added Helm template files (\_helpers.tpl and kubTemplate.yaml) that define the Kubernetes resources required to run the application stack. These templates configure Deployments, Services, Secrets, and PersistentVolumeClaims for the Kafka broker, MongoDB database, and the web application, including environment variable injection and resource limits.

minikube/angularandspringwithkafka/templates · high confidence

Initial backend resource configuration and reporting assets

This change introduces the foundational configuration files and assets for the backend service. It adds environment-specific Spring Boot configurations (application.properties, application-kafka.properties, application-prod.properties) that define Kafka connectivity, MongoDB connection strings with compression, JWT security settings, and Actuator health/metrics endpoints. Additionally, it includes a .gitignore for static assets, a log4j.xml for logging configuration, and a currencyReport.jrxml file for generating cryptocurrency reports using JasperReports.

backend/src/main/resources · high confidence

Initial backend structure for crypto trading application

The backend application is introduced with a new Spring Boot entry point and a comprehensive set of configuration classes. Security is handled via a JWT token filter and a web security configuration that enforces stateless sessions and sets Content Security Policy headers. The system integrates with MongoDB for persistence and scheduling locks, and configures Kafka for event streaming. REST controllers are added to expose endpoints for Bitfinex, Bitstamp, and Coinbase orderbooks and quotes, alongside user authentication and statistics. Scheduled tasks are implemented to periodically fetch market data and calculate averages, utilizing virtual threads for asynchronous execution.

backend/src/main/java · high confidence

Initial project scaffolding with Docker, CI, and monitoring scripts

This change introduces the foundational build and operational infrastructure for the Angular and Spring Boot application. It adds a Dockerfile targeting JDK 25 with specific JVM memory tuning, a .travis.yml configuration for Java 11 CI, and a .gitignore for IDE and build artifacts. Additionally, it provides shell scripts to manage local development dependencies (MongoDB 8.2, Kafka via Soldevelo image, Prometheus, Grafana, and Structurizr) and a Maven wrapper for consistent builds, establishing the environment required to run the application and its associated monitoring stack.

(repo-wide) · high confidence

Behavioural changes

Angular 18 migration with standalone components and signals

The frontend application has been upgraded to Angular 18, adopting the standalone component architecture and replacing the traditional module-based approach with the new \app.config.ts\ provider model. This change introduces Angular signals for reactive state management (e.g., in \DetailBase\) and utilizes the \takeUntilDestroyed\ operator for automatic cleanup, resulting in a more modern and performant codebase.

frontend/src · high confidence

Test coverage

Added architecture and pattern validation tests; Added test configuration for MongoDB and Kubernetes constraints; Added unit tests for Coinbase, User, and Statistics services; Added unit tests for JWT utility functions; Added unit tests for MongoQuoteRepositoryImpl; Added unit tests for password encryption and JWT token generation; Added unit tests for the MyUser controller.

Dependencies

Updated Maven Wrapper to version 3.2.0 with Maven 3.9.5

The project's Maven Wrapper has been upgraded to version 3.2.0, and the underlying Maven distribution is now set to version 3.9.5. This ensures that developers and CI systems using the wrapper will automatically download and use these specific versions, providing consistent build behavior across environments.

.mvn · high confidence

Upgrade to Spring Boot 4.1 and Java 25

The project has been upgraded to Spring Boot 4.1.0, which requires Java 25. This update includes the addition of the \spring-boot-starter-restclient\ dependency for HTTP client functionality and the \spring-boot-starter-micrometer-metrics\ dependency for metrics support. The backend also integrates \springdoc-openapi-starter-webmvc-ui\ version 3.0.0-RC1 for OpenAPI documentation and \shedlock\ version 6.0.1 for distributed scheduling with MongoDB. On the frontend, the Angular application has been updated to version 22.0.1.

(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

Score

  • CAI 54 → 57 (+3.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 91 → 98 (+6.6)
  • Architecture 83 → 91 (+8.0)
  • Maturity 67 → 79 (+12.0)
  • Readiness 58 → 59 (+1.2)
  • Security 56 → 64 (+8.4)
  • Domain Modelling 100 → 93 (-6.7)
  • Accessibility 43 → 44 (+0.3)

Resolved (63)

  • Change coupling clique: BitfinexService.java, BitstampService.java, CoinbaseService.java, ItbitService.java (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Change coupling clique: bfdetail.component.ts, bsdetail.component.ts, cbdetail.component.ts, ibdetail.component.ts (frontend/src/angular/src/app/details/bfdetail/bfdetail.component.ts)
  • Coverage not included — suite not readable by the collector
  • Critical CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (5 lines × 2) (backend/src/main/java/ch/xxx/trader/usecase/services/CoinbaseService.java)
  • Duplicated block (5 lines × 4) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (5 lines × 6) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (6 lines × 2) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (6 lines × 3) (backend/src/main/java/ch/xxx/trader/adapter/cron/ScheduledTask.java)
  • Duplicated block (6 lines × 3) (backend/src/main/java/ch/xxx/trader/adapter/cron/ScheduledTask.java)
  • Duplicated block (6 lines × 3) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (6 lines × 3) (backend/src/main/java/ch/xxx/trader/usecase/services/CoinbaseService.java)
  • Duplicated block (6 lines × 6) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (7 lines × 4) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
  • …and 43 more

New (90)

  • Change coupling: BitstampService.java ↔ CoinbaseService.java (backend/src/main/java/ch/xxx/trader/usecase/services/BitstampService.java)
  • Change coupling: app.config.ts ↔ login.component.ts (frontend/src/angular/src/app/app.config.ts)
  • Change coupling: app.config.ts ↔ quoteoverview.component.ts (frontend/src/angular/src/app/app.config.ts)
  • Change-coupling hub: BitfinexService.java → BitstampController.java, BitstampService.java, CoinbaseService.java (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • ClassTooLong: QuoteCb (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteCb.java)
  • ClassTooLong: QuoteDayCb (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteDayCb.java)
  • ClassTooLong: QuoteHourCb (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteHourCb.java)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no project overview (README.md)
  • Duplicated block (106 lines × 3) (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteBf.java)
  • Duplicated block (11 lines × 3) (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteBs.java)
  • Duplicated block (13 lines × 2) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (3929 lines × 3) (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteCb.java)
  • Duplicated block (5 lines × 2) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (5 lines × 2) (backend/src/main/java/ch/xxx/trader/usecase/services/JwtTokenService.java)
  • Duplicated block (5 lines × 3) (backend/src/main/java/ch/xxx/trader/domain/model/entity/QuoteBs.java)
  • Duplicated block (5 lines × 3) (backend/src/main/java/ch/xxx/trader/usecase/services/CoinbaseService.java)
  • Duplicated block (5 lines × 4) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • Duplicated block (7 lines × 4) (backend/src/main/java/ch/xxx/trader/usecase/services/BitfinexService.java)
  • …and 70 more

Changes since last survey

  • 76 commits — 64 feature/other, 12 fixes

By area

  • backend/src — 44 commits
  • (repo) — 17 commits
  • frontend/src — 8 commits
  • (root) — 6 commits
  • minikube/angularandspring — 1 commit

Notable commits

  • fix: fix: architecture
  • fix: fix: architecture
  • fix: fix: cleanup
  • fix: fix: config
  • fix: fix: config
  • fix: fix: config
  • fix: fix: finder
  • fix: fix: finder
  • fix: fix: finder
  • fix: fix: finder
  • fix: fix: finder
  • fix: fix: finder
  • change: Merge pull request #117 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/multi-fa9ab9e434
  • change: Merge pull request #120 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/immutable-5.1.9
  • change: Merge pull request #121 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/shell-quote-1.10.0
  • change: Merge pull request #122 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/tar-7.5.22
  • change: Merge pull request #124 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/socket.io-parser-4.2.7
  • change: Merge pull request #125 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/ip-address-10.4.0
  • change: Merge pull request #126 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/undici-6.28.0
  • change: Merge pull request #127 from Angular2Guy/dependabot/npm_and_yarn/frontend/src/angular/fast-uri-3.1.5
  • …and 56 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

Angular2Guy/AngularAndSpring 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 549268a41af911b271573bfb746d47775fd40dd1 — 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.