Equify

πŸ’Έ Equify β€” Split group expenses and settle up instantly

Google Play Kotlin Jetpack Compose minSdk License: MIT

πŸ‡ͺπŸ‡Έ VersiΓ³n en espaΓ±ol

Equify is a native Android app for splitting group expenses: trips, shared flats, dinners or any plan with friends. Track who paid what and Equify instantly works out who owes whom, keeping the number of transfers low. No sign-up: open the app and start β€” your data stays on your device.

πŸ“² Get it on Google Play

Group summary Settle up About Equify
Group summary Settle up About Equify

✨ Features

πŸ› οΈ Tech stack

Layer Technology
Language 100% Kotlin (coroutines + Flow)
UI Jetpack Compose + Material 3, single-activity, Navigation Compose
Dependency injection Hilt
Persistence Room (offline-first, versioned schemas in app/schemas) + DataStore Preferences
Monetization Google AdMob + Play Billing (remove_ads purchase)
Firebase Crashlytics, Remote Config (force update)
Quality Unit tests (JUnit), R8/ProGuard in release

πŸ—οΈ Architecture

Clean Architecture organized by feature, with a strict data / domain / presentation split inside each one:

app/src/main/java/com/jarica/compartirgastos/
β”œβ”€β”€ app/                  # Application class, global setup
β”œβ”€β”€ core/                 # Code shared across features
β”‚   β”œβ”€β”€ billing/          # Play Billing (remove ads)
β”‚   β”œβ”€β”€ data/             # Room database, DataStore, mappers
β”‚   β”œβ”€β”€ di/               # Hilt modules
β”‚   β”œβ”€β”€ domain/           # Shared domain models
β”‚   β”œβ”€β”€ forceUpdate/      # Forced update via Remote Config
β”‚   β”œβ”€β”€ navigation/       # Type-safe Compose navigation
β”‚   └── presentation/     # Theme and reusable composables
└── features/
    β”œβ”€β”€ groups/           # data / domain / presentation
    β”œβ”€β”€ groupDetail/
    β”œβ”€β”€ costs/
    β”œβ”€β”€ payments/
    β”œβ”€β”€ balances/         # Settlement algorithm ("settle up")
    β”œβ”€β”€ people/
    β”œβ”€β”€ appInfo/
    └── splash/
graph LR
    UI["Presentation<br/>(Compose + ViewModel)"] --> UC["Domain<br/>(Use Cases + Models)"]
    UC --> REPO["Data<br/>(Repositories + Room)"]
    REPO --> DB[("Room / DataStore")]

Every screen follows the ViewModel β†’ Use Cases β†’ Repository flow, exposing UI state as StateFlow and keeping business logic in pure, testable use cases.

🧠 Technical decisions

πŸš€ Building the project

  1. Clone the repository and open it in Android Studio (JDK 11+).
  2. Add your own google-services.json to app/ (your own Firebase project).
  3. Run:
./gradlew assembleDebug

Release builds require your own keystore configured in local.properties (RELEASE_STORE_FILE, RELEASE_STORE_PASSWORD, RELEASE_KEY_ALIAS, RELEASE_KEY_PASSWORD).

πŸ—ΊοΈ Roadmap

πŸ”’ Privacy

Data is stored locally on the device. Privacy policy: jaricagames.github.io/Equify

πŸ“œ License

This project is licensed under the MIT License.


Developed by Juan Antonio Rivero (@JaricaGames)