Skip to content
CAI
Software that uses CAICheck a score

alejandro-piguave/TinderCloneCompose

50.1

Adequate · 22 September 2026

5.4k

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 system is a modular Android application, specifically a Tinder clone, built with Kotlin and Jetpack Compose. It implements a clean architecture that separates domain logic, data access, and UI layers for features including authentication, matching, messaging, and profile management. The backend integration relies on Firebase services for data persistence and real-time communication, while the frontend utilizes a centralized navigation graph and a shared UI component library.

How it got here

2022 — Initial release and modularization

6 changes.

The project was initialized as a modular Android application using Kotlin and Jetpack Compose, establishing the core architecture with separate modules for features like authentication, matching, and chat. The period focused on setting up the foundational structure, including Gradle version catalogs, centralized navigation, and the removal of auto-generated build files.

2024–2025 — Firebase integration and modular architecture

13 changes.

The codebase underwent a significant architectural shift to a clean, modular structure, separating core, feature, and domain layers. This period focused on integrating Firebase for authentication, messaging, and data storage, while establishing a reusable UI component library and centralized dependency injection.

Features

Add navigation graph and animation types for app screens

The app now defines a central navigation graph in MainContent.kt that routes between the splash, login, sign-up, home, edit profile, match list, and chat screens. A new AnimationType enum provides slide and fade transition effects for these screens, and the Routes object lists all available screen identifiers.

app/src/main/java/com/apiguave/tinderclonecompose/navigation · high confidence

Added chat and edit profile UI modules

Introduced new Android modules for the chat and edit profile features. The chat module provides a user interface for viewing a list of matches and engaging in one-on-one messaging, including a dedicated screen, view, and viewmodel. The edit profile module adds the UI for users to update their personal information, bio, and profile pictures, along with the associated view and viewmodel logic. Both modules include standard Android configuration files, Koin dependency injection modules, and unit/instrumented tests.

feature/chat, feature/editprofile, feature/home · high confidence

Initial release of the Tinder Clone Android app

The repository has been initialized with the full source code for a modular Android application built with Kotlin, Jetpack Compose, and Firebase. The project includes a .gitignore file to exclude local build artifacts and SDK paths, a LICENSE file granting MIT permissions, and a comprehensive README.md detailing the app's features (onboarding, home, chat), tech stack, and module structure.

(repo-wide) · high confidence

Introduce Firebase-based core APIs for authentication, user profiles, and messaging

The \core:network\ module has been renamed to \core:firebase\ and now provides a new set of Firebase-backed APIs. This includes \AuthApi\ for signing in with Google and managing sessions, \UserApi\ for creating and retrieving user profiles and handling swipes, \MessageApi\ for real-time chat streams and sending messages, \MatchApi\ for retrieving match data, and \PictureApi\ for uploading and deleting user images. These changes shift the app's data layer to use Firebase Authentication, Firestore, and Storage.

core/firebase · high confidence

Introduce core UI component library and shared resources

The core/ui module now provides a reusable set of Compose UI components, including form inputs (FormTextField, SectionTitle), buttons (GradientButton), layout helpers (PictureGrid, HorizontalPicker), and dialogs (DeleteConfirmation, Error, SelectPicture). The package has been migrated from the app layer to com.apiguave.core\_ui, with theme colors and shapes updated (e.g., primary color shifted from Orange to Pink). A ComposeFileProvider and filepaths.xml are added to support image capture and gallery selection workflows.

core/ui · high confidence

Introduce match data layer with Firebase and fake implementations

The match data module now provides the concrete implementations for retrieving match information. This includes a production implementation (MatchRepositoryImpl) that fetches data via a new MatchFirebaseDataSource, as well as a FakeMatchRepositoryImpl for testing purposes. The module also includes a Koin dependency injection module to wire these components together.

core/match/data · high confidence

New domain layer for core features

The application now includes a new domain layer for core features, introducing domain models, repositories, and use cases for authentication, matching, messaging, picture management, and profile management. This provides a clean architecture foundation for these features.

