Skip to content
CAI
Software that uses CAICheck a score

razaghimahdi/Shopping-By-KMP

54.5

Adequate · 22 September 2026

14.1k

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 shopping application built with Kotlin Multiplatform, featuring a shared business logic and UI layer that runs on Android, iOS, Desktop, Web, TV, and Automotive. It includes a Ktor-based backend server handling authentication, product catalog management, and order processing via a MySQL database. The application supports core e-commerce functionalities such as user login, product browsing, shopping cart management, and checkout, while integrating native platform features like Google Maps and device permissions.

How it got here

2023 — Initial project scaffolding and architecture

5 changes.

This period established the foundational structure for the Shopping-By-KMP application, introducing the multi-module repository layout, shared business logic, and cross-platform UI integration. Key work included upgrading core dependencies like Kotlin, Compose Multiplatform, and Ktor, while configuring the build system to support Android, iOS, Desktop, Web, and other target platforms.

2024–2026 — Multi-platform KMP scaffolding

10 changes.

This period focused on establishing the foundational architecture for a cross-platform shopping application using Kotlin Multiplatform and Compose. It involved creating the initial shells for Android, iOS, desktop, web, automotive, and TV platforms, alongside setting up the shared business logic, data models, and a Ktor-based backend server.

Features

Added Android Automotive app module with leanback support

A new \app/automotiveApp\ module has been introduced to support Android Automotive OS. This includes a dedicated \MainActivityAutomotive\ that extends \ComponentActivity\ and renders the shared KMP \App\ composable. The module configures the app for automotive environments by declaring \android.hardware.type.automotive\ as a required feature and adding the \LEANBACK\_LAUNCHER\ intent category, while also updating the application theme to \Theme.AppCompat.Light.NoActionBar\ and enabling backup.

app/automotiveApp · high confidence

Added TV app module with Leanback support

A new tvApp module has been added, enabling the application to run on Android TV devices. This includes an AndroidManifest configured for Leanback (with touchscreen and leanback features marked as not required), a dedicated MainActivity that launches the shared Compose UI, and the necessary app icon and string resources.

app/tvApp · high confidence

Added network response DTOs for shopping app features

The core module now includes a comprehensive set of data transfer objects (DTOs) for serializing network responses, enabling the app to handle data for authentication (LoginRequestDTO, RegisterRequestDTO), user profiles, product browsing (ProductDTO, CategoryDTO, BannerDTO, FlashSaleDTO), shopping cart operations (BasketDTO, BasketAddRequestDTO), order management (OrderDTO, BuyRequestDTO), and user interactions like comments and wishlists. These classes, annotated with kotlinx.serialization, provide the structured data models required for the application's business logic to process API responses.

core · high confidence

Initial Android application shell and configuration

The Android module now includes the core application entry point and configuration files required to run the app. This adds the \MainActivity\ which initializes the Koin dependency injection container and launches the Compose UI, along with an \AndroidManifest.xml\ that declares necessary permissions (camera, internet, location) and sets up the Google Maps API key placeholder. The update also introduces app branding assets, including the launcher icons and a logo, and defines the app name as "Shopping by kmp".

app/androidApp · high confidence

Initial Android platform support and UI assets

The shared module now includes the first concrete implementation for Android, enabling the app to run on that platform. This adds Android-specific logic for dependency injection (DataStore), system UI customization (status bar colors), and native device capabilities including camera and gallery access, location services via Google Maps, and permission handling. Additionally, a comprehensive set of vector drawable assets (icons for navigation, cart, payments, etc.) has been added to the common resources to support the UI layer.

app/shared · high confidence

Initial desktop application entry point with Koin dependency injection

The desktop application now includes a main entry point that initializes the Koin dependency injection framework using the app module and launches a Compose window titled 'Shopping-By-KMP'. The window is configured to open centered on the screen with a size that respects an 800x800 preferred dimension while adapting to 80% of the available screen real estate.

app/desktopApp · high confidence

Initial project scaffolding with full-stack KMP documentation and build tools

This change introduces the initial repository structure for the Shopping-By-KMP application, a cross-platform shopping app built with Jetpack Compose Multiplatform and a Ktor backend. It adds the MIT License, a comprehensive README detailing features (login, cart, payments) and supported platforms (Android, iOS, Desktop, Web, Automotive, TV), and a cleanup script. It also updates the Gradle wrapper scripts (gradlew and gradlew.bat) to a newer POSIX-compliant format, switching the Windows launcher from classpath to jar execution and redirecting error messages to stderr.

(repo-wide) · high confidence

Initial server implementation for the shopping application

