Skip to content
Roger08GPublic

About

Seguimiento familiar sencillo, privado y pensado para Android.

Resources

Security policy

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Logo de Lumo

Lumo

Seguimiento familiar sencillo, privado y pensado para Android.

CI Versión Estrellas Forks Rust React Android Licencia

Lumo es una aplicación de seguimiento familiar con tres experiencias: controlador, controlado y debug local. El diseño está pensado para que una persona mayor pueda consultar una ubicación, recibir avisos de llegada y pedir ayuda sin navegar por menús complejos.

Vista previa de Lumo

Lumo no sustituye a los servicios de emergencia ni a un sistema médico. La disponibilidad de ubicación en segundo plano depende de Android, de los permisos concedidos, de la batería y de las políticas de ahorro de energía del fabricante.

Funciones

  • Emparejamiento mediante QR de un solo uso y PIN de seis cifras.
  • Reemplazo autorizado del teléfono controlado mediante QR, conservando su organización.
  • Varios controladores para un controlado; los permisos se validan en el servidor.
  • Ubicación en segundo plano, cola cifrada offline y reintentos acotados.
  • Lugares habituales con geocercas, dirección, colores e iconos configurables.
  • Avisos de llegada, tiempo de trayecto, última actividad y solicitud de ayuda.
  • Alarma de ayuda en el controlador, con deslizador para detenerla, llamada y localización.
  • Caché local cifrada para mostrar la última información disponible sin inventar datos nuevos.
  • Modo debug aislado para probar ubicaciones, permisos, batería y notificaciones sin tocar un grupo remoto.

Arquitectura

flowchart LR
    subgraph ANDROID["APK Lumo · Android"]
        UI["React + Emotion<br/>Controlador · Controlado · Debug<br/>mobile/"]
        TAURI["Tauri + comandos Rust<br/>Autorización y estado<br/>mobile/src-tauri/"]
        NATIVE["Plugin Kotlin<br/>Ubicación · Geocercas · Notificaciones · Keystore<br/>plugins/tauri-plugin-lumo-mobile/"]

        UI <-->|"comandos y eventos"| TAURI
        TAURI <-->|"puente móvil"| NATIVE
    end

    subgraph RUST["Workspace Rust compartido"]
        CORE["Dominio y reglas<br/>PIN · Roles · Geocercas · Eventos<br/>crates/lumo-core/"]
        PROTOCOL["Protocolo v2<br/>Credenciales · Firmas · Sobres cifrados<br/>crates/lumo-protocol/"]
        RUNTIME["Runtime del cliente<br/>Caché cifrada · HTTPS · Emparejamiento<br/>crates/lumo-runtime/"]

        CORE --> PROTOCOL
        CORE --> RUNTIME
        PROTOCOL --> RUNTIME
    end

    subgraph SERVER["VPS · Docker"]
        API["API Axum<br/>Autorización · Cuotas · Replay protection<br/>crates/lumo-api/"]
        DB[("SQLite<br/>Estado cifrado y retención limitada")]

        API <--> DB
    end

    TAURI --> CORE
    TAURI --> PROTOCOL
    TAURI --> RUNTIME
    RUNTIME <-->|"HTTPS + mensajes cifrados"| API
    API --> CORE
    API --> PROTOCOL

    classDef mobile fill:#f3edff,stroke:#7650b3,color:#2f2938,stroke-width:1.5px;
    classDef rust fill:#fff4e8,stroke:#c8752d,color:#382d25,stroke-width:1.5px;
    classDef server fill:#eaf7f1,stroke:#3d8a70,color:#24362f,stroke-width:1.5px;
    class UI,TAURI,NATIVE mobile;
    class CORE,PROTOCOL,RUNTIME rust;
    class API,DB server;
Loading

El frontend sólo presenta snapshots. La autoridad para grupos, roles, PIN, invitaciones y estado remoto está en Rust y en la API. Un dispositivo controlado nunca recibe la clave del estado canónico del controlador: envía operaciones tipadas y cifradas.

Consulta las decisiones de arquitectura y recuperación y la auditoría de v2.0.0 para conocer las garantías, pruebas y límites de esta versión.

Seguridad y privacidad

  • HTTPS obligatorio; se rechaza tráfico cleartext en Android.
  • Credenciales aleatorias por dispositivo, revocables y almacenadas cifradas.
  • PIN protegido con Argon2id y bloqueo por dispositivo, no como secreto del QR.
  • QR sin nombres, teléfonos ni PIN; las invitaciones caducan y sólo se consumen una vez.
  • Estado del controlador cifrado con XChaCha20-Poly1305 y claves de miembro separadas.
  • La clave maestra del servidor sólo vive en el VPS y nunca se compila en el APK.
  • Backups Android desactivados para datos de seguimiento y credenciales.
  • SQLite está pensado para una instancia del servicio; el proxy y el firewall deben limitar el acceso al puerto interno.

La API conserva el último estado cifrado y aplica límites de tamaño, cuota, expiración, CAS, ETag y protección contra replay. La retención de actividad de 24 horas es lógica de la aplicación; no es un sistema de archivado histórico ilimitado.

Requisitos de desarrollo

  • Windows, Linux o macOS.
  • Rust estable compatible con rust-toolchain.toml.
  • Bun 1.3.14 o posterior.
  • JDK 17, Android SDK/NDK y Gradle para generar APK.
  • Docker Engine y Docker Compose 2.24.4 o posterior sólo para la API.

Ejecutar localmente

Frontend:

cd mobile
bun install --frozen-lockfile
bun run dev

Backend local y binarios de prueba:

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\verify-local-backend.ps1
./scripts/verify-local-backend.sh

El gate comprueba formato, compilación, Clippy sin avisos, pruebas, builds y los self-test de lumo-controller, lumo-controlled y lumo-debug usando transporte local. No necesita una API pública.

Configuración remota

En el cliente sólo se declara el origen HTTPS de la API:

LUMO_RUNTIME_MODE=remote
LUMO_API_URL=https://api.example.com

La clave maestra, certificados y límites del servidor se configuran únicamente en .env del VPS. Consulta docs/backend-local.md para el contrato y docs/deploy.md para Docker, Nginx, Cloudflare, backups y rollback. No subas .env, certificados ni keystores al repositorio.

Android y release

Para desarrollo:

cd mobile
bun run tauri android dev

La release pública se publica en GitHub Releases únicamente como código fuente verificable. No se distribuyen APK precompilados desde este repositorio para evitar que una compilación pueda incorporar un endpoint privado o una configuración local.

Si generas tu propio APK, declara sólo LUMO_RUNTIME_MODE=remote y el origen HTTPS público en LUMO_API_URL. Nunca proporciones al proceso de compilación la clave maestra del servidor, tokens de dispositivo, PIN, certificados, keystores ni el archivo .env de producción completo.

CI y dependencias

GitHub Actions ejecuta formato, ESLint, tipos, pruebas y build del frontend; el gate completo de Rust; compilación, pruebas y lint Android; pruebas del contenedor con TLS; auditoría de dependencias y detección de secretos. Los APK temporales de CI no se publican como artefactos. Dependabot propone actualizaciones semanalmente; los saltos mayores requieren revisar sus cambios de API y validar los jobs.

La corrección local de GLib conserva la API que necesita GTK3 y verifica su procedencia y regresiones en modo optimizado. Los avisos de mantenimiento de dependencias transitivas se detallan en la auditoría; no se silencian con una lista de excepciones.

Licencia

Lumo se distribuye bajo los términos de LICENSE.

About

Seguimiento familiar sencillo, privado y pensado para Android.

Resources

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages