Skip to content
CAI
Software that uses CAICheck a score

mirzemehdi/quotesapp

65.8

Adequate · 22 September 2026

3.2k

lines of production code

Kotlin

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform quotes application built with Kotlin Multiplatform, featuring a Ktor-based backend and shared UI logic for Android, iOS, and Desktop. It provides core infrastructure for dependency injection, network handling, and UI components, alongside a REST API for managing and broadcasting quotes. The architecture enforces clean code standards through automated static analysis and comprehensive test coverage.

How it got here

2020–2022 — Build system and architecture modernization

11 changes.

This period focused on modernizing the project's infrastructure by migrating Gradle build scripts to Kotlin DSL and upgrading the Gradle wrapper. The team established a centralized, type-safe build configuration with shared templates for Android and multiplatform modules, while integrating static analysis tools like Detekt and Ktlint to enforce clean architecture and code quality.

2023 — Cross-platform architecture and feature implementation

24 changes.

This period focused on establishing a shared, cross-platform architecture using Jetpack Compose and Koin, extending support to iOS and desktop environments. The team implemented core infrastructure, including dependency injection, network handling, and UI components, while simultaneously building out the Quotes feature with full presentation and data layers. Additionally, a backend server was scaffolded to support the application's data and real-time update requirements.

Features

Add New Quote screen and navigation integration

The Quotes feature now includes a new 'Add New Quote' screen, allowing users to input and submit a new quote and its author. This change introduces the presentation layer for adding quotes, including the route, UI components, and navigation wiring, enabling users to create new quotes within the app.

shared/features/quotes/src/commonMain/kotlin/com/mmk/quotes/presentation/addnewquote · medium confidence

Added iOS entry point for Compose UI

A new Kotlin file, main.ios.kt, was added to the iosMain source set. This file defines the MainViewController function, which serves as the entry point for the iOS application by returning a ComposeUIViewController that renders the RootScreen component.

shared/root/src/iosMain · high confidence

Added pre-commit hooks for static analysis on Linux and Windows

New shell scripts for Linux (pre-commit-linux) and Windows (pre-commit-windows) have been added to the scripts directory. These hooks automatically run static analysis tools (ktlint and detekt) before commits are made, providing platform-specific execution paths to ensure code style and quality checks are enforced consistently across development environments.

scripts · high confidence

Added quotes list and item components

The quotes feature now includes a new presentation layer in the shared module, introducing a scrollable list of quotes with support for pagination, loading states, and empty/error views. Users can view quotes in a card-based layout with like and share actions, and the interface handles loading, empty, and error states with a retry option.

shared/features/quotes/src/commonMain/kotlin/com/mmk/quotes/presentation/allquotes · high confidence

Backend server project scaffolding and build configuration

The backend-server module has been initialized with essential project scaffolding, including a .gitignore file to exclude IDE and build artifacts, a README.md documenting the API endpoints (GET/POST /quotes) and deployment instructions for App Engine, and the Gradle wrapper (gradlew, gradlew.bat, and gradle-wrapper.properties) to standardize the build environment.

backend-server · high confidence

Initial backend server implementation with Ktor and MongoDB integration

The backend server now includes a complete Ktor-based application structure, featuring a REST API for managing quotes (including pagination, insertion, and a WebSocket endpoint for real-time updates) and a MongoDB data source for persistence. The server is configured to run on App Engine with Java 11, and includes standard plugins for routing, serialization, monitoring, and WebSocket support.

backend-server/src · high confidence

Initial iOS app shell and configuration

The iOS application has been initialized with a new Xcode project structure, including the main entry point (iOSApp.swift) and a SwiftUI ContentView that wraps the shared Compose UI. The setup includes Firebase initialization in the AppDelegate, a GoogleService-Info.plist for Firebase configuration, and standard iOS asset catalogs for app icons and colors. This establishes the native iOS host for the cross-platform application.

iosApp · high confidence

Introduces shared UI components and theming

The shared UI module now provides a set of reusable, cross-platform UI components including a circular progress bar, an outlined text field with custom text selection colors, and a toast message handler. These components are styled using a new shared theme with defined colors and typography, enabling consistent appearance across platforms.

shared/common/ui/src/commonMain/kotlin · high confidence

Introduces shared core utilities and UI components for cross-platform apps

The update introduces shared core utilities and UI components for cross-platform apps. This includes a new \Result\ and \ErrorEntity\ model for handling asynchronous operations and errors, a \BackgroundExecutor\ for coroutine-based background tasks, and a \ViewModel\ base class for Android. Additionally, it adds a shared UI theme system with light/dark mode support, a \TextFieldState\ utility, and a \UiMessageHandler\ for managing UI-level messages across the application.

test-utils · high confidence

Introduces the root navigation and application initialization structure

The app now features a centralized root screen that manages navigation between the Quotes, Add Quote, and Profile destinations. This includes a bottom navigation bar for switching between main sections, a floating action button for adding new quotes, and a Koin-based initialization process that assembles the application's dependency injection modules.

shared/root/src/commonMain · medium confidence

New Android test utilities for coroutines, Koin, and lifecycle

