Skip to content
CAI
Software that uses CAICheck a score

AfigAliyev/Cinemax

57.4

Weak · 22 September 2026

13.9k

lines of production code

Kotlin

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Cinemax is an Android application for browsing and discovering movies and TV shows via a remote API. It provides features for searching, viewing detailed media information, managing a personal wishlist, and configuring app settings. The system is structured with a clean architecture separating domain, data, and UI layers, utilizing Hilt for dependency injection and Jetpack Compose for the interface.

Features

Add baseline profile generation and benchmarking infrastructure

The benchmark module now includes a new BaselineProfileGenerator to create baseline profiles for the app, alongside a BaselineProfileBenchmark to measure cold-start performance with and without compilation. These additions provide the foundation for optimizing app startup times through baseline profiles.

benchmark · high confidence

Add core design system components and theme

The core/designsystem module now provides a complete set of reusable UI components and a cohesive dark theme. The update introduces a new design system featuring a dark color palette, typography, and spacing tokens. It also adds ready-to-use components including a centered box, outlined and icon buttons, image placeholders, progress indicators, snackbars, and a swipe-to-refresh layout, all styled with the new Cinemax theme.

core/core-designsystem · high confidence

Add details screen for movies and TV shows

The app now includes a new details screen that displays information for both movies and TV shows. Users can view the respective details, refresh the content, retry failed requests, and add or remove items from their personal wishlist. The screen handles loading states, error conditions, and user messages, providing a dedicated interface for exploring media content.

features/feature-details/src/main/kotlin/com/maximillianleonov/cinemax/feature/details · high confidence

Add list screen for browsing movies and TV shows

A new list feature was introduced, providing a unified screen for browsing and discovering movies and TV shows. The implementation includes a new ListRoute and ListScreen that display content via a MediaTabPager, supporting categories such as Upcoming, Top Rated, Popular, Now Playing, Discover, and Trending. The feature is wired into the app's navigation graph via ListDestination, allowing users to navigate to detailed views for individual titles.

features/feature-list/src/main/kotlin/com/maximillianleonov/cinemax/feature/list · high confidence

Add movie and TV show details screens with placeholder support

The app now includes a new details screen for both movies and TV shows, featuring a header with title, overview, cast and crew, and metadata like release date and runtime. Each component (header, overview, cast/crew) supports a placeholder state for loading, ensuring a smooth user experience during data fetching. The implementation includes dedicated UI components for displaying movie and TV show details, along with placeholder variants for each.

features/feature-details/src/main/kotlin/com/maximillianleonov/cinemax/feature/details/components · high confidence

Add settings screen with about, privacy policy, and version information

A new Settings screen has been introduced, allowing users to view the app version, access the source code on GitHub, and read the privacy policy. The feature includes a dedicated navigation route and UI components to display grouped settings information.

features/feature-settings/src/main/kotlin/com/maximillianleonov/cinemax/feature/settings · high confidence

Added UI-layer mappers for domain models and UI resources

New mapper files were added to the core-ui module to bridge the gap between the domain layer and the UI layer. This includes mappers for converting domain models (such as Movie, TvShow, Credits, Genre, and MediaType) into their corresponding UI model representations, as well as utility mappers for handling user-facing messages and flow transformations. These changes enable the UI layer to consume structured data from the domain layer and display localized strings or formatted values.

core/core-ui/src/main/kotlin/com/maximillianleonov/cinemax/core/ui/mapper · high confidence

Added domain models for media content and wishlisting

Introduced new domain models to support the application's core data structures: CastModel, CreditsModel, CrewModel, GenreModel, MediaTypeModel, MovieModel, MovieDetailsModel, TvShowModel, TvShowDetailsModel, and WishlistModel. These classes define the shape of data for movies, TV shows, and user wishlists within the domain layer.

core/core-domain/src/main/kotlin/com/maximillianleonov/cinemax/core/domain/model · high confidence

Added search feature with debounced queries and pagination