The server now provides the complete backend infrastructure for the shopping application, including a Ktor-based API server with JWT authentication, a MySQL database schema with Exposed ORM, and a Koin dependency injection setup. This change introduces the core data models (Users, Products, Categories, Orders, Baskets, etc.), repository implementations for business logic (auth, catalog, search, wishlist, etc.), and the corresponding HTTP routes to expose these capabilities to the client.

server · high confidence

Initial shared business layer for the shopping app

This change introduces the core shared business logic for the shopping application, establishing the foundational architecture for the Android and iOS clients. It adds a comprehensive set of domain models (such as Product, Basket, Order, and User) along with their network-to-domain mapping functions. The update also implements a standardized use-case pattern, including abstract base classes for network and local data operations, and concrete interactors for key features like fetching the home feed, managing the shopping basket, handling user authentication, and processing orders.

shared · high confidence

Initial web application entry point and UI shell

The web application now includes the core files required to launch the UI in a browser. This adds the Kotlin entry point (main.kt) which initializes the Koin dependency injection container and renders the Compose UI into the DOM, along with the corresponding HTML shell (index.html) featuring a loading spinner and the CSS styles (styles.css) to ensure the viewport fills the screen correctly.

app/webApp · high confidence

New Kotlin Multiplatform build convention plugins

The build-logic/convention module now includes new convention plugins (AndroidAppConventionPlugin, CoreConventionPlugin, KotlinMultiplatformConventionPlugin) and supporting configuration utilities. These plugins automate the application of Android, Kotlin Multiplatform, and Compose Multiplatform plugins, configure Android SDK targets (compileSdk, minSdk) and Java/Kotlin 17 compilation settings, and establish a shared dependency set for common modules including Compose UI, kotlinx-serialization, kotlinx-coroutines, and kotlinx-datetime. This standardizes the build configuration for Android apps and shared KMP libraries within the project.

build-logic/convention · high confidence

iOS app scaffolding with Google Maps integration and location permissions

The iOS application structure has been established under app/iosApp, introducing a SwiftUI-based UI that integrates Google Maps via the GoogleMaps SDK. This change adds the necessary Xcode project configuration, including a build phase to compile and sign the shared Kotlin framework, and configures the app bundle with version 1.0. The UI layer (ContentView.swift) implements a map view wrapper that handles user location updates and map interactions, supported by a dedicated LocationManager class. To support these features, Info.plist has been updated with usage descriptions for camera, photo library, and location services (when in use and always), along with URL scheme queries for Google Maps and Chrome. The app entry point initializes the Google Maps SDK with a placeholder API key.

app/iosApp · high confidence

Behavioural changes

iOS app now displays the shared Compose UI instead of a native SwiftUI view

The iOS application's main screen has been updated to render the shared Kotlin Multiplatform Compose UI. Previously, the app presented a native SwiftUI \ContentView\, but it now wraps the shared \MainViewController\ (from the \shared\ module) using \UIViewControllerRepresentable\. This change ensures that users see the cross-platform Compose interface on iOS rather than a platform-specific native implementation.

iosApp · high confidence

Dependencies

Gradle wrapper upgraded to version 9.3.1

The Gradle wrapper has been updated from version 8.2.1 to 9.3.1. This upgrade includes new configuration properties for network timeout (set to 10000ms) and distribution URL validation to improve build reliability and security during dependency resolution.

gradle · high confidence

Project restructured into multi-platform modules with major dependency upgrades

The project has been reorganized from a simple Android/KMP setup into a comprehensive multi-platform architecture, introducing dedicated modules for Android, Desktop, TV, Automotive, and Web applications, alongside a shared library and a backend server. This restructuring is accompanied by significant dependency upgrades: Kotlin has been updated to 2.4.10, the Android Gradle Plugin to 9.1.0, and Compose Multiplatform to 1.11.1. Networking and dependency injection libraries have also been upgraded, with Ktor moving to version 3.0.0 and Koin to 4.0.2, while image loading has shifted to Coil 3. The build system now utilizes a convention plugin structure in \build-logic\ to manage these configurations across the new module hierarchy.

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

