Skip to content

Repository files navigation

Manager Task

Este proyecto lo desarrollé como una aplicación móvil para gestión de tareas, con enfoque en organización personal, recordatorios y una experiencia simple para crear, clasificar y dar seguimiento a pendientes.

La app está construida con Ionic + Angular, usa Firebase Authentication para el acceso de usuarios, Firebase Remote Config para controlar ciertos comportamientos desde consola, y almacenamiento local para conservar tareas, categorías, perfil y preferencias por usuario. En Android también integra notificaciones locales mediante plugins de Cordova, aunque el contenedor nativo actual está montado sobre Capacitor.

Objetivo del proyecto

La idea de esta app es centralizar en un solo lugar:

  • tareas por hacer
  • categorías para clasificar tareas
  • recordatorios locales
  • alertas por correo
  • configuración de perfil del usuario
  • preferencias de visualización y comportamiento

Quise que la aplicación tuviera una base suficientemente limpia para crecer después con más módulos, sin complicar demasiado el flujo inicial.

Stack principal

  • Angular 20
  • Ionic 8
  • TypeScript
  • Firebase
  • Capacitor
  • plugins de Cordova para varias capacidades nativas
  • Gradle para Android

Funcionalidades implementadas

1. Autenticación

La app permite:

  • registro de usuario con correo y contraseña
  • inicio de sesión
  • cierre de sesión
  • restablecimiento de contraseña
  • cambio de contraseña desde perfil

La autenticación se maneja con Firebase Authentication.

2. Gestión de tareas

Cada usuario puede:

  • crear tareas
  • editar tareas
  • eliminar tareas
  • marcar tareas como completadas
  • cambiar el estado de flujo de una tarea
  • asignar una o varias categorías
  • registrar fecha y hora de vencimiento
  • agregar descripción

La lógica principal de tareas está centralizada en el caso de uso TaskUseCase.

3. Gestión de categorías

La app permite:

  • crear categorías
  • editar categorías
  • eliminar categorías
  • filtrar tareas por categoría

Cuando se elimina una categoría, también se limpia su referencia en las tareas que la tenían asociada.

4. Perfil de usuario

Desde la pantalla de perfil se puede administrar:

  • nombre visible
  • teléfono
  • cargo o rol
  • contraseña
  • envío de recuperación de acceso
  • preferencias de notificaciones
  • preferencias de visualización de tareas

El perfil extendido no depende solo de Firebase Auth; parte de esta información se guarda localmente por usuario.

5. Preferencias

La aplicación maneja varias preferencias persistentes, entre ellas:

  • activar o desactivar notificaciones push locales
  • activar o desactivar alertas por correo
  • activar recordatorios por vencimiento
  • mostrar u ocultar tareas completadas
  • usar lista compacta

Estas preferencias quedan guardadas por usuario en almacenamiento local.

6. Recordatorios y notificaciones

La app programa recordatorios locales para tareas según su vencimiento. Actualmente contempla avisos en momentos cercanos al cumplimiento, por ejemplo:

  • 1 día antes
  • 30 minutos antes
  • 15 minutos antes
  • al vencer

Para esto estoy usando cordova-plugin-local-notification y la lógica de sincronización está conectada con SyncTaskRemindersUseCase y TaskReminderService.

También se integra cordova-plugin-badge para manejo de insignias, y existen preferencias para controlar cuándo notificar.

7. Alertas por correo

Además de la notificación local, la app tiene soporte para alertas por correo a través de un servicio externo. En el código existe integración con:

  • FormSubmitTaskEmailService
  • plantillas HTML y texto para correos

Esto se usa para recordatorios y para el flujo de recuperación / comunicación visual de marca.

8. Remote Config

Tengo integrado Firebase Remote Config para controlar comportamiento desde consola sin recompilar la app.

En este momento existe una feature flag importante:

  • filter_categories

La app escucha cambios y puede actualizar ese estado en tiempo real según la configuración remota. La lógica está implementada a través de:

  • FirebaseRemoteConfigService
  • RemoteConfigUseCase

Estructura del proyecto

Organicé el proyecto con una separación por capas para mantener el código más claro:

  • src/app/core/domain: modelos, contratos y reglas base
  • src/app/core/application: casos de uso
  • src/app/core/infrastructure: servicios concretos e integraciones
  • src/app/presentation: páginas, guards y lógica de UI
  • src/app/shared: componentes reutilizables, utilidades y modelos auxiliares

Carpetas importantes

  • src/app/presentation/pages/auth: login y registro
  • src/app/presentation/pages/tasks: listado de tareas
  • src/app/presentation/pages/categories: administración de categorías
  • src/app/presentation/pages/profile: perfil y preferencias
  • src/app/shared/components: formularios, filtros, cards y sheet de creación
  • src/environments: configuración de entorno y Firebase
  • android: proyecto nativo Android actual
  • platforms/android: artefactos heredados / generados de Cordova