Users can now search for movies and TV shows using a text input that triggers debounced API calls, with results displayed in a tabbed interface supporting swipe-to-refresh, error handling, and offline mode. The search screen also displays trending and discover content when no query is active, and allows navigation to movie/TV show detail screens.

features/feature-search/src/main/kotlin/com/maximillianleonov/cinemax/feature/search · high confidence

Added the Wishlist feature for saving and viewing favorite movies and TV shows

Users can now access a new Wishlist screen to save and browse their favorite movies and TV shows. The feature includes a dual-tab interface for movies and TV shows, with support for pull-to-refresh, loading states, error handling with retry options, and offline mode availability.

features/feature-wishlist/src/main/kotlin/com/maximillianleonov/cinemax/feature/wishlist · high confidence

Added utility extensions for Paging and Date formatting

Added new utility files in the core-ui module: Paging.kt provides extension properties and functions for androidx.paging.LoadState (isLoading, isFinished, isError, error) and LazyPagingItems (isEmpty, isNotEmpty) to simplify pagination state checks; Utils.kt adds a LocalDate formatting extension and a Double rounding helper for UI display.

core/core-ui/src/main/kotlin/com/maximillianleonov/cinemax/core/ui/util · high confidence

Adds core UI components for media browsing and navigation

The core-ui module introduces a suite of new Compose UI components to support the application's media browsing experience. This includes a reusable back button (CinemaxBackButton) and a wishlist toggle button (CinemaxWishlistButton) for user interactions. A comprehensive error handling component (CinemaxError) is added to display user-friendly messages with retry and offline mode options. The update also introduces feed item components (HorizontalFeedItem, VerticalFeedItem) that display movie and TV show details with placeholders for loading states. Additionally, a tabbed pager (MediaTabPager) is implemented to switch between Movies and TV Shows content, backed by a custom tab indicator offset modifier.

core/core-ui/src/main/kotlin/com/maximillianleonov/cinemax/core/ui · high confidence

Establish dependency injection bindings for data repositories

The application now provides Hilt dependency injection modules for the database, network, and repository layers. This introduces bindings for Movie, TV Show, Movie Details, TV Show Details, Wishlist, and Settings repositories, enabling the app to manage data access and network calls through a structured, testable architecture.

app/src/main/kotlin/com/maximillianleonov/cinemax/di · high confidence

Introduce core data layer with repository implementations and data mappers

The app now includes a new core data layer that bridges the network and database layers. This includes repository implementations for movies and TV shows, which fetch data from the network, cache it in the local database, and serve it to the UI. The change introduces a suite of mappers to convert between network models, database entities, and domain models, as well as paging sources and remote mediators to handle infinite scrolling and caching of movie and TV show lists.

core/core-data · high confidence

Introduce core network layer with API client, interceptors, and data models

The app now includes a new core-network module that provides the foundation for all external API communication. This includes a centralized CinemaxApi class that exposes Retrofit service interfaces for movies and TV shows, along with an authentication interceptor that appends the API key to requests. The change also introduces a comprehensive set of Kotlin data classes (NetworkMovie, NetworkTvShow, NetworkSeason, etc.) to map the remote API responses, and a NetworkBoundResource utility to manage network-to-cache data flow. This establishes the backend integration layer required to fetch and display content.

core/core-network · high confidence

Introduce local database layer for movies and TV shows

The core database module now includes a complete local storage implementation using Room. This adds database entities for movies, TV shows, and wishlists, along with the corresponding Data Access Objects (DAOs) and type converters for serialization. The change also introduces data source classes that manage the persistence and retrieval of movie and TV show data, enabling offline access and caching for the application.

core/core-database · high confidence

Introduces app entry point with Hilt integration and edge-to-edge display

The application now initializes via a new CinemaxApplication class annotated with Hilt's @HiltAndroidApp, enabling dependency injection throughout the app. The main activity (CinemaxActivity) has been updated to install the system splash screen, configure edge-to-edge rendering for status and navigation bars, and compose the root CinemaxApp UI.

app/src/main/kotlin/com/maximillianleonov/cinemax · medium confidence

