Skip to content
CAI
Software that uses CAICheck a score

tolgaprm/Mova-MovieApp

48.3

Weak · 22 September 2026

13.1k

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 for discovering and managing movies and TV series content. It provides a modular architecture with distinct data, domain, and UI layers for features including home feeds, detailed content views, user authentication, and personalized watchlists. The system synchronizes local user data with Firebase, handles background notifications and reminders, and supports multi-language and theme preferences.

How it got here

2022–2023 — Modular architecture and local storage

12 changes.

The project underwent a significant architectural shift to a multi-module structure using Kotlin DSL and convention plugins, while introducing local database storage for favorites and watchlists. This period also established the core domain and data layers, integrating Hilt for dependency injection and enabling background sync with Firebase.

2024–2025 — Modular feature implementation

20 changes.

The project established a modular architecture by introducing distinct data, domain, and UI layers for core features such as authentication, home, explore, and detail screens. This period focused on implementing complete feature sets including user login, content discovery, and personalized lists, supported by a centralized navigation and notification system.

Features

Add MyList UI module with tabbed movie and TV series lists

Introduces the MyList UI module, providing a screen where users can view their favorite and watchlist items for both movies and TV series. The interface features a tabbed layout (Favorites and Watchlist) with a chip group to switch between movie and TV series content. Users can select a movie or TV series from the list to view its details. The implementation includes the necessary ViewModel, Fragment, layout, and navigation graph to support this functionality.

my-list/my-list-ui · high confidence

Add explore-data module for movie, TV, and multi-search data fetching

The explore-data module has been introduced, providing the data layer for the explore feature. This includes the API interface for discovering movies and TV series, as well as a multi-search endpoint. The module implements remote data sources and a repository that fetches and paginates movie, TV, and multi-search results, wired via Hilt dependency injection.

explore/explore-data · high confidence

Add person detail UI module with navigation and display logic

The person-detail-ui module is introduced, providing the UI layer for the person detail screen. This includes the PersonDetailFragment, PersonDetailViewModel, and associated state management, enabling the display of a person's biography, birth/death dates, and lists of cast and crew works. The module also defines the person\_detail\_flow navigation graph, adapter classes for displaying movie/TV series items, and localized string resources for German and Turkish.

person-detail/person-detail-ui · high confidence

Added HiltTestActivity for debug-time testing

A new HiltTestActivity class and its corresponding AndroidManifest entry have been added to the debug source set. This activity, annotated with @AndroidEntryPoint, is intended to support dependency injection during testing, specifically addressing the Hilt integration in test environments.

app/src/debug · high confidence

Added explore-domain module with domain logic and repository interfaces

The explore-domain module has been introduced, providing the domain layer for the explore feature. This includes the ExploreRepository interface for discovering movies and TV series, along with corresponding use cases (DiscoverMovieUseCase, DiscoverTvUseCase, MultiSearchUseCase) that handle business logic such as combining genre lists with paging data. The module also defines domain models (FilterBottomState, MultiSearch, PersonSearch) and a Hilt dependency injection module (ExploreDomainModule) to wire these components. Additionally, basic unit and instrumented tests were added for the new module.

explore/explore-domain · high confidence

Added home-data and home-domain modules

Introduced the home-data and home-domain modules, providing the data layer and domain logic for the home screen. The home-data module implements remote data sources and repositories for fetching and paging movies and TV series, while the home-domain module defines repository interfaces, use cases, and dependency injection modules to orchestrate the business logic for retrieving popular, top-rated, and now-playing content.

(repo-wide) · high confidence

Added login, sign-up, and password recovery screens

Users can now log in with email and password or via Google Sign-In, create a new account, and recover a forgotten password. The authentication UI includes the Login, SignUp, and ForgetPassword fragments, their corresponding ViewModels and UI states, and the navigation graph that connects them.

authentication/authentication-ui · high confidence

Added movie and TV series detail data layer

The app now supports fetching and displaying detailed information for individual movies and TV series. This change introduces the complete data layer for the 'detail' feature, including API interfaces, remote data sources, data transfer objects (DTOs), mappers, and repository implementations for both movie and TV series. Users can now view comprehensive details such as cast, crew, videos, recommendations, and watch providers for specific titles.

(repo-wide) · high confidence

Added person-detail data and domain modules

