oguzsout/Wallies
43.0
Weak · 21 September 2026
12.2k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This system is an Android application that retrieves, displays, and manages wallpaper content from the Unsplash API. It features a modular architecture with distinct layers for networking, data handling, and domain logic, supporting user authentication, favorites management, and profile editing. The app utilizes modern Android development practices, including Kotlin, Hilt for dependency injection, and Room for local storage, while ensuring release builds are correctly configured to preserve critical serialization and reflection requirements.
Features
Add favorites persistence with Room database and DAO
The cache module now includes a new Room-based data layer for managing user favorites. This introduces a FavoriteImage entity, a FavoriteDao for insert/delete/query operations, and a FavoritesDatabase singleton, all wired via Hilt's DatabaseModule for dependency injection. An AndroidManifest.xml is also added for the cache module, and unit tests verify the DAO's insert and delete behaviors.
cache/src · medium confidence
Added domain module configuration files
The domain module now includes a .gitignore file to exclude build artifacts and a proguard-rules.pro file to preserve specific classes and interfaces during code shrinking and obfuscation, including support for Parcelable, Gson, Retrofit, and Ktor.
domain · high confidence
Added network module with ProGuard rules for serialization and Ktor
The network module has been added to the project, including a .gitignore file and ProGuard configuration files. The ProGuard rules explicitly preserve classes in the com.oguzdogdu.network.model and com.oguzdogdu.domain.model packages, as well as Kotlin coroutines, Gson adapters, Retrofit types, and Ktor server classes. This ensures that these components are not obfuscated or removed during the release build process, which is critical for proper serialization and network functionality in production.
network · medium confidence
Domain layer scaffolding for authentication, favorites, and content retrieval
The domain module now includes a complete set of use cases, repositories, and data models to support user authentication (sign-in, sign-up, Google sign-in, password updates, profile changes), favorites management (add, delete, retrieve), and content retrieval (popular/latest images, collections, topics, user details). This establishes the backend logic and data structures required for these features.
domain/src · high confidence
Introduces data layer with repository implementations, paging sources, and local storage
The data module now provides the core data access layer for the application. This includes repository implementations for authentication (AuthenticatorImpl), user data (UnsplashUserRepositoryImpl), and wallpaper content (WallpaperRepositoryImpl). The update adds a suite of PagingSource classes to handle paginated data loading for popular, latest, search, and collection screens. Additionally, a DataStore implementation is introduced to manage local preferences such as theme strings, language settings, and login dialog states.
data/src · high confidence
New core infrastructure and user profile management screens
The app introduces a set of base classes (BaseFragment, BaseBottomSheetDialogFragment, BaseListAdapter, BasePagingDataAdapter) that standardize view binding, navigation, and list handling across the UI layer. A custom snackbar implementation (CustomSnackbarImpl) provides consistent error and success messaging. Additionally, the update adds the authenticated user profile screen, allowing users to view their details, and edit their name, surname, email, and password through dedicated fragments and viewmodels.
app/src · high confidence
New network module with Ktor-based API client and data models
A new network module has been introduced, implementing the HTTP client using Ktor with Dagger-Hilt dependency injection. This includes the core \NetworkModule\ configuration, service interfaces (\UnsplashBaseApiService\, \WallpaperService\), and a comprehensive set of data transfer objects (DTOs) for mapping API responses from Unsplash, covering users, photos, collections, topics, and search results. The module also provides mock utilities for testing and defines constants such as the base URL and pagination limits.
network/src · high confidence
Behavioural changes
Added ProGuard rules for data layer serialization and model preservation
The data module now includes a ProGuard configuration file that preserves specific classes and interfaces to ensure correct runtime behavior. This includes keeping names for network and domain model classes, preserving Parcelable implementations, and retaining serialization-related classes for Gson, Retrofit, Kotlin coroutines, Ktor, and kotlinx.serialization. These rules prevent obfuscation or shrinking of critical components, addressing issues where data classes were not being cast correctly in release mode.
data · medium confidence
Gradle build system upgraded to version 8.1
The project's Gradle wrapper has been updated from version 7.4 to 8.1. This upgrade brings the underlying build tooling to a newer release, which may affect build performance, plugin compatibility, and configuration syntax requirements for the Android/Java build process.
gradle · high confidence
Updated ProGuard rules for serialization and network libraries
The app's ProGuard configuration has been updated to preserve classes required for Kotlin serialization, Gson, Retrofit, and Ktor, ensuring that obfuscation and shrinking do not break runtime reflection or data binding for these dependencies.
app · high confidence
Fixes
Configure ProGuard rules for model classes and libraries
Added ProGuard configuration rules to preserve model classes from the network and domain layers, as well as specific classes from GSON, Retrofit, Kotlin coroutines, Ktor, and kotlinx serialization. This ensures that these classes are not obfuscated or removed during the release build process, which is critical for deserialization and runtime reflection to function correctly in the final application.
cache · medium confidence
Dependencies
Migrated Android build configuration from Groovy to Kotlin DSL
The project's build system has been converted from Groovy (build.gradle) to Kotlin (build.gradle.kts), introducing a modernized Gradle configuration. This change includes updating the Android Gradle Plugin to version 8.1.0, raising the Java/Kotlin compilation target to Java 17, and adding new modules (data, domain, cache, network) with their respective dependencies. The settings file was also converted to Kotlin DSL, and Gradle performance optimizations (configuration cache, parallel execution) were enabled.
(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 42 → 43 (+0.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 98 → 99 (+0.6)
- Architecture 99 → 96 (-3.4)
- Maturity 55 → 56 (+0.2)
- Readiness 24 → 24 (+0.0)
- Security 90 → 95 (+5.0)
- Domain Modelling 38 → 40 (+2.0)
Resolved (19)
- Change coupling: SearchFragment.kt ↔ SearchPagingSource.kt (app/src/main/java/com/oguzdogdu/wallieshd/presentation/search/SearchFragment.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) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/favorites/FavoritesFragment.kt)
- Duplicated block (10 lines × 7) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- Duplicated block (11 lines × 3) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/latest/LatestFragment.kt)
- Duplicated block (12 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/latest/LatestFragment.kt)
- Duplicated block (12 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/main/MainActivity.kt)
- Duplicated block (17 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/editprofilephoto/EditProfilePhotoViewModel.kt)
- Duplicated block (17 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/login/LoginViewModel.kt)
- Duplicated block (19 lines × 3) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/AuthenticatedUserFragment.kt)
- Duplicated block (24 lines × 2) (network/src/main/java/com/oguzdogdu/network/service/MockUtils.kt)
- Duplicated block (7 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/detail/DetailViewModel.kt)
- Duplicated block (8 lines × 2) (data/src/main/java/com/oguzdogdu/data/source/paging/TopicListSource.kt)
- Duplicated block (9 lines × 6) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- No exposed public API
- Secret: gcp-api-key (app/google-services.json)
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (21)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Duplicated block (11 lines × 2) (data/src/main/java/com/oguzdogdu/data/source/paging/TopicListSource.kt)
- Duplicated block (11 lines × 6) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- Duplicated block (12 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/ProfileOptionsAdapter.kt)
- Duplicated block (13 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/main/MainActivity.kt)
- Duplicated block (13 lines × 7) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- Duplicated block (14 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/latest/LatestFragment.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/core/BaseListAdapter.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collectionslistsbyid/CollectionsListsAdapter.kt)
- Duplicated block (17 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/login/LoginViewModel.kt)
- Duplicated block (18 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/editprofilephoto/EditProfilePhotoDialog.kt)
- Duplicated block (20–22 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/editprofilephoto/EditProfilePhotoViewModel.kt)
- Duplicated block (28 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/main/HomeLatestAdapter.kt)
- Duplicated block (29 lines × 3) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/authenticateduser/AuthenticatedUserFragment.kt)
- Duplicated block (53–54 lines × 2) (network/src/main/java/com/oguzdogdu/network/service/MockUtils.kt)
- Duplicated block (6 lines × 2) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/detail/DetailViewModel.kt)
- Duplicated block (6 lines × 9) (data/src/main/java/com/oguzdogdu/data/source/paging/CollectionByLikesPagingSource.kt)
- Members sharing a duplicated core (6 members, 50+ identical tokens) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- Members sharing a duplicated core (7 members, 50+ identical tokens) (app/src/main/java/com/oguzdogdu/wallieshd/presentation/collections/CollectionsFragment.kt)
- No ADRs found
- …and 1 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
oguzsout/Wallies 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 21 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 e9597e6fb14a35ddf496f6f55fd045c8f70041f0 — 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-fa71c66cabd8.