New Android build convention plugins for Compose, benchmarking, and linting

The build-logic module introduces a suite of new Gradle convention plugins to standardize Android project configurations. These include dedicated plugins for Compose integration (AndroidApplicationComposeConventionPlugin, AndroidLibraryComposeConventionPlugin), benchmarking setup (AndroidBenchmarkConventionPlugin), and static analysis via Detekt and Spotless. The changes also add plugins for Android linting, Hilt/Dagger feature dependencies, API key injection, and signing configuration, effectively centralizing build logic for Android application and library modules.

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

New UI abstractions for event handling and media navigation

The application introduces a generic EventHandler interface to manage event dispatching within the UI layer, alongside a new MediaTab enum that defines the primary navigation tabs (Movies and TV Shows) for the media section of the app.

core/core-ui/src/main/kotlin/com/maximillianleonov/cinemax/core/ui/common · high confidence

New domain repository interfaces for content and settings

The domain layer now exposes new repository interfaces to manage content and application state. These include MovieDetailsRepository, MovieRepository, TvShowDetailsRepository, and TvShowRepository, which define the contracts for fetching and paging movie and TV show data. Additionally, SettingsRepository and WishlistRepository are introduced to handle application settings and user-curated lists, providing the domain layer with the necessary abstractions for data access.

core/core-domain/src/main/kotlin/com/maximillianleonov/cinemax/core/domain/repository · high confidence

New domain use cases for movies, TV shows, and wishlist management

The domain layer now includes new use cases to support movie and TV show browsing, search, and wishlist operations. Specifically, the app can now add or remove movies and TV shows from a user's wishlist, retrieve detailed information for individual movies and TV shows, fetch paginated lists of movies and TV shows, and search for both movies and TV shows. Additionally, use cases have been added to retrieve settings-related data such as the privacy policy URL, repository URL, and app version.

core/core-domain/src/main/kotlin/com/maximillianleonov/cinemax/core/domain/usecase · high confidence

Behavioural changes

New copyright header templates have been added for Kotlin (.kt) and XML (.xml) files, enabling the Spotless tool to automatically enforce consistent license headers across the codebase.

config/spotless · high confidence

Added ProGuard rules for kotlinx-serialization

The app module now includes ProGuard rules to preserve kotlinx-serialization classes and their companion objects, ensuring that serializable classes, their companion objects, and serializer instances are not obfuscated or removed during the build process.

app · medium confidence

Introduce new home screen with pull-to-refresh and error handling

The home screen now supports pull-to-refresh, retrying failed requests, and clearing errors. The UI displays upcoming, top-rated, popular, and now-playing movies and TV shows, with navigation to details and list screens.

features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home · medium confidence

Introduced centralized app state and navigation container for the bottom bar

The app's UI layer now uses a new \CinemaxApp\ composable that acts as the root container, managing the bottom navigation bar, snackbar host, and navigation host. This is supported by \CinemaxAppState\, a central state holder that coordinates navigation, snackbar messages, and the current destination. The \CinemaxBottomBar\ component has been updated to use this state, enabling animated transitions and proper state management for the bottom navigation items.

app/src/main/kotlin/com/maximillianleonov/cinemax/ui · high confidence

Introduces new navigation structure for app screens

The app's navigation is restructured to support distinct screens for Home, Search, Wishlist, and Settings. A new CinemaxNavHost composable now manages the navigation graph, routing between these destinations and handling deep links for details and list views. The TopLevelDestination enum defines the primary navigation destinations, each associated with specific icons and string resources.

app/src/main/kotlin/com/maximillianleonov/cinemax/navigation · medium confidence

New Upcoming Movies container with horizontal pager and indicator

The home screen now displays a new 'Upcoming Movies' section featuring a horizontal pager of movie cards with a custom page indicator. This replaces the previous implementation which relied on the Accompanist Pager library; the codebase now uses Compose Foundation's HorizontalPager and a custom DefaultHorizontalPagerIndicator component for the UI.

features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home/component · high confidence