Introduced new modules for the person detail feature, including data and domain layers. The data module provides a Retrofit-based API client, data sources, DTOs, and mappers to fetch and transform person detail information. The domain module defines the repository interface, domain models (PersonDetail, CastForPerson, CrewForPerson, CombinedCredits), and a GetPersonDetailUseCase that processes the fetched data, sorts cast and crew by popularity, and formats dates.

person-detail/person-detail-data, person-detail/person-detail-domain · high confidence

Added problems report HTML template

A new HTML template for the build's problems report has been added to the build directory, providing a structured, styled output for build issues.

build · high confidence

The repository now includes a .gitignore file to exclude build artifacts, local configuration files, and sensitive data (such as AdMob values and Google services JSON) from version control. Additionally, the project has been initialized with standard legal documents: an Apache 2.0 LICENSE.md, a Privacy Policy.md outlining data practices for the Mova app, and Gradle wrapper scripts (gradlew, gradlew.bat) to ensure consistent build environments across platforms.

(repo-wide) · high confidence

Added upcoming movie data and domain modules

Introduced the \upcoming-data\ and \upcoming-domain\ modules to support upcoming movie functionality. The data layer implements a remote data source and repository that fetch upcoming movies via a Retrofit API, utilizing Hilt for dependency injection and Android Paging for list handling. The domain layer defines the \UpcomingMovie\ model and a \GetUpcomingMovieUseCase\ that combines remote movie data with local reminder status and genre information. This change adds the foundational architecture for retrieving and processing upcoming movie data.

upcoming/upcoming-data, upcoming/upcoming-domain · high confidence

Introduce Explore screen with multi-type search and filtering

The Explore screen now supports searching across movies, TV series, and people, displaying results in a unified list. Users can also apply filters for categories, genres, and sorting options via a bottom sheet. The UI includes dedicated adapters for displaying search results and filtered content, along with a bottom sheet for applying filters.

explore/explore-ui · high confidence

Introduce Home screen UI with multi-section content and navigation

The home screen now displays a scrollable list of movie and TV content, including Now Playing, Popular, and Top Rated sections for both movies and TV series. Users can tap 'See All' to view expanded lists for each category, with a back navigation option to return to the main home view. The UI includes loading states (shimmer effects) and error handling for each content section. The home fragment is wired into the app's navigation graph, and localized strings are provided for German and Turkish.

home/home-ui · high confidence

Introduce Settings module with dark mode, language, and logout capabilities

Added the Settings feature, including the domain layer with use cases for UI mode and language, and the UI layer with a SettingsFragment that allows users to toggle dark theme, select a language from a supported list (English, Turkish, German), and log out of the app.

settings/settings-ui · high confidence

Introduce background workers for notifications and data synchronization

The app now includes a new work-manager module containing three background workers: NotificationWorker, which handles local notification display with runtime permission checks; UpdateFirebaseMovieWorker, which synchronizes favorite movies from local storage to Firebase; and UpdateFirebaseTvSeriesWorker, which performs the same synchronization for TV series. These workers enable background processing for user engagement and data consistency.

work-manager · high confidence

Introduce core-data module with data layer implementations

The core-data module has been introduced, providing the concrete implementations for the application's data layer. This includes Hilt dependency injection modules for network (Retrofit, OkHttp, Moshi), local storage (DataStore), and Firebase services. The module also adds repository implementations for genres, connectivity, and Firebase-based movie and TV series data, along with mappers, paging sources, and utility classes to support the core-domain interfaces.

core/core-data · high confidence

Introduce core-ui module with shared UI components and base classes

The core-ui module has been introduced, providing a shared library of UI components and base classes for the application. This includes abstract base classes for Fragments and ViewModels that standardize UI event handling, snackbar display, and back-press navigation. It also introduces reusable UI utilities such as a base RecyclerView adapter for movies and TV series, a detail bottom sheet for displaying content details, and various helper classes for handling paging load states, image loading, and view visibility. Additionally, the module includes a Hilt presentation module for dependency injection of common UI services like the image loader and country code provider.

core/core-ui · high confidence

Introduce local database storage for movies and TV series

The app now persists user data locally using a new database module. Users can save movies and TV series to their personal favorites and watchlists, with the ability to add, remove, and retrieve these lists. The system also supports storing upcoming movie reminders. This change enables offline access to these lists and ensures data survives app restarts.

database · high confidence

Introduce modular authentication and domain layers with Firebase integration

