alejandro-piguave/TinderCloneCompose
50.1
Adequate · 22 September 2026
5.4k
lines of production code
Kotlin
primary language
7
measurements over time
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.