Skip to content
CAI
Software that uses CAICheck a score

vedartm/rick-and-morty-info

56.4

Adequate · 21 September 2026

1.1k

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Flutter-based mobile application that serves as an interactive guide to the 'Rick and Morty' universe. It allows users to browse and search for characters, episodes, and locations through a tabbed home interface. The architecture is built on clean principles, utilizing dependency injection and the BLoC pattern to manage state and separate concerns. Data is fetched via GraphQL and cached locally using Hive, with robust error handling and offline support.

How it got here

2019 — Flutter 2.x migration and architecture modernization

5 changes.

The project underwent a comprehensive modernization, migrating the Android and iOS native configurations to support Flutter 2.x and CocoaPods static libraries. Internally, the application was refactored from a simple demo into a modular clean architecture using the BLoC pattern and dependency injection. These changes were accompanied by dependency updates and the removal of obsolete template tests.

2020 — home feature and core infrastructure

10 changes.

This period focused on establishing the application's core infrastructure, including dependency injection, network checking, and data serialization utilities. It also involved building the home feature from the ground up, implementing a clean architecture with local and remote data sources, and creating the associated UI and tests.

Features

Added GraphQL query definitions and JSON converters

Introduced new core utilities: GqlQuery, which defines GraphQL query strings for characters, locations, and episodes, and Mapper classes (GenderConverter, VitalStatusConverter) that handle JSON serialization and deserialization for gender and vital status types.

lib/core/util · high confidence

Added functional enum types for gender and vital status

Introduced new functional enum types for Gender (female, genderless, male, unknown) and VitalStatus (alive, dead, unknown), each with generated extension methods for pattern matching and mapping, enabling safer and more expressive handling of these core domain values.

lib/core/types · high confidence

Introduced NetworkInfo class for connectivity checks

Added a new NetworkInfo class in lib/core/network that wraps the internet\_connection\_checker library to provide a synchronous isConnected property for checking network availability, registered as a lazy singleton via the injectable package.

lib/core/network · high confidence

Introduced local and remote data sources for the home page

Added new data source implementations for the home feature, including a local cache layer using Hive and a remote layer using GraphQL. These changes enable the home page to fetch and store characters, episodes, and locations, supporting offline caching and network data retrieval for the home feed.

lib/features/home/data/datasources · high confidence

Introduces dependency injection and error handling infrastructure

The application now uses the GetIt service locator with the Injectable framework to manage dependencies. This includes registering data sources, repositories, use cases, and BLoC instances, as well as configuring Hive storage and network connectivity checks. Additionally, new exception and failure classes have been added to standardize error handling across the core layer.

lib/core/injection · high confidence

New home screen with tabbed navigation for Characters, Episodes, and Locations

The home screen now features a bottom navigation bar allowing users to switch between three main sections: Characters, Episodes, and Locations. Each section displays a paginated list of items with relevant details (e.g., name, status, or air date). The implementation introduces a new \HomeBloc\ to manage state and handle data fetching for each tab, along with dedicated widgets for each list and status indicators for empty or error states.

lib/features/home/presentation · high confidence

Behavioural changes

Android app migrated to Flutter 2.x embedding

The Android project has been updated to support the Flutter 2.x embedding, which changes how the app initializes and handles the Flutter engine. This includes updating the AndroidManifest.xml to use the new embedding meta-data, switching the main activity to extend FlutterActivity, and removing the manual plugin registration. Additionally, the app label was changed to 'Rick and Morty Universe', a new ProGuard rules file was added for Flutter, and the Gradle wrapper was upgraded to version 6.7.

android · high confidence

Enforced code quality and testing via new Git hooks

New pre-commit and pre-push Git hooks have been added to the repository. The pre-commit hook runs the Flutter formatter and prevents direct commits to the master branch. The pre-push hook enforces that the working directory is clean, runs the Flutter analyzer to catch static analysis issues, and executes the full unit test suite, failing the push if any of these checks do not pass.

.githooks, lib/core/usecase · high confidence

Home data layer migrated to clean architecture with offline caching

The home feature's data layer has been restructured into a clean architecture, introducing a new HomeRepository that implements IHomeRepository. This repository now handles data fetching from remote and local sources, with logic to check network connectivity and cache data locally when offline, returning appropriate failures for server or cache issues.

lib/features/home/data/repositories · high confidence

Migrated home feature to clean architecture

The home feature has been refactored into a clean architecture structure. This introduces domain-layer entities for Characters, Episodes, and Locations, along with corresponding data models and serialization logic. The update also adds domain-layer use cases (GetCharactersUseCase, GetEpisodesUseCase, GetLocationsUseCase) and a repository interface (IHomeRepository) to manage data fetching, separating business logic from data handling.

lib/features/home/data/models, lib/features/home/domain · high confidence

Migrated to clean architecture with dependency injection and BLoC

The application's entry point and root widget have been refactored to support a clean architecture. The previous counter-demo app has been replaced with a new structure that integrates the \flutter\_bloc\ and \injectable\ packages. The app now initializes a dependency injection container and provides a \HomeBloc\ via \BlocProvider\, shifting the app from a simple stateful widget to a more modular, testable architecture.

lib · medium confidence

iOS build configuration updated to use CocoaPods static library

The iOS project has been updated to link against the CocoaPods-generated static library (libPods-Runner.a) instead of embedding the Flutter and App frameworks directly. This change, which includes adding a build phase to check the Podfile.lock for consistency, aligns the Xcode project with modern Flutter build practices and resolves build errors associated with the flutter-graphql upgrade.

ios · high confidence

Test coverage

Added unit tests for home feature use cases and repository; Removed obsolete Flutter widget test.

Dependencies

Updated Flutter dependencies and Android/iOS build configurations

The project's dependencies have been updated, including the addition of packages such as \graphql\_flutter\, \flutter\_bloc\, \hive\, and \get\_it\, alongside upgrades to existing libraries like \async\ and \collection\. On the Android side, the build configuration was migrated to AndroidX, the compile and target SDK versions were raised to 29, and release signing was enabled. The iOS configuration was also updated with a new Podfile and lockfile reflecting the current state of native dependencies.

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

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 90 (-10.3)
  • Maturity 32 → 45 (+12.3)
  • Readiness 50 → 46 (-4.0)
  • Security 62 → 76 (+13.7)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (14)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High CVE: [GHSA redacted] (pubspec.lock)
  • 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
  • Test reliability not included
  • complexity unreadable for .dart, .java — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (19)

  • 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)
  • High CVE: [GHSA redacted] (pubspec.lock)
  • 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)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • No ADRs found
  • No checksums published for release artifacts
  • No dependency advisory monitoring

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

Survey your own repository

vedartm/rick-and-morty-info 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 afce20ce234ff91b24080776a8eb876682da9aa1 — 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-fa71c66cabd8.