(repo-wide) · high confidence

New onboarding screens for login, profile creation, and splash navigation

Users can now log in with Google, create a profile with personal details and photos, and navigate through a splash screen that routes to the appropriate screen based on authentication and profile status. The onboarding feature includes a login screen with Google sign-in, a create profile screen for name, bio, gender, orientation, and photos, and a splash screen that resolves the start destination. The domain layer includes use cases for creating a profile and resolving the start destination, with Koin dependency injection for ViewModels and use cases.

feature/onboarding · high confidence

New picture data module with Koin dependency injection and repository implementations

The core/picture/data module has been introduced, providing the data layer for picture management. This includes a Koin-based dependency injection setup (Module.kt) that registers the real PictureRepositoryImpl and PictureFirebaseDataSource, as well as a FakePictureRepositoryImpl for testing. The module also contains the repository implementations that bridge local string paths to Firebase storage URIs, and a utility extension for handling Android resource URIs.

core/picture/data · high confidence

Behavioural changes

Auth data layer restructured with Koin dependency injection and new exception types

The auth data module has been reorganized, introducing a Koin-based dependency injection setup that wires the real \AuthRepositoryImpl\ (using \AuthFirebaseDataSource\) and a \FakeAuthRepositoryImpl\ for testing. Additionally, \SignInException\ and \SignUpException\ classes are added to handle authentication errors, and the unit test package is moved to align with the new module structure.

core/auth/data · high confidence

Centralized dependency injection configuration for app modules

The app module now explicitly wires together feature modules (auth, home, chat, profile), domain modules (auth, match, message, picture, profile), and data modules (auth, match, message, picture, profile). It also includes the onboarding domain module. For mock build variants, fake implementations are injected; otherwise, real data modules are used.

app/src/main/java/com/apiguave/tinderclonecompose/di · high confidence

Gradle build tool upgraded to version 8.6

The Gradle wrapper has been updated from version 7.3.3 to 8.6. This upgrade brings the latest features, performance improvements, and security fixes associated with the newer Gradle release, ensuring the project uses a modern build environment.

gradle · high confidence

Moved message data layer to core module

The message data layer, including the repository implementations and Firebase data source, has been moved into the core/message/data module. This change consolidates the data access logic for messages, making it easier to manage and reuse across the application.

core/message/data · high confidence

Removal of auto-generated BuildConfig files

The auto-generated BuildConfig classes for the debug and androidTest build variants have been removed from the app module. This change eliminates the generated source files that previously exposed build-time constants such as the application ID, build type, and version information to the compiled code, likely as part of a broader package reorganization.

app/build · medium confidence

Removed deprecated color palette definitions

The app's custom color palette (LightLightGray, SystemGray4, BasicWhite, Orange, Pink, Purple, LightPurple) has been removed from the codebase. This change likely reflects a shift in the app's visual design or a move to use default Compose theme colors, meaning the previous specific color definitions are no longer available for use in the UI.

app/src/main/java/com/apiguave/tinderclonecompose/ui · high confidence

Reorganize core modules and add UI module

The core module structure has been reorganized to group domain modules together, and a new core:ui module has been added. Additionally, the core:network module has been renamed to core:firebase.

core · medium confidence

Restructured profile data layer with new repository and data source implementations

The profile data module has been reorganized into the core directory, introducing a new \ProfileRepositoryImpl\ that manages profile operations and caches the current user's data locally. A \ProfileFirebaseDataSource\ was added to handle remote profile interactions, while a \FakeProfileRepositoryImpl\ was introduced to provide mock data for testing or development. The module also includes extension functions for date, gender, and orientation conversions, alongside a Koin dependency injection module to wire these components together.

core/profile/data · medium confidence

Simplified app navigation and replaced inline UI with a centralized navigation graph

