5da87e78aa1136a3516b2793545a541bfeaa4498
Aulas UNICABA
Un visor híbrido especializado y offline-first desarrollado para la visualización de la cartelera oficial de aulas, seguimiento automatizado de materias cursadas y generación de la Credencial Digital Universitaria para estudiantes de la Universidad de la Ciudad (UNICABA).
✨ Características
📋 Cartelera de Horarios
- Visualización completa de la cartelera oficial de aulas organizada por día de la semana (Lunes a Sábado).
- Modo offline-first: la cartelera se cachea localmente al primer acceso y se muestra instantáneamente aunque no haya conexión.
- Sincronización automática en background (Background Fetch) delegada al sistema operativo.
- Búsqueda fuzzy tolerante a errores tipográficos: busca por nombre de materia, código, aula o carrera.
- Filtro por vista: alternás entre "Favoritos" y "Cartelera completa" con un segmento.
- Acceso directo a clases virtuales (Zoom / Meet) desde el botón de cada materia.
- Función de compartir el horario de una materia por WhatsApp, Telegram, y cualquier app nativa.
⭐ Favoritos Inteligentes
- Marcá hasta 5 materias como favoritas para tenerlas a mano en su propia pestaña.
- Los favoritos se guardan automáticamente en un archivo
aulas_unicaba_datos.csven la carpeta "Documentos" del dispositivo, sobreviviendo a desinstalaciones y actualizaciones gracias a las políticas de almacenamiento de Android 11+. - Alertas locales automáticas: si una materia favorita cambia de aula o link de clase virtual, la app lo detecta en el próximo sincronismo y dispara una notificación push inmediata.
- Restauración manual de favoritos desde un respaldo CSV (Google Drive, iCloud, Descargas).
🎓 Banner "Próxima Clase" (Nuevo en v1.1.6)
- Al entrar a la pestaña Favoritos, aparece automáticamente un banner destacado con la materia favorita cuya clase es la más cercana en el tiempo (hoy o mañana).
- Chip de countdown en tiempo real que se actualiza cada minuto:
- 🔵 Azul → más de 2 horas
- 🟡 Amarillo → entre 30 minutos y 2 horas
- 🔴 Rojo + animación de pulso → menos de 30 minutos
- Muestra nombre de la materia, número de aula y día + hora de inicio.
🔔 Recordatorio Pre-Clase (Nuevo en v1.1.6)
- Cada vez que la app sincroniza la cartelera, programa automáticamente una notificación local 30 minutos antes del inicio de cada materia favorita del día.
- Usa IDs de notificación estables para evitar duplicados al sincronizar múltiples veces.
- Funciona completamente offline — no requiere servidor externo.
📅 Agenda de Hitos y Exámenes (Nuevo en v1.1.8)
- Añade exámenes (Parciales, Finales) y Trabajos Prácticos directamente desde el menú de una materia.
- Los hitos muestran insignias de tiempo (rojo cuando falta poco, secundario el resto del tiempo) en la tarjeta de la materia en Cartelera.
- La selección de fecha se hace mediante un popover ligero e intuitivo.
📍 Integración Nativa con Mapas (Mejora v1.1.9)
- El pie de página renovado con un rediseño UI tipo "botón flotante".
- Utiliza esquemas nativos (
geo:0,0?q=en Android ymaps://en iOS) que dejan al usuario elegir la app de navegación preferida (Waze, Google Maps, Apple Maps) al tocar la sede.
🪪 Credencial Digital Universitaria
- Inicio de sesión directo al Campus Virtual (Moodle) con DNI y clave.
- Sin intermediarios: las credenciales nunca pasan por ningún servidor tercero. El flujo HTTP se delega al motor nativo del SO mediante
CapacitorHttp, evitando bloqueos CORS. - Descarga y renderiza el PDF de la credencial (código QR) como imagen nativa usando
pdfjs-dist. - La imagen queda cacheada localmente para usarla offline sin volver a loguearse.
- El brillo de la pantalla aumenta automáticamente al mostrar el QR para facilitar su lectura.
- Login completamente opcional — la cartelera funciona sin necesidad de cuenta.
🛡️ Privacidad y Seguridad
- No se recopilan nombres, contraseñas ni correos.
- No hay publicidad, telemetría ni analytics de terceros.
- Todo el procesamiento ocurre en la memoria del teléfono.
🛠️ Información Técnica y Frameworks
| Componente | Tecnología |
|---|---|
| Base Frontend | Angular 20.3.x |
| UI Components | Ionic Framework v8 |
| Puente Nativo | Capacitor v8 |
| Renderizado PDF | pdfjs-dist |
Plugins de Capacitor utilizados
| Plugin | Uso |
|---|---|
@capacitor/filesystem |
Escritura y lectura del CSV de respaldo en "Documentos" |
@capawesome/capacitor-file-picker |
Importación manual de CSV desde el explorador de archivos |
@capacitor/local-notifications |
Avisos de cambio de aula y recordatorios pre-clase |
@capacitor/preferences |
Caché rápida de horarios y credencial |
@transistorsoft/capacitor-background-fetch |
Sincronización silenciosa en background |
@capacitor-community/screen-brightness |
Máximo brillo al mostrar la credencial QR |
@capacitor/haptics |
Feedback háptico en acciones clave |
@capacitor/share |
Compartir horarios por WhatsApp, Telegram, etc. |
@capacitor/network |
Detección de estado de conexión |
@capacitor/clipboard |
Acceso al portapapeles del sistema |
📱 Compatibilidad Multiplataforma
Todo el código fuente (TypeScript, HTML y SCSS) y los plugins seleccionados son 100% compatibles con Android e iOS. La arquitectura garantiza comportamiento idéntico en ambas plataformas.
🤖 Despliegue en Android
Requisito previo: Android Studio instalado, Node.js y NPM.
# 1. Instalar dependencias
npm install
# 2. Compilación del bundle web
npm run build
# 3. Sincronización con puentes nativos
npx cap sync android
# 4. Abrir en Android Studio para firmar APK o ejecutar por ADB
npx cap open android
🍏 Despliegue en iOS (iPhone / iPad)
Requisito previo: macOS reciente, Xcode, Node.js y CocoaPods (sudo gem install cocoapods).
# 1-2. Instalación y compilación web
npm install
npm run build
# 3. Agregar plataforma iOS (solo la primera vez)
npx cap add ios
# 4. Sincronizar plugins y actualizar Pods
npx cap sync ios
# 5. Abrir en Xcode
npx cap open ios
Nota para Xcode: Habilitar permisos explícitos para Local Notifications y Background Fetch en la pestaña Signing & Capabilities de Xcode.
🔒 Privacidad y Flujo Cero Intermediarios (Zero-Trust)
- Credenciales en Moodle Bypass: La app extrae el PDF de credencial logueándose directamente mediante
CapacitorHttp, delegando el flujo HTTP al motor nativo del OS. Nunca triangula el DNI a través de un backend tercero. - Resiliencia Anti-Wipes: Las agresivas políticas Storage Scoped de Android 11+ pueden borrar bases de datos SQLite y Preferences al desinstalar. La app mitiga esto exportando automáticamente los favoritos a
aulas_unicaba_datos.csven el gestor público de archivos ("Documentos").
Languages
TypeScript
63.9%
HTML
20.4%
SCSS
14.4%
JavaScript
0.7%
Java
0.6%