From e7b4ace6cefaa4bbc00725626cbfcbcac2b3b5f5 Mon Sep 17 00:00:00 2001 From: Javier Date: Sat, 4 Jul 2026 16:51:25 +0200 Subject: [PATCH] Add homehud files --- PLAN_MOBILE.md | 109 +++++++++++++++++++++++++++++++++++++++++ construprogress | 1 + construprogress_mobile | 1 + index.html | 21 ++++++++ 4 files changed, 132 insertions(+) create mode 100644 PLAN_MOBILE.md create mode 160000 construprogress create mode 160000 construprogress_mobile create mode 100644 index.html diff --git a/PLAN_MOBILE.md b/PLAN_MOBILE.md new file mode 100644 index 0000000..710ee7a --- /dev/null +++ b/PLAN_MOBILE.md @@ -0,0 +1,109 @@ +# Plan para la aplicación móvil de ConstruProgress + +## Objetivo +Crear una aplicación móvil (Android/iOS, teléfonos y tablets) para realizar inspecciones de campo y sincronizar datos offline con el servidor Laravel de ConstruProgress. + +## Tecnologías recomendadas +- Framework: Flutter (una sola codebase) +- Estado: GetX (o Provider/Bloc) +- Almacenamiento local: Sqflite (IndexedDB equivalente) para cola de acciones y datos de inspección +- Comunicación API: Dio con interceptors de autenticación y reintentos +- Autenticación: Flutter Secure Storage para token (Sanctum/JWT) +- Media: Image Picker y Video Player para captura de fotos/videos +- Detección de red: Connectivity Plus +- Sincronización en background: Workmanager (Android) / Background Fetch (iOS) para intentar enviar cola cuando haya conexión +- UI responsive: LayoutBuilder, MediaQuery, Flutter ScreenUtil para adaptar a teléfonos y tablets +- Indicadores de conexión: Banner o ícono que muestre 🟢 Online, 🟡 Pendientes (X), 🔴 Offline, con botón “Sincronizar ahora” + +## Estructura de carpetas (sugerida) +lib/ + main.dart + config.dart # Endpoints y configuración + bindings/ # GetX bindings + controllers/ # GetX controllers (AuthController, ProjectController, InspectionController, SyncController) + models/ # Modelos de datos (Project, Phase, Feature, Inspection, PendingAction) + services/ # Servicios API (ApiService, AuthService, SyncService) + ui/ # Pantallas y widgets reutilizables + auth/ + projects/ + inspections/ + components/ + utils/ # Helpers, extensiones + assets/ # Íconos, imágenes + +## Fases de desarrollo + +1. **Configuración inicial y autenticación** + - Crear proyecto Flutter con flutter create + - Añadir dependencias esenciales (get, dio, flutter_secure_storage, connectivity_plus, sqflite, workmanager, image_picker) + - Configurar .gitignore y README + - Implementar pantalla de login que obtenga token desde `/api/sanctum/token` (o similar) y lo guarde de forma segura + - Manejo de errores de autenticación y redirección a home + +2. **Navegación y layout base** + - Implementar BottomNavigationBar o NavigationRail (adaptativo) con secciones: Proyectos, Inspecciones, Perfil + - Diseño responsive: usar LayoutBuilder para cambiar entre NavigationBar (teléfono) y NavigationRail (tablet) + - AppBar con título y indicador de conexión (🟢/🟡/🔴) y número de acciones pendientes + +3. **Módulo de proyectos** + - Pantalla de lista de proyectos (con filtro por estado y búsqueda) + - Tarjeta de proyecto mostrando nombre, estado, progreso global, última actualización + - Navegación al detalle del proyecto al tocar una tarjeta + - Detalle del proyecto: lista de fases con barra de progreso, botón para ver mapa (opcional, usar webview o lanzar mapa externo) + - Pull-to-refresh para obtener proyectos actualizados desde API (`GET /api/projects`) + +4. **Módulo de inspecciones** + - Lista de inspecciones asociadas a un proyecto/fase (o global) + - Botón “+ Nueva inspección” que abre formulario + - Formulario de inspección basado en templates (obtener templates desde `/api/templates/{project}` o `/api/templates?phase_id=X`) + - Campos dinámicos según tipo (texto, número, selección, fecha, firma, foto) + - Captura de foto usando image_picker, opción para tomar foto o elegir de galería + - Guardar borrador localmente (sqflite) mientras se llena el formulario + - Botón “Guardar borrador” y “Finalizar inspección” + - Al finalizar, validar campos requeridos y enviar a backend (`POST /api/inspections`) o encolar para sincronización offline + +5. **Sincronización offline** + - Definir modelo de acción pendiente (PendingAction) con campos: id, type, payload, timestamp, retries, synced + - Servicio de cola que guarda acciones en base local cuando falta conexión + - Al detectar cambio a online (connectivity_plus) o manualmente (botón “Sincronizar ahora”), procesar cola: + * Enviar acciones en lote a `/offline/sync` (endpoint existente) + * Procesar respuesta por acción, marcar como sincronizada o incrementar reintentos + * Manejar errores de servidor (reintentar con backoff exponencial) + - Notificaciones locales (opcional) cuando la sincronización completa o falla + - Indicador UI: ícono con contador de acciones pendientes, tooltip con detalle + +6. **Mapa y visualización de features (opcional MVP)** + - Integrar paquete google_maps_flutter o flutter_leaflet para mostrar mapa + - Obtener features (GeoJSON) desde `/api/projects/{id}/features` o similar + - Permitir tocar un feature para ver detalles y asociar inspección rápida + - Modo offline: mostrar features cacheados (descargados previamente cuando había conexión) + +7. **Perfil y ajustes** + - Pantalla de perfil mostrando nombre, correo, rol + - Opción para cerrar sesión (eliminar token seguro) + - Ajustes: frecuencia de sincronización background, solo sync en Wi‑Fi, tema claro/oscuro + +8. **Pruebas y calidad** + - Pruebas unitarias para modelos y servicios (mockito) + - Pruebas de widget para pantallas críticas (login, formulario de inspección) + - Pruebas de integración para flujos completos (login → inspección → sincronización) + - Análisis estático con flutter_lints + - Generar APK y AAB para Android, IPA para iOS (usando flutter build) + +9. **Despliegue** + - Crear cuentas en Google Play Console y App Store Connect + - Configurar firmado de aplicaciones (keystore, certificados) + - Automatizar builds con fastlane (opcional) + - Subir versiones de prueba (internal test, TestFlight) y producción + - Monitorear crashes con Firebase Crashlytics (opcional) + +## Próximos pasos inmediatos +1. Clonar el repositorio de ConstruProgress backend (ya hecho) y revisar los endpoints disponibles (especialmente `/offline/sync`, rutas de inspección, templates, autenticación). +2. Definir contratos exactos de las APIs (request/response) y documentarlos en un archivo `API.md` dentro del repo móvil o en el wiki. +3. Crear la rama `dev` en el repositorio móvil y comenzar con la fase 1 (autenticación y layout base). +4. Sincronizar frecuentemente con el backend para asegurar compatibilidad. + +## Notas adicionales +- Usar heroicon y blade-icons para iconos en lugar de emojis o símbolos unicode directos (preferencia del usuario). +- Mantener el código limpio y comentado; seguir la guía de estilo de Flutter. +- Registrar decisiones importantes en este archivo PLAN_MOBILE.md o en el README. diff --git a/construprogress b/construprogress new file mode 160000 index 0000000..c832d4f --- /dev/null +++ b/construprogress @@ -0,0 +1 @@ +Subproject commit c832d4f3da96fff065fd7945cc6f099a96b2bf3d diff --git a/construprogress_mobile b/construprogress_mobile new file mode 160000 index 0000000..6bd1d43 --- /dev/null +++ b/construprogress_mobile @@ -0,0 +1 @@ +Subproject commit 6bd1d4365a51103f3d7749bb55c0551b7ff868d8 diff --git a/index.html b/index.html new file mode 100644 index 0000000..b126154 --- /dev/null +++ b/index.html @@ -0,0 +1,21 @@ + + + + homehud + + + +

homehud repository

+

Welcome to the homehud Git repository served via Nginx.

+

Contents

+ +

Last updated:

+ +