Skip to content
CAI
Software that uses CAICheck a score

MambaWoW/FlickFusion

56.8

Adequate · 21 September 2026

7.1k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Add common UI state, display, and icon resources

The common-ui module now includes a set of shared UI resources and utilities. This includes a new \IUiState\ interface to standardize UI states (loading, refreshing, error, empty), extension functions in \DisplayExt.kt\ to convert \Movie\, \TVShow\, and \Media\ models into display items, and a \Constant\ object for default UI dimensions. Additionally, a suite of vector drawables (icons) such as \ic\_account\, \ic\_arrow\, \ic\_home\, and others have been added to the common resources, alongside a \LottieResHolder\ for loading animations.

(repo-wide) · high confidence

Added test base module with fake repositories and test data

A new 'test-base' module has been introduced to support unit and UI testing within the application. This module provides fake implementations of repositories (such as \FakeMovieRepository\, \FakeTVRepository\, and \FakeConfigureRepo\) that return mock data, enabling tests to run without relying on external APIs. The module also includes a \TestDataLoader\ utility for loading JSON fixtures (e.g., \movies1.json\, \tv\_detail.json\) and platform-specific resource loaders for Android, Desktop, and iOS to read these test assets.

modules/test-base · high confidence

Introduces core data models and UI components for media browsing and detail views

Adds new data models for API responses (e.g., \Movie\, \TVShow\, \Credits\, \Genres\) and domain models (\MediaModel\, \DisplayItem\) to support media content display. Introduces UI components including a \SwipeRefreshIndicator\ for list views, a \DisplayItem\ sealed class for unified poster/backdrop handling, and a theme configuration for swipe-to-refresh behavior. Additionally, adds ViewModels (\MediaDetailViewModel\, \FavoriteMainViewModel\, \CategoryListViewModel\, \MovieFeedViewModel\) that manage state for their respective screens, and a \VoyagerScreens\ navigation registry to wire these components together.

util · high confidence

Introduces new UI screens and platform-specific configurations for the main, mine, and search features

Adds platform-specific implementations for the main feature's trending feed type (BANNER on Android/iOS, NORMAL on Desktop). Introduces the Mine screen, displaying user profile information with an avatar, name, and username. Adds a Search feature including a SearchBar component and a SearchMainScreen that displays a list of genres. Implements the HttpImpl class for network requests using Ktor, and provides a utility function to collect StateFlow as a Compose State while respecting lifecycle state.

(repo-wide) · high confidence

Behavioural changes

App architecture modernized with Koin DI, Voyager navigation, and Coil3 image loading

The app's entry point and navigation have been completely restructured. The previous generic platform detection and greeting logic have been removed. In their place, the app now uses Koin for dependency injection, wiring up network, persistence, repository, use-case, and view-model modules. Navigation is handled by Voyager, introducing a bottom bar and tab-based structure for Home, Search, Favorites, and Profile screens. Additionally, the app now integrates Coil3 for image loading and applies edge-to-edge rendering on Android.

composeApp · high confidence

iOS app ignores safe area to allow full-screen Compose content

The iOS app's main content view now ignores the safe area across all edges. This allows the embedded Compose view to render content behind the status bar and home indicator, ensuring the Compose keyboard handler can manage the keyboard state without being constrained by iOS safe-area insets.

iosApp · medium confidence

Test coverage

Add unit and UI tests for main and detail features

Added comprehensive test coverage for the main and detail feature modules. This includes unit tests for \CategoryListViewModel\, \MovieFeedViewModel\, and \TVFeedViewModel\ to verify state transitions and data loading logic. Additionally, UI tests were added for \HomeMainScreen\ (covering \MoviePage\ and \TVPage\ states like empty, error, and success scenarios) and \MediaDetailScreen\, ensuring the user interface correctly reflects the underlying view model states across Android, Desktop, and iOS test environments.

modules/feature/detail/src/androidInstrumentedTest/kotlin/org/real/flickfusion/feature/detail, modules/feature/main · high confidence

Dependencies

Modularizes the app into multiplatform modules and adds build configuration

