Skip to content
CAI
Software that uses CAICheck a score

shinhyo/Compose-BreakingBad

54.6

Adequate · 22 September 2026

4.2k

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 is an Android application built with Jetpack Compose that displays detailed profiles for characters from the Breaking Bad and Better Call Saul universes. The system is structured as a multi-module Android project, separating domain, data, and UI layers to manage character lists, individual character details, and user favorites. It includes features for persistent theme settings, offline data simulation, and comprehensive unit testing infrastructure.

How it got here

2021–2022 — Multi-module architecture and feature implementation

13 changes.

The project underwent a significant structural transformation, migrating from a monolithic Java codebase to a multi-module Kotlin architecture based on Clean principles. This period established the core data, domain, and network layers while simultaneously implementing the primary user-facing features, including the main app shell, character detail screens, and data management use cases.

2023–2024 — Modernization and feature expansion

10 changes.

This period focused on modernizing the application's architecture and user interface by migrating to Jetpack Compose and Material 3, while introducing new features such as favorites, list views, and theme persistence. The work also included centralizing build configurations and establishing a robust testing infrastructure for the new components.

Features

Add Favorite feature with UI and navigation

Users can now view and manage their favorite characters. This change introduces the Favorite feature, including the FavoriteScreen composable that displays a list of favorite characters using a LazyColumn, the FavoriteViewModel to handle state and interactions like adding/removing favorites, and the FavoriteNavigation setup to route to the new screen.

feature/favorite/src/main/kotlin/io/github/shinhyo/brba/feature/favorate · high confidence

Add device-level theme mode persistence

The app now remembers the user's preferred theme mode (Light or Dark) across sessions. A new DataStore module provides a DataStore instance for device preferences, and the DeviceDataSource class manages the theme mode setting, allowing the UI to reflect the user's last choice.

core/datastore · high confidence

Added character data for Breaking Bad series

A new JSON file, character.json, has been added to the app's assets, containing detailed profiles for 18 characters from the Breaking Bad and Better Call Saul universes. Each entry includes the character's name, status, actor, and a comprehensive biography, enabling the app to display rich character information to users.

app/src · high confidence

Added checksum generation script for CI caching

A new shell script, scripts/checksum.sh, has been added to the repository. This script calculates MD5 checksums for specific build and configuration files (such as build.gradle and gradle-wrapper.properties) and writes the sorted results to a result file. This enables the CI pipeline to cache and reuse these checksums to optimize build processes.

scripts · high confidence

Added domain layer for character and device management

The core/domain module now includes a new AndroidManifest.xml and introduces domain-layer abstractions for managing characters and device settings. Specifically, it adds the CharactersRepository and DeviceRepository interfaces, which define the domain's data access contracts. To support these repositories, the update introduces five new use cases: GetCharacterListUseCase, GetCharacterUseCase, GetFavoriteListUseCase, and UpdateFavoriteUseCase, alongside the repository interfaces themselves. This establishes the backend logic for fetching character lists, retrieving individual character details, managing favorite status, and handling device theme mode preferences.

core/domain · high confidence

Added list and setting feature screens with navigation

Users can now view a list of characters and access a settings screen to change the app's theme. The list feature displays characters in a staggered grid with favorite and theme toggle actions, while the setting feature provides a dedicated screen to select light, dark, or system theme mode.

feature/list/src/main/kotlin/io/github/shinhyo/brba/feature/list, feature/setting/src/main/kotlin/io/github/shinhyo/brba/feature/setting · high confidence

Introduced local data source for offline and debug testing

The app now includes a LocalDataSource that serves character data from a local JSON asset file, simulating network delays for testing or demo purposes. This is bound as the default NetworkDataSource implementation via Hilt, allowing the app to function without real network calls. Additionally, the RetrofitNetwork implementation was added to support actual network calls with caching and logging, providing a complete network layer abstraction.

core/network · high confidence

Main entry point and app shell implemented in Kotlin with Jetpack Compose

The app's main entry point has been established in the feature/main module, providing the initial user experience. This includes the AndroidManifest configuration for the launcher activity, the MainActivity that manages the splash screen and theme state, and the BrbaApp composable that sets up the navigation graph using Jetpack Compose. The implementation is written in Kotlin and utilizes Hilt for dependency injection, establishing the foundational structure for the application's UI and navigation.

feature/main · high confidence

New character detail screen with favorites and description

Users can now view a character's detailed profile, including their name, nickname, category chips, and a full description. The screen displays the character's image, allows users to toggle a favorite status, and handles loading and error states. This new feature is supported by a dedicated ViewModel that fetches character data and manages the UI state, while the navigation setup routes users to this new detail page.

feature/detail/src/main/kotlin/io/github/shinhyo/brba/feature/detail · high confidence

New core design system and UI components for character and navigation

The app introduces a complete design system and a suite of new UI components to modernize the user interface. A new theme configuration (Color, Shape, Typography, and Theme wrappers) is added to support light and dark modes with Material 3 styling. Additionally, new composable components are introduced to the core design system: BrbaCharacterCard and BrbaCharacterRow for displaying character data, BrbaChips for tag lists, BrbaNavigationBar for bottom navigation, BrbaTopAppBar with haze effects, BrbaPreference for settings rows, BrbaEmptyScreen for empty states, BrbaIconFavorite for favorite toggling, and a BrbaThemeSelectDialog for theme switching. These changes shift the app's visual style and interaction patterns to a more consistent, modern aesthetic.

