Files
aulas-unicaba-mvp/README.md
T

7.0 KiB

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.csv en 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 y maps:// 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)

  1. 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.
  2. 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.csv en el gestor público de archivos ("Documentos").