Added the \authentication-data\ and \authentication-domain\ modules to the project. The \authentication-data\ module provides the concrete implementation of the \AuthenticationRepository\ using Firebase Auth, including \AuthenticationRepositoryImpl\ for sign-in, sign-up, and credential handling. The \authentication-domain\ module defines the domain interfaces (\AuthenticationRepository\, \FirebaseMovieRepository\, \FirebaseTvSeriesRepository\) and use cases for authentication and syncing favorite/watchlist data from Firebase to the local database. This includes use cases like \GetFavoriteMovieFromFirebaseThenUpdateLocalDatabaseUseCase\ and \SignInWithEmailAndPasswordUseCase\. Additionally, German and Turkish string resources for Firebase error messages were added to support internationalization of authentication errors.

authentication/authentication-data, authentication/authentication-domain · high confidence

Introduce modular navigation architecture

Adds a new navigation module that defines a unified \NavigateFlow\ sealed interface and a \Navigator\ class to route between distinct app sections (home, auth, detail, person, etc.) via a central \MainNavGraph\. The module also includes the corresponding XML navigation graphs, animation resources, and a Hilt dependency injection module to provide the \Navigator\ as a singleton.

navigation · high confidence

Introduce modular notification system with Hilt integration

The app now includes a dedicated notification module that provides a reusable \Notifier\ base class and concrete implementations for sending push notifications. This includes a \WeekendNotifier\ for general weekend reminders and an \UpcomingMovieReminderNotifier\ that allows users to set reminders for specific movies. The module is wired into the app's dependency injection via Hilt, providing the necessary \NotificationManager\ and notifier instances to the rest of the application.

notification · high confidence

Introduce splash screen with automatic language and theme initialization

A new splash screen module has been added to the application. Upon launch, the app now displays a brief splash screen (500ms delay) that automatically detects and applies the user's preferred language and UI mode (light/dark theme) before navigating to the home screen. This change introduces the SplashFragment, SplashViewModel, and associated navigation and UI resources to handle this initial loading and configuration step.

splash · high confidence

Introduce the Upcoming Movies feature with reminder capabilities

The upcoming-ui module now includes a complete implementation for the 'Upcoming' section, featuring a Fragment that displays a list of upcoming movies using a Paging adapter. Users can view movie details, navigate to a detail flow, and set or cancel reminders via an Android AlarmManager-based scheduler. The implementation includes the UI layout, view models, and a receiver to handle alarm notifications, effectively adding the capability to manage and be reminded about upcoming movie releases.

upcoming/upcoming-ui · high confidence

Introduces app-level background sync and permission handling

The app now initializes Firebase App Check and AdMob, and manages runtime permissions for notifications and exact alarms in the main activity. Additionally, the application class configures WorkManager to run daily background syncs for movie and TV series data from Firebase, and schedules a one-time notification worker on weekends.

app/src/main/java · high confidence

Introduces core domain layer with local and Firebase repositories and use cases

The core domain module now provides the domain layer for managing user favorites and watchlists for both movies and TV series. This includes local database operations for adding, removing, and retrieving items from favorites and watchlists, as well as syncing these lists to Firebase. The update also introduces utility functions for combining movie and TV series data with their respective genre lists, alongside helper classes for date formatting and language/region constants.

core/core-domain · high confidence

New convention plugins and dependency helpers for modular architecture

The build system now includes a comprehensive set of Gradle convention plugins and helper extensions to support a multi-module architecture. This includes plugins for Firebase, Hilt, Room, Moshi, and Navigation, alongside layer-specific plugins for Data, Domain, and Presentation layers. Additionally, new extension functions have been added to manage dependencies for various app features (such as Home, Explore, and Settings) and common libraries (like Coroutines, Timber, and Paging), streamlining the configuration of the application's modular structure.

build-logic/convention · high confidence

New movie and TV detail screens with interactive cast and recommendations

The app now includes a new detail screen for movies and TV shows, featuring a poster, title, overview, and watch provider information. Users can view the cast list and click on an actor's name to navigate to their profile. The screen also displays recommendations for similar movies or TV series, which are clickable to open a detail bottom sheet. A trailer tab allows users to watch official videos. The UI handles loading states, error snackbar messages, and sign-in prompts for adding items to favorites or watchlists.

movie-tv-detail/detail-ui · high confidence

Behavioural changes

Added build configuration and ignore rules for the app module