The main activity now delegates all routing to a centralized \NavigationGraph\ composable, replacing the previous inline \AnimatedNavHost\ setup that handled login, signup, and picture selection screens. This change removes the direct composition of \LoginView\ and \SignUpView\ from the activity, consolidating the app's navigation structure into a single graph definition.

app/src/main/java/com/apiguave/tinderclonecompose · high confidence

Dependencies

Migrated project to Gradle version catalogs and modularized the codebase

The project has been refactored from a flat structure into a modular architecture, introducing separate modules for core features (auth, match, message, picture, profile) and UI layers (onboarding, home, chat, edit profile). Build configuration has been migrated to Gradle version catalogs (libs.versions.toml), replacing the previous \build.gradle\ scripts and centralized dependency management. This change improves build isolation and maintainability by explicitly defining dependencies between the 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

Score

  • CAI 53 → 50 (-2.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 98 (-2.1)
  • Architecture 97 → 89 (-7.5)
  • Maturity 59 → 53 (-6.1)
  • Readiness 24 → 24 (+0.0)
  • Security 100 → 100 (+0.0)

Resolved (9)

  • Change coupling clique: MatchApi.kt, MessageApi.kt, PictureApi.kt, UserApi.kt (core/firebase/src/main/java/com/apiguave/core_firebase/MatchApi.kt)
  • Change coupling: FirestoreMatch.kt ↔ FirestoreUser.kt (core/firebase/src/main/java/com/apiguave/core_firebase/model/FirestoreMatch.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) (feature/home/ui/src/main/java/com/apiguave/home_ui/components/NewMatchView.kt)
  • Duplicated block (12 lines × 2) (feature/editprofile/ui/src/main/java/com/apiguave/editprofile_ui/EditProfileView.kt)
  • No exposed public API
  • Test reliability not included
  • single-maintainer — knowledge-concentration (bus factor) risk

New (17)

  • Change coupling clique: MainContent.kt, HomeView.kt, NewMatchView.kt (app/src/main/java/com/apiguave/tinderclonecompose/navigation/MainContent.kt)
  • Change coupling: AuthApi.kt ↔ EditProfileViewModel.kt (core/firebase/src/main/java/com/apiguave/core_firebase/AuthApi.kt)
  • Change coupling: ChatView.kt ↔ ChatViewModel.kt (feature/chat/ui/src/main/java/com/apiguave/chat_ui/chat/ChatView.kt)
  • Change coupling: PictureApi.kt ↔ UserApi.kt (core/firebase/src/main/java/com/apiguave/core_firebase/PictureApi.kt)
  • Change coupling: UserApi.kt ↔ ProfileRepositoryImpl.kt (core/firebase/src/main/java/com/apiguave/core_firebase/UserApi.kt)
  • 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)
  • Duplicated block (11 lines × 2) (core/match/data/src/main/java/com/apiguave/match_data/extensions/Date.kt)
  • Duplicated block (11 lines × 3) (core/firebase/src/main/java/com/apiguave/core_firebase/extensions/Task.kt)
  • Duplicated block (12 lines × 2) (feature/editprofile/ui/src/main/java/com/apiguave/editprofile_ui/extensions/Int.kt)
  • Duplicated block (14–15 lines × 2) (feature/home/ui/src/main/java/com/apiguave/home_ui/components/NewMatchView.kt)
  • Duplicated block (16 lines × 2) (feature/editprofile/ui/src/main/java/com/apiguave/editprofile_ui/EditProfileView.kt)
  • MethodTooLong: CreateProfileViewKt.CreateProfileView (feature/onboarding/ui/src/main/java/com/apiguave/onboarding_ui/create_profile/CreateProfileView.kt)
  • MethodTooLong: HomeViewKt.HomeView (feature/home/ui/src/main/java/com/apiguave/home_ui/HomeView.kt)
  • No ADRs found
  • Orphaned files with no living knowledge

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

Survey your own repository

alejandro-piguave/TinderCloneCompose 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 2bc78692fd5431942337345ebe6f17a6be202f38 — 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.