Skip to content
CAI
Software that uses CAICheck a score

davidtakac/prognoza

54.0

Adequate · 22 September 2026

9.4k

lines of production code

Kotlin

with Swift

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform weather application for Android and iOS, built using Kotlin Multiplatform to share core logic and data access. It provides users with customizable settings for units, themes, and visual modes, while leveraging a shared SDK for data fetching and storage. The architecture emphasizes modern Android development practices, including Jetpack Compose, Hilt, and centralized dependency management.

How it got here

2021 — Android build system migration and cleanup

6 changes.

The project underwent a significant modernization of its Android build system, migrating from Groovy to Kotlin DSL and updating the Gradle wrapper. This period also involved removing obsolete test files, legacy UI scaffolding, and outdated dependencies to prepare for a new architecture.

2022 — Android and iOS app development

6 changes.

This period focused on building out the Android and iOS applications, introducing user-facing features such as settings, themes, and weather icons. The Android app was refactored to use shared UI components and a new SDK interface, while the iOS app structure was initialized. Centralized dependency management was also implemented to streamline the build process.

Features

Add Android settings and settings screen for unit, theme, and mood mode preferences

Users can now configure app preferences directly within the app. This includes selecting temperature, wind, precipitation, and pressure units, as well as choosing between dark, light, or system-following themes. Additionally, users on Android 12+ can enable dynamic mood modes (dynamic or forecast-based) to influence the app's visual style. These settings are persisted via Android's SharedPreferences and are managed by new ViewModels and UI mappers that map domain models to UI states.

androidApp/src · high confidence

Added dark mode weather icons and conversion scripts

Added a complete set of dark-mode weather icons (SVGs) in the \weather-icons/dark\ directory, featuring adjusted colors for elements like the moon, rain, and snow to ensure visibility against dark backgrounds. The \README.md\ and \convert\ scripts have been updated to support generating these dark-mode assets for both Android and iOS platforms, ensuring consistent visual presentation across light and dark themes.

weather-icons · high confidence

iOS app skeleton and weather icon assets added

The iOS application structure has been initialized with a new Xcode project configuration, including the main app entry point, a forecast view, and supporting view models. Additionally, a comprehensive set of weather condition icons has been added to the asset catalog, providing both light and dark mode variants for various weather states.

iosApp · high confidence

Behavioural changes

Android app changelog and build configuration

The Android app now includes a comprehensive CHANGELOG.md file documenting version history, including the addition of iOS support, new translations, and various bug fixes and features. Additionally, ProGuard rules have been added to support kotlinx.serialization, and the .gitignore file has been moved to the androidApp directory.

androidApp · high confidence

Android app refactored with new UI components and shared SDK

The Android app has been refactored to use a new set of shared UI components, including a reusable toolbar, snackbar, and loading indicator, alongside new state classes for settings, forecast, and places. The shared layer now exposes a \PrognozaSdk\ interface that abstracts data fetching and storage, with Android-specific implementations for logging, database drivers, and date parsing. Additionally, a new \TextResource\ abstraction is used across the app to handle text formatting and localization, and the widget infrastructure has been updated to use a new state definition for persisting widget data.

shared · high confidence

Centralized dependency and version management for Android and KMM modules

The buildSrc module now includes a new Kotlin file, Dependencies.kt, which centralizes the management of all project dependencies and their versions. This includes specific versions for Kotlin (1.7.10), Gradle (7.2.2), Hilt (2.43.2), and Android SDK targets (minSdk 26, compileSdk 33). It also defines dependencies for Ktor (2.1.3), SqlDelight (1.5.3), Coroutines (1.6.1), and various AndroidX libraries (Compose 1.3.1, Espresso 3.4.0). This change simplifies dependency updates and ensures consistency across the Android and KMM codebases.

buildSrc · high confidence

Removal of app/proguard-rules.pro

The ProGuard rules file (app/proguard-rules.pro) has been removed from the project. This change eliminates the default set of ProGuard configuration rules that were previously applied to the app, which may affect how the release build is minified and obfuscated.

app · high confidence

Removed legacy AndroidX/View-based app shell and default theming

The app's original \MainActivity\ and its associated XML layout, along with the default light and dark theme definitions (\themes.xml\, \themes-night.xml\) and color resources (\colors.xml\), have been removed. This cleanup removes the initial scaffold of the application, likely to make way for a new UI architecture (such as Jetpack Compose) that is being developed elsewhere in the codebase.

app/src/main · high confidence

Test coverage

Removed obsolete Android instrumented test; Removed obsolete unit test file.

Dependencies

Migrate Android build system to Kotlin DSL and modernize dependencies

The Android app's build configuration has been migrated from Groovy to Kotlin DSL, introducing structured build scripts for the Android and shared modules. This change updates the project to use modern tooling, including Kotlin Multiplatform for the shared module, Ktor for networking, SqlDelight for database management, and Hilt for dependency injection, while removing older dependencies like Retrofit, Gson, and Koin.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 7.3.3

The Gradle wrapper has been updated from version 6.7.1 to 7.3.3. This upgrade ensures the project uses a more recent version of the Gradle build tool, which may include new features, performance improvements, and bug fixes.

gradle · 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 53 → 54 (+1.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 96 → 98 (+1.5)
  • Architecture 98 → 93 (-4.9)
  • Maturity 43 → 43 (+0.0)
  • Readiness 44 → 52 (+8.5)
  • Security 62 → 58 (-4.0)

Resolved (12)

  • Change coupling: GetSavedPlaces.kt ↔ SearchPlaces.kt (shared/src/commonMain/kotlin/hr/dtakac/prognoza/shared/domain/GetSavedPlaces.kt)
  • Change coupling: MainActivity.kt ↔ AppSnackBar.kt (androidApp/src/main/java/hr/dtakac/prognoza/ui/MainActivity.kt)
  • Change coupling: MainActivity.kt ↔ SettingsScreen.kt (androidApp/src/main/java/hr/dtakac/prognoza/ui/MainActivity.kt)
  • 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 × 2) (androidApp/src/main/java/hr/dtakac/prognoza/ui/forecast/ComingDay.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (19)

  • Boundary-crossing change coupling: ForecastState.kt ↔ Forecast.kt (androidApp/src/main/java/hr/dtakac/prognoza/presentation/forecast/ForecastState.kt)
  • Change coupling: UseCaseModule.kt ↔ MappingUtils.kt (androidApp/src/main/java/hr/dtakac/prognoza/di/UseCaseModule.kt)
  • Change-coupling hub: MainActivity.kt → AppSnackBar.kt, ForecastScreen.kt, SettingsScreen.kt (androidApp/src/main/java/hr/dtakac/prognoza/ui/MainActivity.kt)
  • 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 (9 lines × 2) (androidApp/src/main/java/hr/dtakac/prognoza/ui/forecast/ComingDay.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)
  • Medium: security finding (details withheld)
  • No ADRs found
  • No dependency advisory monitoring
  • TodoComment (androidApp/src/main/java/hr/dtakac/prognoza/PrognozaApplication.kt)
  • TodoComment (androidApp/src/main/java/hr/dtakac/prognoza/widget/ForecastWidgetWorker.kt)

Architecture

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

Added bounded contexts (1)

  • androidApp

Added dependency edges (1)

  • androidApp → shared

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

Survey your own repository

davidtakac/prognoza 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 d5a1e0d8937d7769895368b6dc0ad39aaa1b9a4b — 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-90d5d2fe38ee.