Skip to content
CAI
Software that uses CAICheck a score

carlossalasamper/react-native-clean-architecture

45.1

Weak · 20 September 2026

944

lines of production code

TypeScript

with Kotlin

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a mobile application built with Expo and React Native that manages and displays posts. It utilizes a clean architecture with bounded contexts, employing MobX for state management and Inversiland for dependency injection. The application supports Android deployment with native configurations and handles post retrieval and presentation through a restructured, layered codebase.

Features

Added TypeScript environment variable definitions

The application now includes a TypeScript declaration file (src/@types/environment.d.ts) that defines the EXPO\_PUBLIC\_API\_URL environment variable, enabling type-safe access to this configuration value within the codebase.

app, src/@types · high confidence

Android app initialization and build configuration

The Android module now includes the necessary native configuration files to build and run the application. This adds the main AndroidManifest with required permissions (Internet, Storage, System Alert Window) and deep-link intent filters, the MainActivity Kotlin class integrating Expo splash screen and React Native's New Architecture (Fabric), and standard resource definitions for app theming, icons, and colors. It also introduces ProGuard rules to preserve React Native Reanimated and TurboModule classes, and sets up the Gradle wrapper (version 8.10.2) to manage the build environment.

android · high confidence

Removals

Removal of legacy Post module UI and Redux state management

The previous Post module implementation has been removed from the codebase. This includes the deletion of the PostScreen component, the Redux slice (postSlice) that handled state for fetching and finding posts, and the associated TypeScript type definitions. This change reflects a shift away from the previous Redux-based architecture and screen structure for the Post feature.

src/ui/modules/post · high confidence

Removal of post retrieval use case and repository implementation

The application no longer supports fetching posts via the previous architecture; the \GetPostsUseCase\ in the application layer and the \PostRepository\ in the infrastructure layer have been deleted. This removes the ability to retrieve individual posts or lists of posts from the JSONPlaceholder API using the \reactject\ dependency injection framework.

src/application, src/infrastructure · high confidence

Behavioural changes

Core architecture refactored with new dependency injection and navigation updates

The core module has been restructured to replace the previous dependency injection system with inversiland, introducing a new CoreModule that manages global providers like HttpClient and environment configuration. This change is accompanied by a shift in the application's entry point, where the initial navigation route has been changed from 'Home' to 'Posts', and the i18n service now uses a namespaced key structure (e.g., 'core.errors') for translations. Additionally, the localization logic was refined to truncate the locale string to two characters, and new presentation hooks and types were added to support the updated state and context management.

src/core · high confidence

Enforced commit message standards and pre-commit linting; removed HomeScreen

The development workflow now enforces commit message conventions via a new commit-msg hook using commitlint, and automatically fixes linting issues on pre-commit using yarn. Additionally, the HomeScreen component has been removed from the core UI module.

.husky, src/ui/modules/core · high confidence

Major architecture overhaul: Expo 52, MobX, and Inversiland

The application has been upgraded to Expo 52 and restructured around a clean architecture with bounded contexts (core and post). State management has switched from Redux Toolkit to MobX, and the dependency injection system has been replaced with Inversiland. The entry point is now defined in app.config.ts with new plugins (expo-build-properties, expo-localization, expo-tracking-transparency) and an Android package name, while the legacy index.js entry point is removed. Configuration files have been updated to support these changes, including a new commitlint config, updated ESLint extends, and TypeScript path aliases.

(repo-wide) · high confidence

Migrated dependency injection to Inversiland

The application's dependency injection system has been replaced with Inversiland. This change introduces a new AppModule that aggregates Core and Post modules, and updates the application entry point (src/index.ts) to initialize the Inversiland container with a default Singleton scope before registering the root component.

src · high confidence

Post module restructured with MobX state management and Inversiland dependency injection

The post feature has been reorganized into a layered architecture (domain, application, infrastructure, presentation) and now uses MobX for state management instead of Redux Toolkit, with dependency injection handled by Inversiland instead of the previous system. This change introduces dedicated stores (GetPostsStore, FindPostStore) that manage loading states and data, wired through React Context providers, and updates the presentation layer (PostsScreen, PostScreen, PostItem) to consume these observable stores for rendering post lists and details.

src/post · high confidence

Removal of legacy post data interfaces and Redux store setup

The application no longer includes the \GetPostsData\ interface for defining post query parameters, the \IPostRepository\ interface along with its token, and the Redux store configuration (including \configureStore\, \RootState\, \AppDispatch\, and custom hooks like \useAppDispatch\ and \useAppSelector\). This indicates a significant architectural shift away from the previous data access and state management patterns in the post domain and UI layer.

src/domain, src/ui · high confidence

Dependencies

Upgrade to Expo SDK 52 and React Native 0.76 with dependency overhaul

The project has been upgraded to Expo SDK 52, which includes a major bump of the underlying React Native version to 0.76.3 and React to 18.3.1. This update replaces the previous state management and dependency injection libraries, removing Redux Toolkit and inversify-sugar in favor of MobX (6.13.5) and inversiland (0.6.0). Additionally, several Expo modules have been updated or added, including expo-linking, expo-localization, and expo-status-bar, while dev dependencies like TypeScript and Babel have also been updated to newer versions.

(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 47 → 45 (-2.0)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 91 → 94 (+3.1)
  • Architecture 100 → 69 (-31.0)
  • Maturity 67 → 73 (+6.6)
  • Readiness 13 → 13 (+0.1)
  • Security 74 → 78 (+4.3)

Resolved (57)

  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Dependency hygiene not measured — no supported dependency manifest was read
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • …and 37 more

New (52)

  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • 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] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • …and 32 more

Architecture

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

Added bounded contexts (1)

  • app

Removed bounded contexts (1)

  • android

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

Survey your own repository

carlossalasamper/react-native-clean-architecture 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 20 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 57c2b8f769347ad158618e18152e6fe05ac8b274 — 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.