yusufceylan/MVI-Clean-Architecture
45.7
Weak · 21 September 2026
1.6k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This is an Android application that displays a list of posts and their associated comments. It follows a clean architecture with distinct layers for domain logic, data retrieval (remote and local), and presentation. The system manages UI state and navigation between screens, supported by comprehensive testing across all modules.
Features
Add local data layer with Room database and unit tests
The local module now includes the core components for local data persistence: a Room database (\AppDatabase\) and its \PostDAO\ for managing \PostLocalModel\ entities. This is accompanied by a \LocalDataSourceImp\ implementation that bridges the data layer to the database, using a \PostLocalDataMapper\ for model conversion. To ensure reliability, the change adds comprehensive unit tests for \LocalDataSourceImp\ using MockK, as well as Android instrumentation tests for \PostDAO\ using Hilt and MockK, covering all standard CRUD operations.
local · high confidence
Add presentation layer for posts and comments
The presentation module now includes the ViewModel, contract, and mapper classes for the main screen (listing posts) and the detail screen (listing comments for a post). This introduces the UI state management and event handling for fetching and displaying posts and comments, along with unit tests for the ViewModels using Turbine and MockK.
presentation · high confidence
Added common module with shared utilities and types
Introduced a new 'common' module containing shared Kotlin utilities and types for the application. This includes a generic Resource sealed class for managing loading, success, error, and empty states, a generic Mapper interface for bidirectional data transformation, and extension functions for null-checking. The module also includes standard Android test scaffolding (instrumented and unit tests) and configuration files (ProGuard rules, AndroidManifest).
common · high confidence
Adds remote data fetching for posts and comments
The remote module now provides a complete implementation for fetching posts and comments from the network. This includes an ApiService interface defining endpoints for retrieving all posts and comments for a specific post, along with the corresponding data models (PostNetworkModel, CommentNetworkModel) and mappers to convert network responses into internal data models. The RemoteDataSourceImp class implements the data retrieval logic, and unit tests verify the correct mapping and error handling for both posts and comments.
remote · high confidence
Implemented data layer for fetching posts and comments
The data module now provides the implementation for retrieving posts and comments. This includes data models for posts and comments, mappers to convert between data and domain models, and a repository implementation that fetches data from a remote source, caches it locally, and handles fallbacks to local storage if the remote call fails. Unit tests have been added to verify the repository's behavior for both successful and failed scenarios.
data · high confidence
Introduction of a shared base module with base classes and architectural interfaces
A new 'base' module has been added to the project, providing foundational components for the application's architecture. This includes abstract base classes for Activities, Fragments, RecyclerView Adapters, ViewHolders, and ViewModels, all utilizing ViewBinding. The module also introduces generic interfaces for UI state, events, and effects to support a structured, event-driven state management pattern. Additionally, the module includes standard Android configuration files (manifest, ProGuard rules) and a unit test.
base · high confidence
Migrated to Material Design and implemented navigation between Post and Comment screens
The app's visual style has been updated to use the Material Components theme, replacing the previous AppCompat theme. Additionally, the app now features a two-screen flow: a main screen displaying a list of posts, and a detail screen showing comments for a selected post. Users can navigate from the post list to the comment detail view, with the navigation graph and UI components fully integrated.
app/src/main · high confidence
New domain layer with use cases and entity models
The app now includes a domain layer that defines the core business logic. This includes \PostEntityModel\ and \CommentEntityModel\ data classes, a \Repository\ interface for fetching posts and comments, and \GetPostsUseCase\ and \GetPostCommentsUseCase\ classes that handle the business rules for retrieving this data. The domain also introduces \BaseUseCase\ as a template for use cases and \@DefaultDispatcher\, \@IoDispatcher\, and \@MainDispatcher\ annotations for dependency injection. Additionally, unit tests have been added to verify the behavior of the new use cases.
domain · high confidence
Test coverage
Added UI tests for Main and Detail fragments using Hilt and Barista; Added debug-only Hilt test activity for fragment testing.
Dependencies
Gradle wrapper updated to version 6.5
The Gradle wrapper has been upgraded from version 6.1.1 to 6.5, which may bring performance improvements and new features available in the newer Gradle release.
gradle · high confidence
Migrate to multi-module architecture with Hilt and new dependencies
The project has been restructured into multiple modules (app, base, common, domain, data, local, remote, presentation) to support a clean architecture. This change introduces Dagger Hilt for dependency injection across the application, adds Room for local data storage, Retrofit for remote data fetching, and integrates testing libraries like Turbine, MockK, and Barista. The build configuration now uses a centralized versions.gradle file to manage dependency versions, and the app module includes Hilt, navigation, and UI testing 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
Score
- CAI 47 → 46 (-1.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (-0.2)
- Architecture 100 → 94 (-6.0)
- Maturity 55 → 55 (+0.0)
- Readiness 24 → 24 (+0.0)
- Security 100 → 100 (+0.0)
- Domain Modelling 55 → 51 (-4.4)
Resolved (5)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (4)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no usage examples (README.md)
- Duplicated block (8 lines × 2) (local/src/main/java/com/ysfcyln/local/mapper/PostLocalDataMapper.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
yusufceylan/MVI-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 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 f2a79fdf15dcfa3112a623e983d7d4dab71cd453 — 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.