The app module now includes a .gitignore file to exclude build artifacts, local configurations, and sensitive files (such as AdMob values and Google services JSON) from version control. Additionally, a proguard-rules.pro file has been added to define ProGuard configuration rules for code shrinking and obfuscation.

app · high confidence

Updated Gradle wrapper to version 8.13

The project's Gradle wrapper has been updated to use Gradle 8.13. This change ensures that the build process uses a specific, stable version of the Gradle build tool, which may include new features, performance improvements, and bug fixes compared to previous versions.

gradle · high confidence

Test coverage

Added Hilt test infrastructure for Android tests

The Android test suite now supports Hilt dependency injection. A custom AndroidJUnitRunner (HiltTestRunner) and a helper function (launchFragmentInHiltContainer) were added to enable testing of Fragments with Hilt-injected dependencies, addressing the limitation where standard fragment testing libraries could not be used due to missing @AndroidEntryPoint annotations.

app/src/androidTest · high confidence

Dependencies

Migrate build system to Kotlin DSL and version catalogs

The project's build configuration has been refactored from Groovy to Kotlin DSL, introducing a centralized version catalog (gradle/libs.versions.toml) to manage dependency versions. This change establishes a modular architecture by defining convention plugins in the build-logic module, which standardizes the structure for core, authentication, explore, home, movie-tv, person-detail, settings, and upcoming feature modules, each split into data, domain, and UI layers.

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

Lenses

  • Code Health 100 → 100 (-0.0)
  • Architecture 100 → 91 (-8.2)
  • Maturity 51 → 55 (+4.1)
  • Readiness 24 → 26 (+1.4)
  • Security 95 → 100 (+5.0)
  • Domain Modelling 55 → 62 (+7.2)

Resolved (10)

  • Boundary-crossing change coupling: MainActivity.kt ↔ HomeFragment.kt (app/src/main/java/com/prmto/mova_movieapp/MainActivity.kt)
  • Change coupling: DependencyHandlerModuleExt.kt ↔ AndroidApplicationPlugin.kt (build-logic/convention/src/main/kotlin/com/prmto/convention/dependency/DependencyHandlerModuleExt.kt)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (11 lines × 2) (authentication/authentication-ui/src/main/java/com/prmto/authentication_ui/login/LoginFragment.kt)
  • Duplicated block (5 lines × 2) (build-logic/convention/src/main/kotlin/util/library/Firebase.kt)
  • Duplicated block (8 lines × 2) (authentication/authentication-domain/src/main/java/com/prmto/authentication_domain/use_case/CreateUserWithEmailAndPasswordUseCase.kt)
  • No exposed public API
  • Test reliability not included
  • single-maintainer — knowledge-concentration (bus factor) risk

New (14)

  • Boundary-crossing change coupling: HomeFragment.kt ↔ SplashViewModel.kt (home/home-ui/src/main/java/com/prmto/home_ui/HomeFragment.kt)
  • Boundary-crossing change coupling: HomeViewModel.kt ↔ SplashViewModel.kt (home/home-ui/src/main/java/com/prmto/home_ui/HomeViewModel.kt)
  • Change coupling: HomeViewModel.kt ↔ NowPlayingRecyclerAdapter.kt (home/home-ui/src/main/java/com/prmto/home_ui/HomeViewModel.kt)
  • 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 (10 lines × 2) (authentication/authentication-ui/src/main/java/com/prmto/authentication_ui/login/LoginFragment.kt)
  • Duplicated block (16 lines × 2) (home/home-ui/src/main/java/com/prmto/home_ui/adapter/PopularMoviesAdapter.kt)
  • Duplicated block (16 lines × 2) (home/home-ui/src/main/java/com/prmto/home_ui/adapter/PopularTvSeriesAdapter.kt)
  • Duplicated block (23 lines × 2) (person-detail/person-detail-domain/src/main/java/com/prmto/person_detail_domain/model/CastForPerson.kt)
  • Duplicated block (51 lines × 2) (authentication/authentication-ui/src/main/java/com/prmto/authentication_ui/login/LoginUiState.kt)
  • Duplicated block (8–12 lines × 2) (authentication/authentication-domain/src/main/java/com/prmto/authentication_domain/use_case/CreateUserWithEmailAndPasswordUseCase.kt)
  • No ADRs found

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

tolgaprm/Mova-MovieApp 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 dcd9a9c6c5d42dc4dedd9a1fab1c786434143d7e — 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.