skydoves/Pokedex
67.8
Adequate · 25 September 2026
1.9k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This system is an Android application that serves as a Pokédex, allowing users to browse a paginated list of Pokémon and view detailed information about individual entries. It is built using a multi-module architecture that separates concerns into distinct layers for data models, networking, local database storage, and business logic. The app fetches data from the PokeAPI, implements a cache-then-network strategy using Room for offline access, and presents the UI through Data Binding and MVVM principles.
Features
Added benchmark module for startup performance and baseline profile generation
A new benchmark module has been introduced to measure and optimize app startup performance. It includes startup benchmarks that capture timing metrics for cold, warm, and hot app launches under various compilation modes (none, partial with baseline profile disabled/required, and full compilation). Additionally, a baseline profile generator is provided to define critical user journeys—specifically navigating from the main screen to details and back—which can be used to generate baseline profiles that improve runtime performance.
benchmark · high confidence
Introduce core-data module with repository layer and dependency injection
The new core-data module provides the application's data access layer, introducing MainRepository and DetailRepository interfaces along with their implementations (MainRepositoryImpl and DetailRepositoryImpl). These repositories manage data fetching for Pokémon lists and individual details, implementing a cache-then-network strategy that serves data from the local database when available and fetches from the network otherwise. The module includes a Dagger Hilt DataModule to bind these repositories and integrates the Sandwich library for structured API response handling, supported by unit tests for both repository implementations.
core-data · high confidence
Introduce core-network module for Pokemon API access
The new core-network module provides the application's networking layer, configuring a Retrofit client to communicate with the PokeAPI (https://pokeapi.co/api/v2/). It includes Dagger Hilt modules to inject an OkHttpClient with an HTTP request interceptor, a Moshi converter, and the Sandwich library's ApiResponseCallAdapterFactory for handling network responses. The module exposes a PokedexClient that wraps the PokedexService interface, offering functions to fetch paginated lists of Pokemon and retrieve individual Pokemon details, while also defining custom data models (PokemonResponse, PokemonErrorResponse) and mappers to translate API errors.
core-network · high confidence
Introduce local Room database for offline Pokemon data
The app now includes a new core-database module that stores Pokemon data locally using Room. This module defines entities for Pokemon lists and detailed info, along with Data Access Objects (DAOs) to insert and query this data. A Hilt dependency-injection module provides the database instance and DAOs, and type converters handle serializing complex type lists. This change enables the application to cache and retrieve Pokemon information from a local database rather than relying solely on network requests.
core-database · high confidence
Introduction of core data models for Pokemon entities
The core-model module now includes the \Pokemon\ and \PokemonInfo\ data classes, enabling the application to deserialize and handle Pokemon data from the PokeAPI. The \Pokemon\ class provides utilities to generate official artwork URLs and format names, while \PokemonInfo\ structures detailed attributes such as ID, height, weight, and base stats, including helper methods for formatted string representations of these values.
core-model · high confidence
Project initialization with documentation, CI configuration, and build scaffolding
The repository is initialized with a comprehensive README detailing the Pokedex app's tech stack (Hilt, Coroutines, Jetpack, MVVM) and architecture, alongside badges for license, API level, and build status. Community standards are established via a Code of Conduct and Contributing guide. Build infrastructure is set up with Gradle wrapper scripts, an EditorConfig, and a .gitignore tailored for Android/IntelliJ/Eclipse. Automated dependency management is configured via Renovate, and code review automation is enabled through a CodeRabbit configuration file.
(repo-wide) · high confidence
Behavioural changes
Added license headers for Kotlin and XML files
The project now includes standardized license headers for Kotlin (.kt) and XML (.xml) source files. These headers apply the Apache License, Version 2.0, ensuring that new files in these formats are automatically tagged with the correct copyright and licensing information.
spotless · high confidence
Centralized version configuration in buildSrc
Versioning details (major, minor, patch, versionName, and versionCode) are now defined in a single Kotlin object within buildSrc, replacing scattered or duplicated configuration across the project.
buildSrc · medium confidence
Refactored UI layer to use Data Binding and Hilt
The app's UI layer has been refactored to use Android Data Binding and Hilt for dependency injection. Activities now extend BindingActivity and bind ViewModels directly in layouts, while custom binding adapters handle RecyclerView pagination, image loading with dynamic palette colors, and type-specific styling. ViewModels use BindingProperty for reactive state, and Hilt manages dependency injection with KSP replacing KAPT.
app/src/main/kotlin · high confidence
Test coverage
Added Hilt injection tests for main and detail activities; Added test utilities for coroutines and mocking; Added unit tests for DetailViewModel and MainViewModel.
Dependencies
Initial project setup with Gradle version catalogs and multi-module architecture
The project is initialized with a multi-module structure (app, benchmark, core-model, core-network, core-database, core-data, core-test) and adopts Gradle version catalogs for dependency management. This establishes the build environment with Android Gradle Plugin 9.4.1, Kotlin 2.4.20, and KSP 2.3.12, while configuring type-safe project accessors and centralized repository resolution.
(dependencies) · high confidence
Updated Gradle wrapper to version 9.8.0
The project's Gradle wrapper has been updated to use Gradle 9.8.0. This change ensures that builds are executed with the specified version of the Gradle build tool, providing consistency across development environments and leveraging any improvements or bug fixes included in this release.
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 → 68 (+14.8)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.0)
- Architecture 94 → 94 (-0.3)
- Maturity 58 → 60 (+2.0)
- Readiness 33 → 58 (+24.7)
- Security 74 → 92 (+18.3)
Resolved (11)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- Duplicated block (16 lines × 2) (app/src/main/kotlin/com/skydoves/pokedex/binding/ViewBinding.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- No exposed public API
- No tests found
- Test reliability not included
- The README mentions a Google Developer profile link to skydoves but does not state whether it is public or private; an audience note would clarify this. (README.md)
New (11)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (21–22 lines × 2) (app/src/main/kotlin/com/skydoves/pokedex/binding/ViewBinding.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No ADRs found
- Orphaned files with no living knowledge
- Workflow token permissions not restricted
Changes since last survey
- 18 commits — 9 feature/other, 9 fixes
By area
- gradle/libs.versions.toml — 13 commits
- (root) — 3 commits
- gradle/wrapper — 2 commits
Notable commits
- fix: fix(deps): update androidxroom to v2.8.5 (#511)
- fix: fix(deps): update dependency androidx.benchmark:benchmark-macro-junit4 to v1.5.0 (#512)
- fix: fix(deps): update dependency androidx.fragment:fragment-ktx to v1.9.0 (#500)
- fix: fix(deps): update dependency androidx.fragment:fragment-ktx to v1.9.1 (#516)
- fix: fix(deps): update dependency org.mockito.kotlin:mockito-kotlin to v6.4.0 (#519)
- fix: fix(deps): update dependency org.mockito:mockito-core to v5.24.0 (#517)
- fix: fix(deps): update dependency org.robolectric:robolectric to v4.17 (#513)
- fix: fix(deps): update kotlin, ksp and compose compiler to v2.4.20 (#509)
- fix: fix(deps): update okhttp to v5.5.0 (#501)
- change: chore(deps): update agp to v9.3.2 (#503)
- change: chore(deps): update agp to v9.4.1 (#514)
- change: chore(deps): update dependency com.android.library to v9.4.0 (#506)
- change: chore(deps): update dependency com.google.devtools.ksp to v2.3.12 (#510)
- change: chore(deps): update gradle to v9.7.1 (#502)
- change: chore(deps): update gradle to v9.8.0 (#518)
- change: chore(deps): update plugin com.android.settings to v9.3.2 (#504)
- change: chore(deps): update plugin com.android.settings to v9.4.0 (#507)
- change: chore(deps): update plugin com.android.settings to v9.4.1 (#515)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
skydoves/Pokedex 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 25 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 923165b51377d973b6e96ad7c8135ef95b819a25 — 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-dd72cc24c749.