The project is restructured into a modular architecture with separate Gradle build files for common-ui, core (domain, data, service), feature (main, mine, search, detail, favorite), framework (network, persist), and test-base. The composeApp module is updated to depend on these new modules, integrating Koin for dependency injection, Voyager for navigation, and Coil for image loading. Build configuration is added via the BuildKonfig plugin to inject API keys and account IDs from local.properties. The Gradle version catalog is expanded with dependencies for SQLDelight, Ktor, Koin, Coil, and testing libraries, and the settings file includes all new 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 57 → 57 (-0.6)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 98 (-0.9)
  • Architecture 100 → 94 (-5.9)
  • Maturity 72 → 75 (+3.7)
  • Readiness 24 → 24 (+0.0)
  • Security 97 → 100 (+2.5)

Resolved (15)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (12 lines × 2) (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainViewModel.kt)
  • Duplicated block (12 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/list/CategoryListViewModel.kt)
  • Duplicated block (16 lines × 2) (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainScreen.kt)
  • Duplicated block (16 lines × 3) (modules/common-ui/src/commonMain/kotlin/org/real/flickfusion/ui/components/CommonEmptyView.kt)
  • Duplicated block (17 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/movie/vm/MovieFeedViewModel.kt)
  • Duplicated block (18 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/movie/ui/MoviePage.kt)
  • Medium: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient
  • single-maintainer — knowledge-concentration (bus factor) risk

New (18)

  • 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 (11 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/list/CategoryListViewModel.kt)
  • Duplicated block (12 lines × 2) (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainViewModel.kt)
  • Duplicated block (16 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/movie/vm/MovieFeedViewModel.kt)
  • Duplicated block (16 lines × 3) (modules/common-ui/src/commonMain/kotlin/org/real/flickfusion/ui/components/CommonEmptyView.kt)
  • Duplicated block (24–25 lines × 2) (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainScreen.kt)
  • Duplicated block (28 lines × 2) (modules/feature/main/src/commonMain/kotlin/feature/main/movie/ui/MoviePage.kt)
  • Duplicated block (9 lines × 2) (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainScreen.kt)
  • Hotspot: modules/common-ui/src/commonMain/kotlin/org/real/flickfusion/ui/widgets/refresh/indicator/SwipeRefreshIndicator.kt (modules/common-ui/src/commonMain/kotlin/org/real/flickfusion/ui/widgets/refresh/indicator/SwipeRefreshIndicator.kt)
  • MethodTooLong: MediaDetailScreenKt.MediaDetailContent (modules/feature/detail/src/commonMain/kotlin/detail/MediaDetailScreen.kt)
  • No ADRs found
  • TodoComment (modules/core/data/src/commonMain/kotlin/org/real/flickfusion/local/AccountLocalSource.kt)
  • TodoComment (modules/feature/favorite/src/commonMain/kotlin/favorite/FavoriteMainViewModel.kt)
  • TodoComment (modules/feature/main/src/commonMain/kotlin/feature/main/movie/vm/MovieFeedViewModel.kt)
  • TodoComment (modules/feature/main/src/commonMain/kotlin/feature/main/tv/vm/TVFeedViewModel.kt)

Architecture

  • Containers 0 added · 0 removed · contexts 9 added · 1 removed · edges 12 added · 0 removed

Added bounded contexts (9)

  • common-ui
  • composeApp
  • data
  • detail
  • domain
  • favorite
  • main
  • mine
  • search

Removed bounded contexts (1)

  • util

Added dependency edges (12)

  • common-ui → domain (coupling)
  • data → domain (coupling)
  • detail → common-ui
  • detail → domain (coupling)
  • favorite → common-ui
  • favorite → domain (coupling)
  • main → common-ui
  • main → domain
  • mine → common-ui
  • mine → domain (coupling)
  • search → common-ui
  • search → domain (coupling)

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

Survey your own repository

MambaWoW/FlickFusion 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 0312115d65abf9b44776c6159ad1d7d0b4bb035a — 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-28e75b8e3254.