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.
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.
Angular 20Ionic 8TypeScriptFirebaseCapacitor- plugins de
Cordovapara varias capacidades nativas Gradlepara Android
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.
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.
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.
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.
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.
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.
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.
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:
FirebaseRemoteConfigServiceRemoteConfigUseCase
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 basesrc/app/core/application: casos de usosrc/app/core/infrastructure: servicios concretos e integracionessrc/app/presentation: páginas, guards y lógica de UIsrc/app/shared: componentes reutilizables, utilidades y modelos auxiliares
src/app/presentation/pages/auth: login y registrosrc/app/presentation/pages/tasks: listado de tareassrc/app/presentation/pages/categories: administración de categoríassrc/app/presentation/pages/profile: perfil y preferenciassrc/app/shared/components: formularios, filtros, cards y sheet de creaciónsrc/environments: configuración de entorno y Firebaseandroid: proyecto nativo Android actualplatforms/android: artefactos heredados / generados de Cordova
La app mezcla dos estrategias de persistencia:
Firebase Authenticationpara 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.
La navegación principal se divide así:
loginregistertabs/taskstabs/categoriestabs/profile
Las rutas protegidas usan un auth guard para impedir acceso si no hay sesión activa.
Node.jsnpmAngular CLIIonic CLIsi se quiere usar flujo Ionic
JDK 17Android StudioAndroid SDKGradle Wrapperya incluido en el proyecto
Primero instalo dependencias:
npm installLuego puedo levantar la versión web en desarrollo:
npm startO compilar la aplicación web:
npm run buildPara sincronizar los assets web hacia Android:
npx cap copy androidPara generar APK debug:
cd android
./gradlew assembleDebugEn Windows:
cd android
.\gradlew.bat assembleDebugPara generar APK release firmado:
cd android
.\gradlew.bat assembleReleaseLa salida queda en:
android/app/build/outputs/apk/debug/app-debug.apkandroid/app/build/outputs/apk/release/app-release.apk
Configuré el firmado de Android con:
android/keystore.propertiesandroid/app/manager-task-release.keystore
Esos archivos están ignorados por Git porque contienen información sensible.
La aplicación ya está conectada a un proyecto Firebase y usa configuración en:
src/environments/environment.tssrc/environments/environment.prod.tsandroid/app/google-services.json
Si se cambia de proyecto Firebase, hay que revisar:
apiKeyauthDomainprojectIdstorageBucketmessagingSenderIdappId
Además, para autenticación por correo, hay que verificar que el proveedor Email/Password esté habilitado en Firebase Console.
En el proyecto están integrados varios plugins, entre ellos:
cordova-plugin-local-notificationcordova-plugin-badgecordova-plugin-devicecordova-plugin-statusbarcordova-plugin-splashscreencordova-plugin-ionic-webviewcordova-plugin-ionic-keyboard
Aunque la app corre actualmente con Capacitor, varios comportamientos nativos siguen dependiendo de plugins de Cordova, especialmente en Android.
Desde package.json tengo estos scripts:
npm start: levanta el servidor de desarrollonpm run build: compila la app webnpm run watch: build en modo observaciónnpm test: ejecuta pruebasnpm run lint: ejecuta análisis estático
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.
- El proyecto tiene mezcla de artefactos
CordovayCapacitor - iOS no se puede generar desde Windows; para
.ipase necesitamacOS + 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
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
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
Desarrollado por mí como base funcional para administración de tareas con enfoque móvil, autenticación, recordatorios y configuración extensible.