Habitus es una aplicación nativa para Android diseñada para la formación y seguimiento de hábitos positivos. Resuelve el problema de la falta de constancia mediante un sistema de progreso visual (rachas, historial y estadísticas) impulsado por una experiencia de usuario fluida y libre de distracciones.
Su valor principal radica en su enfoque centrado en la privacidad y rendimiento, sincronizando datos de forma segura en la nube mientras mantiene una arquitectura escalable y moderna que cumple con estándares profesionales de la industria.
El proyecto está construido sobre las herramientas más modernas del ecosistema Android:
- Lenguaje: Kotlin 2.0.21
- Construcción: Android Gradle Plugin (AGP) 8.7.3
- Inyección de Dependencias: Dagger Hilt 2.51.1 (procesado vía KSP)
- Backend as a Service (BaaS): Firebase Auth (Autenticación) y Firestore (Base de datos NoSQL)
- Tareas en Segundo Plano: WorkManager (Notificaciones y sincronización asíncrona)
- Procesamiento de Anotaciones: KSP (Kotlin Symbol Processing) para tiempos de compilación óptimos
- Integración y Entrega Continua: GitHub Actions ([audit.yml](.github/workflows/audit.yml) y [release.yml](.github/workflows/release.yml))
La aplicación implementa un patrón Model-View-ViewModel robusto, apoyado por el patrón Repository y la inyección de dependencias con Hilt para garantizar desacoplamiento y alta testabilidad.
graph TD
UI[UI Layer: Activities / Fragments] --> VM[ViewModel Layer: StateFlow / Coroutines]
VM --> REP[Repository Layer: HabitRepository]
REP --> FB[(Firebase Firestore / Auth)]
REP --> LCL[Local WorkManager / Preferences]
classDef layer fill:#f9f9f9,stroke:#333,stroke-width:2px;
class UI,VM,REP,FB,LCL layer;
- UI Layer: Responsable únicamente de renderizar estados (
UiState) y capturar eventos del usuario. Usa ViewBinding. - ViewModel Layer: Orquesta la lógica de presentación. Expone flujos reactivos (
StateFlow) que sobreviven a rotaciones y aisla a la vista de los datos crudos. - Repository Layer: Centraliza las operaciones de datos, aplicando reglas de negocio y transacciones atómicas con la nube.
- Gestión de Cuentas: Registro seguro y login persistente vía Firebase Auth.
- Seguimiento Dinámico: Listado de hábitos semanales con soporte interactivo.
- Sistema de Rachas: Contabilidad inteligente de completaciones continuas con soporte para "días de gracia".
- Modo Enfoque: Pantalla inmersiva para tareas de alta concentración sin notificaciones molestas.
- Notificaciones Locales: Recordatorios y resúmenes de rendimiento procesados silenciosamente con
WorkManager. - Archivado Histórico: Oculta hábitos antiguos sin perder estadísticas pasadas.
- Resumen Semanal: Consolidado automático de completaciones, rachas mejoradas y puntos de mejora.
Para ejecutar HabitusApp en tu entorno local, sigue estos pasos de manera precisa:
-
Clonar el repositorio:
git clone https://github.com/Ochoa-Stack/Habitus.git cd Habitus -
Añadir la configuración de Firebase: Descarga tu archivo
google-services.jsondesde Firebase Console y ubícalo en el directorioapp/:HabitTrackerApp/app/google-services.jsonNota: Este archivo está excluido en el
.gitignorepor seguridad. -
Sincronizar Gradle: Abre el proyecto en Android Studio (Hedgehog o superior) y sincroniza las dependencias.
-
Compilar y Ejecutar: Asegúrate de tener un emulador activo o un dispositivo conectado y ejecuta:
./gradlew clean assembleDebug
Habitus posee un pipeline automatizado vía GitHub Actions que asegura calidad y facilita la distribución:
audit.yml: Se dispara en cada Push/PR adevelopomain. Ejecuta validaciones de formato (ktlint), análisis estático avanzado (detekt), tests unitarios y compila un APK de Debug.release.yml: Se dispara al generar un nuevoTag. Compila la aplicación, la firma criptográficamente usando secretos almacenados en GitHub, y adjunta el APK de producción en un nuevo release público de GitHub (Distribución gratuita sin Play Store).
Desarrollado y mantenido por:
Elias Ochoa - GitHub | LinkedIn
Repositorio Original: GitHub
Este proyecto se distribuye bajo la licencia MIT. Siéntete libre de usarlo y modificarlo. Consulta el archivo LICENSE para más detalles.