core/designsystem/src/main/kotlin · high confidence

Architecture

Centralized Android build configuration via new Gradle convention plugins

The project's build logic has been restructured into dedicated Gradle convention plugins (brba.android.application, .feature, .library, and .library.compose) located in build-logic/convention. These plugins standardize Android project setup, including namespace and default config, debug/release build type settings (with debuggable disabled for release), ProGuard rules, and dependency injection via Hilt. The feature plugin integrates Compose, Kotlin Serialization, Navigation Compose, and other Android/Compose libraries, while the library plugins configure Kotlin and Hilt. This change simplifies module-level build scripts by centralizing common configurations.

build-logic/convention/src/main/kotlin · high confidence

Project restructured into a multi-module architecture with updated documentation and tooling

The project has been restructured into a multi-module architecture (app, core, feature) following Clean Architecture and the Now in Android structure, with the domain layer explicitly separated from the data layer. The README has been updated to reflect this new structure, including a visual representation of the module graph and nested navigation hosts. Additionally, an .editorconfig file was added to enforce Kotlin coding standards, and the .gitignore was updated to exclude generated reports and build artifacts.

(repo-wide) · high confidence

Behavioural changes

Added Apache 2.0 license header template for Spotless

A new copyright header template has been added to the Spotless configuration, providing a standard Apache 2.0 license header for Kotlin files. This ensures that all source files processed by Spotless will automatically include the correct licensing information.

spotless · medium confidence

Automated Kotlin code formatting with Spotless

The Gradle build now automatically enforces Kotlin code style using Spotless 6.25.0. All Kotlin files are formatted on build, excluding the build directory, with Android rules enabled and specific style rules (function naming, final newline) disabled.

gradle · high confidence

Centralized Android build configuration and added code coverage

The build logic has been refactored to centralize Android-specific configurations, including Kotlin 17/17 compilation targets, Hilt/Dagger setup, and Compose dependencies. Additionally, Kover has been integrated to generate HTML and XML code coverage reports for the debug variant, with filters applied to include ViewModels and exclude Hilt-generated classes.

build-logic/convention/src/main/kotlin/io · high confidence

Gradle wrapper updated to 8.11.1

The Gradle wrapper has been upgraded from version 6.8.2 to 8.11.1. This change updates the build tooling used to compile the project, which may affect build performance and compatibility with newer Java versions.

gradle/wrapper · high confidence

Migrate core modules to Kotlin and establish multi-module architecture

The application's core layers (common, data, and database) have been migrated from Java to Kotlin and reorganized into a multi-module structure. This introduces new Kotlin-based data and database layers, including a \BrbaDispatcher\ for coroutine threading, a \Result\ sealed interface for handling async states, and repository implementations for characters and device settings. The database module now defines the \CharacterEntity\ Room model and DAOs, with Hilt modules providing the database instance and DAOs. This change establishes the foundational data access and dependency injection wiring for the app's new modular architecture.

core/common, core/data, core/database · high confidence

Migrated bottom bar navigation to Jetpack Compose Navigation 2.8.0-beta07

The bottom bar feature has been migrated to use Jetpack Compose Navigation 2.8.0-beta07, updating the navigation implementation to use the new API. This includes refactoring the bottom bar screen to use the updated NavHost and navigation components, and moving the navigation logic into a dedicated navigation file. The bottom bar now uses the new navigation API for managing tabs and routes.

feature/bottombar/src/main/kotlin/io/github/shinhyo/brba/feature/bottombar · medium confidence

Standardized build artifacts and ProGuard configuration across core modules

Added .gitignore files to all core modules (common, data, database, datastore, designsystem, domain, model, network, and testing) to exclude build directories. Additionally, added ProGuard configuration files (proguard-rules.pro) to the datastore, network, and testing modules to provide default optimization and obfuscation rules, while consumer-rules.pro files were added to the datastore and testing modules.

core · medium confidence

Test coverage

Add unit tests for FavoriteViewModel; Added core testing infrastructure for ViewModel unit tests; Added unit tests for ListViewModel.

Dependencies

Migrate to Gradle Kotlin DSL and modernize build configuration

The project has been migrated from Groovy-based build scripts to Gradle Kotlin DSL, introducing a centralized version catalog (gradle/libs.versions.toml) to manage dependencies and plugins. This change replaces the legacy settings.gradle and top-level build.gradle with a modern multi-module structure, enabling features like configuration caching and parallel builds. The build logic is now managed through the build-logic convention plugins, providing a consistent and type-safe build environment for all modules.

(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

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

Lenses

  • Code Health 100 → 100 (-0.2)
  • Architecture 100 → 98 (-2.1)
  • Maturity 51 → 53 (+2.1)
  • Readiness 46 → 46 (+0.0)
  • Security 43 → 57 (+13.7)
  • Domain Modelling 100 → 70 (-30.3)

Resolved (22)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • 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)
  • 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)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • …and 2 more

New (31)

  • 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)
  • High secret: WD-SECRET-0004 (debug.keystore)
  • 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)
  • 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)
  • High: security finding (details withheld)
  • …and 11 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

shinhyo/Compose-BreakingBad 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 1f0d2578b0dedd2ee28c9e73204e0cd617f6df7d — 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.