Lenses

  • Code Health 98 → 96 (-2.0)
  • Architecture 99 → 98 (-1.7)
  • Maturity 60 → 65 (+5.0)
  • Readiness 50 → 50 (+0.0)
  • Security 34 → 41 (+6.7)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (49)

  • Change coupling: HomeScreen.kt ↔ HomeViewModel.kt (shared/src/commonMain/kotlin/presentation/ui/main/home/HomeScreen.kt)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Dormant codebase
  • Duplicated block (11 lines × 2) (shared/src/commonMain/kotlin/presentation/component/CircleImage.kt)
  • Duplicated block (11 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (12 lines × 3) (shared/src/commonMain/kotlin/presentation/ui/main/payment_method/PaymentMethodScreen.kt)
  • Duplicated block (13 lines × 2) (shared/src/iosMain/kotlin/common/CameraManager.ios.kt)
  • Duplicated block (14 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/main/cart/CartNav.kt)
  • Duplicated block (14 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/main/payment_method/PaymentMethodScreen.kt)
  • Duplicated block (15 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/main/cart/CartScreen.kt)
  • Duplicated block (16 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/main/home/HomeScreen.kt)
  • Duplicated block (17 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/main/home/HomeScreen.kt)
  • Duplicated block (18 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (18 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (19 lines × 2) (shared/src/commonMain/kotlin/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (5 lines × 2) (build-logic/convention/src/main/kotlin/AndroidAppConventionPlugin.kt)
  • Duplicated block (5 lines × 3) (build-logic/convention/src/main/kotlin/SharedConventionPlugin.kt)
  • Duplicated block (6 lines × 2) (build-logic/convention/src/main/kotlin/SharedConventionPlugin.kt)
  • EditProfileScreenKt.EditProfileScreen (cognitive 16) (shared/src/commonMain/kotlin/presentation/ui/main/edit_profile/EditProfileScreen.kt)
  • …and 29 more

New (83)

  • 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 (10–13 lines × 2) (server/src/main/kotlin/com/razzaghi/shopingbykmp/repository/CatalogRepository.kt)
  • Duplicated block (10–21 lines × 3) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/payment_method/PaymentMethodScreen.kt)
  • Duplicated block (11 lines × 2) (server/src/main/kotlin/com/razzaghi/shopingbykmp/routes/NotificationRoutes.kt)
  • Duplicated block (11–12 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (11–12 lines × 2) (server/src/main/kotlin/com/razzaghi/shopingbykmp/repository/SearchRepository.kt)
  • Duplicated block (12 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/component/CircleImage.kt)
  • Duplicated block (12 lines × 3) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/payment_method/PaymentMethodScreen.kt)
  • Duplicated block (14 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/cart/CartScreen.kt)
  • Duplicated block (15–16 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/cart/CartScreen.kt)
  • Duplicated block (17 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (17–18 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/home/HomeScreen.kt)
  • Duplicated block (19–20 lines × 2) (app/shared/src/jsMain/kotlin/com/razzaghi/shopingbykmp/presentation/util/CameraManager.js.kt)
  • Duplicated block (22 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/main/cart/CartNav.kt)
  • Duplicated block (22 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/splash/LoginScreen.kt)
  • Duplicated block (22 lines × 2) (app/shared/src/desktopMain/kotlin/com/razzaghi/shopingbykmp/presentation/util/PermissionsManager.desktop.kt)
  • Duplicated block (27–28 lines × 2) (app/shared/src/iosMain/kotlin/com/razzaghi/shopingbykmp/presentation/util/CameraManager.ios.kt)
  • Duplicated block (55–56 lines × 2) (app/shared/src/commonMain/kotlin/com/razzaghi/shopingbykmp/presentation/ui/splash/LoginScreen.kt)
  • …and 63 more

Changes since last survey

  • 53 commits — 48 feature/other, 5 fixes

By area

  • app/shared — 15 commits
  • server/src — 9 commits
  • (root) — 6 commits
  • core/src — 4 commits
  • app/androidApp — 3 commits
  • gradle/libs.versions.toml — 3 commits
  • .github/workflows — 2 commits
  • app/tvApp — 2 commits
  • (repo) — 1 commit
  • app/automotiveApp — 1 commit
  • app/desktopApp — 1 commit
  • app/iosApp — 1 commit
  • app/webApp — 1 commit
  • build-logic/convention — 1 commit
  • build-logic/settings.gradle.kts — 1 commit
  • core/build.gradle.kts — 1 commit
  • shared/src — 1 commit

Notable commits

  • fix: Fixed MapComponent.ios.kt
  • fix: Fixed major bugs
  • fix: Fixed major bugs
  • fix: Fixed major bugs
  • fix: Fixed major bugs
  • change: - new struct started
  • change: Added convention gradle plugin
  • change: Added convention gradle plugin
  • change: Added frontend project
  • change: Added Platform.desktop.kt
  • change: Added TokenManager.kt
  • change: Added all dtos
  • change: Added all dtos
  • change: Added android functions
  • change: Added automotive module
  • change: Added categories and products images
  • change: Added common dto
  • change: Added desktop functions
  • change: Added di
  • change: Added drawbles
  • …and 33 more

Architecture

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

Added bounded contexts (3)

  • core
  • server
  • shared

Removed bounded contexts (1)

  • webApp

Added dependency edges (2)

  • server → core (coupling)
  • shared → core (coupling)

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

Survey your own repository

razaghimahdi/Shopping-By-KMP 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 df8d034585f3fd26f7ad78b04b452eefd8100383 — 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.