mirzemehdi/quotesapp
65.8
Adequate · 22 September 2026
3.2k
lines of production code
Kotlin
primary language
7
measurements over time
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.