Added new Android-specific test utilities in the shared/test-utils module. These include a JUnit 5 extension for managing coroutine dispatchers, a custom Android test runner and application class for Koin dependency injection, and a JUnit 5 extension for synchronously executing Android Architecture Components tasks. These tools simplify setting up test environments for Android-specific features.

shared/test-utils · medium confidence

New Profile Screen UI with Compose

The profile feature now includes a new UI implementation using Jetpack Compose. The ProfileScreen composable renders a user's avatar, name, and bio in a vertical column layout, utilizing shared theme colors (OrangeDark, OrangeLight) and resources. An Android instrumented test (ProfileScreenTest) has been added to verify that the name and bio text nodes are present in the rendered UI tree.

shared/features/profile · medium confidence

New shared build configurations for Android and Multiplatform Compose

The build system now provides standardized Gradle build scripts for Android libraries and multiplatform Compose projects. The new 'android-library' configuration sets up Android-specific build settings, including Compose support, test options, and dependencies for UI and unit testing. The 'multiplatform-compose' script establishes a Kotlin Multiplatform project structure supporting Android, Desktop (JVM), and iOS targets, configuring shared dependencies for Compose, Koin, and Coroutines across all platforms. These changes streamline the setup for new modules, ensuring consistent build configurations and testing environments across the application.

buildSrc/src/main/kotlin/common · high confidence

Quotes data layer migrated to shared module with Ktor client and Koin DI

The quotes feature's data layer has been moved to the shared module, introducing a new dependency injection setup using Koin (RemoteSourceModule, RepositoryModule) and configuring an io.ktor HttpClient with JSON serialization and WebSocket support. The implementation includes a QuotesApiService interface and its Ktor-based QuotesApiServiceImpl, which handles paginated quote retrieval, real-time quote observation via WebSocket, and adding new quotes. A QuoteMapper handles domain-to-network request conversion, and QuotesRepositoryImpl orchestrates remote data fetching and background execution.

shared/features/quotes/src/commonMain/kotlin/com/mmk/quotes/data · high confidence

iOS toast message implementation

Added iOS-specific implementations for displaying toast messages on the screen. The new files provide the actual logic for showing temporary UI notifications on iOS, including a Koin dependency injection module, a handler class, and extension functions to render toast views using UIKit.

shared/common/ui/src/iosMain · high confidence

Behavioural changes

3 commits (0 fixes) modifying outputs

A change to existing behaviour in outputs — 3 commits, 3 files.

outputs · medium confidence · unverified

Add platform-specific core implementations for Android and iOS

The core module now includes platform-specific implementations for network connectivity checks and view model management. On Android, the app uses Android's ConnectivityManager to detect network status and integrates with Koin for view model injection. On iOS, the app uses SystemConfiguration to check network reachability and provides a corresponding Koin-based view model provider. These changes ensure the shared core module can function correctly on both platforms by providing the necessary platform-specific code.

shared/common/core/src/iosMain · high confidence

Added Android-specific entry point for the root module

A new Android-specific implementation of the root module's main view has been added. This file defines the Android entry point, integrating Compose navigation with a back handler to manage navigation state and application exit.

shared/root/src/androidMain · medium confidence

Added Firebase configuration for the Android app

The app module now includes a google-services.json file containing Firebase project and client configuration, enabling Firebase services for the com.mmk.quotesapp package. Additionally, the ProGuard rules file was updated to reference build.gradle.kts instead of build.gradle, reflecting the project's migration to Kotlin DSL for Gradle configuration.

app · high confidence

Added desktop-specific implementations for core utilities and UI

Introduced desktop platform-specific implementations for core network handling, view model scoping, and UI message display. The desktop build now registers a concrete DesktopNetworkHandler to check connectivity, provides a desktop-specific ViewModel base class with coroutine scope management, and implements DesktopToastMessageHandler to show messages via JOptionPane dialogs. These changes wire up the shared logic to the desktop environment.

shared/common/core/src/desktopMain, shared/common/ui/src/desktopMain, shared/root/src/desktopMain · high confidence

Android-specific toast message handling

The Android implementation of the toast message handler has been added to the shared UI module. This includes an Android-specific Koin module that binds the Android toast handler, a context extension for displaying toasts, and the concrete Android toast message handler that converts UI messages into Android Toast notifications.

shared/common/ui/src/androidMain · medium confidence

Centralized build configuration and dependency management

The build system has been refactored to use Kotlin DSL for build scripts, introducing centralized configuration files. \ConfigData.kt\ defines app-level constants such as the application ID, SDK versions, and versioning. \Versions.kt\ acts as a single source of truth for all library versions, including AndroidX, Jetpack Compose, Ktor, and testing frameworks. \Dependencies.kt\ groups these libraries into logical categories (e.g., Networking, Firebase, Compose) to simplify dependency declarations across modules. Additionally, \DependencyHandlerExt.kt\ provides custom Gradle extension functions to streamline the application of dependencies and plugins, while \Modules.kt\ defines the project's module structure.

buildSrc/src/main/kotlin · high confidence

Domain layer refactored with new use cases and repository interface

