davidtakac/prognoza
54.0
Adequate · 22 September 2026
9.4k
lines of production code
Kotlin
with Swift
7
measurements over time
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.