Equify

💸 Equify — Reparte gastos en grupo y liquida cuentas al instante

Google Play Kotlin Jetpack Compose minSdk License: MIT

🇬🇧 English version

Equify es una app Android nativa para repartir gastos en grupo: viajes, pisos compartidos, cenas o cualquier plan con amigos. Apuntas quién paga qué y Equify calcula al instante quién debe a quién, minimizando el número de transferencias. Sin registro: abres la app y empiezas, tus datos se quedan en tu dispositivo.

📲 Descárgala en Google Play

Resumen del grupo Echar cuentas Sobre Equify
Resumen del grupo Echar cuentas Sobre Equify

✨ Funcionalidades

🛠️ Stack técnico

Capa Tecnología
Lenguaje Kotlin 100% (corrutinas + Flow)
UI Jetpack Compose + Material 3, single-activity, Navigation Compose
Inyección de dependencias Hilt
Persistencia Room (offline-first, esquemas versionados en app/schemas) + DataStore Preferences
Monetización Google AdMob + Play Billing (compra remove_ads)
Firebase Crashlytics, Remote Config (force update)
Calidad Tests unitarios (JUnit), R8/ProGuard en release

🏗️ Arquitectura

Clean Architecture organizada por features, con separación estricta data / domain / presentation en cada una:

app/src/main/java/com/jarica/compartirgastos/
├── app/                  # Application, configuración global
├── core/                 # Código compartido entre features
│   ├── billing/          # Play Billing (quitar anuncios)
│   ├── data/             # Base de datos Room, DataStore, mappers
│   ├── di/               # Módulos de Hilt
│   ├── domain/           # Modelos de dominio comunes
│   ├── forceUpdate/      # Actualización forzada vía Remote Config
│   ├── navigation/       # Navegación Compose type-safe
│   └── presentation/     # Tema y composables reutilizables
└── features/
    ├── groups/           # data / domain / presentation
    ├── groupDetail/
    ├── costs/
    ├── payments/
    ├── balances/         # Algoritmo de liquidación ("echar cuentas")
    ├── people/
    ├── appInfo/
    └── splash/
graph LR
    UI["Presentation<br/>(Compose + ViewModel)"] --> UC["Domain<br/>(Use Cases + Modelos)"]
    UC --> REPO["Data<br/>(Repositorios + Room)"]
    REPO --> DB[("Room / DataStore")]

Cada pantalla sigue el flujo ViewModel → Use Cases → Repositorio, con el estado de UI expuesto como StateFlow y la lógica de negocio aislada en use cases puros y testeables.

🧠 Decisiones técnicas

🚀 Compilar el proyecto

  1. Clona el repositorio y ábrelo con Android Studio (JDK 11+).
  2. Añade tu google-services.json en app/ (proyecto propio de Firebase).
  3. Ejecuta:
./gradlew assembleDebug

Para compilar la release se necesita un keystore propio configurado en local.properties (RELEASE_STORE_FILE, RELEASE_STORE_PASSWORD, RELEASE_KEY_ALIAS, RELEASE_KEY_PASSWORD).

🗺️ Roadmap

🔒 Privacidad

Los datos se almacenan localmente en el dispositivo. Política de privacidad: jaricagames.github.io/Equify

📜 Licencia

Este proyecto está bajo licencia MIT.


Desarrollado por Juan Antonio Rivero (@JaricaGames)