The quotes domain module has been restructured to introduce a formal repository interface (QuotesRepository) and dedicated use-case interfaces (AddNewQuote, GetAllQuotesByPagination) along with their implementations. This change introduces reactive data observation via Flow for quote lists and enforces validation on pagination parameters, providing a more robust and observable domain layer for the quotes feature.

shared/features/quotes/src/commonMain/kotlin/com/mmk/quotes/domain · medium confidence

Gradle wrapper upgraded to version 7.5

The Gradle wrapper configuration has been updated to use Gradle 7.5 (from 5.6.4), ensuring the project builds with a newer, more stable version of the Gradle build tool.

gradle · high confidence

Initial desktop app entry point and configuration

Added the primary entry point for the desktop application, establishing a Compose-based window titled "QuotesApp" that initializes the application and renders the main view. Included a .gitignore file to exclude build artifacts and Gradle caches.

desktopApp · medium confidence

Introduces shared core abstractions and utilities

The shared core module now provides a set of foundational components for the application's architecture. This includes a Koin-based dependency injection setup with platform-specific extensions for ViewModels, generic mapper interfaces for domain, entity, and network transformations, a cross-platform ViewModel base class, network connectivity checks, and a unified logging interface backed by Napier. These changes establish the core infrastructure for dependency injection, state management, and cross-platform utility functions.

shared/common/core/src/commonMain · medium confidence

Migrate app entry point to Compose-based UI

The application's entry point has been refactored to use Jetpack Compose for rendering the main view. The \BaseApplication\ class was created to initialize the app and Koin dependency injection, while \MainActivity\ was moved to the \ui\ package and updated to use \setContent\ with a \MainView\ Composable, replacing the previous XML-based layout inflation.

app/src/main/java/com/mmk/quotesapp/ui · high confidence

New static analysis and code coverage tooling for Android and Kotlin

The build system now includes dedicated Gradle plugins for static code analysis and test coverage reporting. A new Detekt plugin configures the static code analyzer using a root-level YAML configuration. Separate Jacoco plugins are introduced for Android and Kotlin modules, enabling HTML and XML code coverage reports for unit and Android tests, with specific exclusions for generated classes and test code. Additionally, a Ktlint plugin is added to enforce Kotlin code style, configured to run on all Kotlin scripts and source files while excluding generated directories.

buildSrc/src/main/kotlin/plugins · high confidence

Removal of Hilt application class

The custom Hilt application class (BaseApplication) has been removed from the app module. This change eliminates the explicit application class definition, likely relying on Hilt's default application setup or a different configuration.

app/src/main/java/com/mmk/quotesapp · high confidence

Test coverage

Added Android instrumented UI tests for the Quotes feature; Added Android unit tests for network connectivity checks; Added tests for custom Detekt rules enforcing clean architecture layering; Added unit tests for the Quotes feature; Removed placeholder unit and instrumented tests.

Dependencies

Migrated Android and backend build configurations to Kotlin DSL

The project has been refactored from Groovy-based Gradle build scripts to Kotlin DSL (\.kts\) files, providing a more type-safe and consistent build configuration. This change includes the addition of a new backend server module using Ktor, setup for a desktop application using Jetpack Compose, and the introduction of a shared multiplatform module structure for iOS and Android. Additionally, static code analysis tools like Ktlint and Detekt have been integrated into the build process.

(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 58 → 66 (+7.7)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-0.6)
  • Architecture 97 → 91 (-5.9)
  • Maturity 57 → 57 (+0.0)
  • Readiness 57 → 57 (+0.0)
  • Security 49 → 88 (+39.0)

Resolved (19)

  • Boundary-crossing change coupling: Dependencies.kt ↔ QuotesApiServiceImpl.kt (buildSrc/src/main/kotlin/Dependencies.kt)
  • Change coupling: AddNewQuoteRoute.kt ↔ QuotesRoute.kt (shared/features/quotes/src/commonMain/kotlin/com/mmk/quotes/presentation/addnewquote/AddNewQuoteRoute.kt)
  • Change coupling: Dependencies.kt ↔ DependencyHandlerExt.kt (buildSrc/src/main/kotlin/Dependencies.kt)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Secret: gcp-api-key (app/google-services.json)
  • Test reliability not included
  • single-maintainer — knowledge-concentration (bus factor) risk

New (23)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 2) (customdetektrules/src/main/java/com/mmk/customdetektrules/rules/DataImportsPresentationLayersRule.kt)
  • Duplicated block (7 lines × 2) (shared/common/ui/src/desktopMain/kotlin/com/mmk/common/ui/util/toast/DesktopToastMessageHandler.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • No ADRs found
  • No dependency advisory monitoring
  • …and 3 more

Architecture

  • Containers 0 added · 0 removed · contexts 5 added · 1 removed · edges 2 added · 0 removed

Added bounded contexts (5)

  • backend-server
  • core
  • customdetektrules
  • quotes
  • ui

Removed bounded contexts (1)

  • test-utils

Added dependency edges (2)

  • quotes → core
  • quotes → ui

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

Survey your own repository

mirzemehdi/quotesapp 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 22 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 20c2dc873f47a8c5bb9b3bd964e8f401d9de02f1 — 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-821afab8930d.