New build-logic convention plugins for Kotlin and Compose configuration

The build-logic module introduces three new convention plugins that centralize project configuration. KotlinAndroid.kt configures the Android build with Java 21 compatibility, desugaring, and Kotlin compiler options (including JVM 21 target and specific compiler flags). AndroidCompose.kt sets up Jetpack Compose by enabling the compose build feature and adding the AndroidX Compose BOM as a dependency. VersionCatalog.kt provides a convenient extension to access the Gradle version catalog. These changes standardize how Kotlin and Compose are configured across the project.

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

New settings UI components for grouped and individual settings items

The settings screen now uses new Compose-based UI components to render settings. A new \SettingsGroup\ composable displays a header and a list of \SettingsItem\ components, each representing a single setting. Each item shows an icon, title, and optionally a value or a forward arrow, supporting both direct actions and deep-link intents. This refactors the settings display into a structured, grouped layout.

features/feature-settings/src/main/kotlin/com/maximillianleonov/cinemax/feature/settings/components · high confidence

Updated Gradle wrapper scripts and added license and configuration files

The project's Gradle wrapper scripts (gradlew and gradlew.bat) have been updated to a newer version, which includes improved POSIX compliance, better symlink resolution, and updated copyright headers. Additionally, the repository now includes an Apache 2.0 license file, a lint configuration to suppress specific Gradle-related lint errors, a Renovate configuration for dependency automation, and updated .gitignore rules to exclude keystore properties and Java keystore files.

(repo-wide) · high confidence

Updated Gradle wrapper to version 9.2.1

The Gradle wrapper has been upgraded from version 7.5.1 to 9.2.1. This update includes configuration changes such as setting a network timeout and enabling distribution URL validation, which may affect how the build system connects to remote repositories and validates the Gradle distribution.

gradle · high confidence

Dependencies

Migrate project to Kotlin DSL and centralize dependency versions

The project's build system has been migrated from Groovy to Kotlin DSL, with all build scripts converted to .kts files. A central version catalog (gradle/libs.versions.toml) now manages dependency versions for the Android Gradle Plugin, Kotlin, Compose, and other libraries, replacing the previous scattered dependency declarations. The build-logic module has been restructured to use the new catalog, and Gradle performance settings (caching, parallelism) have been updated.

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

Lenses

  • Code Health 100 → 99 (-0.3)
  • Architecture 100 → 96 (-3.9)
  • Maturity 68 → 65 (-3.5)
  • Readiness 44 → 41 (-3.4)
  • Security 39 → 67 (+27.4)
  • Domain Modelling 100 → 83 (-17.3)

Resolved (20)

  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/MovieRemoteMediator.kt)
  • Duplicated block (12 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/SearchMoviePagingSource.kt)
  • Duplicated block (12 lines × 2) (features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home/HomeViewModel.kt)
  • Duplicated block (12 lines × 2) (features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home/HomeViewModel.kt)
  • Duplicated block (18 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/MovieRemoteMediator.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)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • The 'Build' section is cut off mid-sentence, so the remaining Build content cannot be confirmed. (README.md)
  • The Getting Started section links to The Movie Database but does not mention the required Android Studio version needed for development. (README.md)

New (21)

  • 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 (13 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/MovieRemoteMediator.kt)
  • Duplicated block (19 lines × 2) (features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home/HomeViewModel.kt)
  • Duplicated block (20 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/SearchMoviePagingSource.kt)
  • Duplicated block (23 lines × 2) (features/feature-home/src/main/kotlin/com/maximillianleonov/cinemax/feature/home/HomeViewModel.kt)
  • Duplicated block (29 lines × 2) (core/core-data/src/main/kotlin/com/maximillianleonov/cinemax/core/data/paging/MovieRemoteMediator.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)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • MethodTooLong: DetailsKt.DetailsItem (features/feature-details/src/main/kotlin/com/maximillianleonov/cinemax/feature/details/components/Details.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

AfigAliyev/Cinemax 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 71daea54d89a92ee7b009e3c5b4da4c203215f52 — 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.