Persistencia de datos

La app mezcla dos estrategias de persistencia:

  • Firebase Authentication para identidad del usuario
  • almacenamiento local para datos de negocio y configuración

En local se guardan claves como:

  • tareas
  • categorías
  • preferencias
  • perfiles
  • control de correos enviados por vencimiento
  • control de pushes ya disparados

Las claves están centralizadas en src/app/core/infrastructure/config/storage-keys.ts.

Flujo general de navegación

La navegación principal se divide así:

  • login
  • register
  • tabs/tasks
  • tabs/categories
  • tabs/profile

Las rutas protegidas usan un auth guard para impedir acceso si no hay sesión activa.

Requisitos para correr el proyecto

Requisitos generales

  • Node.js
  • npm
  • Angular CLI
  • Ionic CLI si se quiere usar flujo Ionic

Para Android

  • JDK 17
  • Android Studio
  • Android SDK
  • Gradle Wrapper ya incluido en el proyecto

Instalación

Primero instalo dependencias:

npm install

Luego puedo levantar la versión web en desarrollo:

npm start

O compilar la aplicación web:

npm run build

Compilación Android

Para sincronizar los assets web hacia Android:

npx cap copy android

Para generar APK debug:

cd android
./gradlew assembleDebug

En Windows:

cd android
.\gradlew.bat assembleDebug

Para generar APK release firmado:

cd android
.\gradlew.bat assembleRelease

La salida queda en:

  • android/app/build/outputs/apk/debug/app-debug.apk
  • android/app/build/outputs/apk/release/app-release.apk

Firma del APK

Configuré el firmado de Android con:

  • android/keystore.properties
  • android/app/manager-task-release.keystore

Esos archivos están ignorados por Git porque contienen información sensible.

Configuración de Firebase

La aplicación ya está conectada a un proyecto Firebase y usa configuración en:

  • src/environments/environment.ts
  • src/environments/environment.prod.ts
  • android/app/google-services.json

Si se cambia de proyecto Firebase, hay que revisar:

  • apiKey
  • authDomain
  • projectId
  • storageBucket
  • messagingSenderId
  • appId

Además, para autenticación por correo, hay que verificar que el proveedor Email/Password esté habilitado en Firebase Console.

Plugins nativos utilizados

En el proyecto están integrados varios plugins, entre ellos:

  • cordova-plugin-local-notification
  • cordova-plugin-badge
  • cordova-plugin-device
  • cordova-plugin-statusbar
  • cordova-plugin-splashscreen
  • cordova-plugin-ionic-webview
  • cordova-plugin-ionic-keyboard

Aunque la app corre actualmente con Capacitor, varios comportamientos nativos siguen dependiendo de plugins de Cordova, especialmente en Android.

Scripts disponibles

Desde package.json tengo estos scripts:

  • npm start: levanta el servidor de desarrollo
  • npm run build: compila la app web
  • npm run watch: build en modo observación
  • npm test: ejecuta pruebas
  • npm run lint: ejecuta análisis estático

Estado actual del proyecto

A la fecha de este README, el proyecto ya tiene:

  • autenticación funcional
  • CRUD de tareas
  • CRUD de categorías
  • recordatorios locales
  • preferencias por usuario
  • perfil editable
  • integración con Firebase
  • compilación Android release firmada

También ya quedó ajustado el build Android para trabajar con JDK 17, porque parte de la configuración base generada exigía Java 21 y eso impedía compilar en este entorno.

Cosas a tener en cuenta

  • El proyecto tiene mezcla de artefactos Cordova y Capacitor
  • iOS no se puede generar desde Windows; para .ipa se necesita macOS + Xcode
  • El release Android ya está preparado para firmarse localmente
  • Hay integración con Remote Config, así que ciertos cambios de comportamiento pueden venir desde Firebase y no necesariamente del código local

Decisiones de implementación

Algunas decisiones que tomé en este proyecto:

  • usar casos de uso para que la UI no dependa directamente de servicios concretos
  • separar modelos de dominio de la infraestructura
  • persistir datos de negocio localmente para mantener respuesta rápida
  • usar Firebase principalmente para autenticación y configuración remota
  • mantener la interfaz relativamente simple para priorizar funcionalidad

Posibles mejoras futuras

Si continúo este proyecto, lo siguiente que me interesa trabajar es:

  • sincronización en la nube de tareas y categorías
  • backend real para persistencia multi-dispositivo
  • push notifications remotas
  • panel administrativo
  • métricas de uso
  • pruebas más amplias en UI y servicios
  • build iOS formal en entorno Mac
  • publicación en tienda

Autor

Desarrollado por mí como base funcional para administración de tareas con enfoque móvil, autenticación, recordatorios y configuración extensible.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages