Expediente 06 · Seguridad vial
MANEJO COMENTADO
Una plataforma offline-first que convierte cada curso de manejo comentado en evidencia auditable: audio, GPS, fotografías, puntaje e informes.
- Kotlin
- Jetpack Compose
- Room
- WorkManager
- SvelteKit
- NestJS
El reto
Un curso de manejo comentado ocurre dentro de un vehículo, a menudo con señal inestable, y mezcla seguridad vial con identidad, voz, ubicación, fotografías, firmas y calificación. El reto no era producir otra constancia, sino convertir una sesión irrepetible en evidencia defendible ante una auditoría sin distraer al instructor ni exponer datos sensibles.

El enfoque
Diseñé la experiencia Android como una máquina de estados offline-first respaldada por Room, WorkManager y almacenamiento protegido en el dispositivo. Una API NestJS contract-first recibe evidencia inmutable, recalcula el puntaje y envía las discrepancias a revisión humana; SvelteKit reúne audio, GPS, fotografías y eventos para revisar, emitir y verificar públicamente con alcance limitado.
Decisiones clave
- Modelar la sesión como una máquina de estados explícita y conservar la evidencia original separada de cada conclusión derivada.
- Capturar primero en Room, cifrar lo sensible con Android Keystore y sincronizar de forma idempotente por huella de contenido.
- Dar poderes distintos al enlace de evidencia y al QR impreso: uno abre el detalle autorizado; el otro solo verifica autenticidad.
Arquitectura técnica
Arquitectura full stack diseñada y construida de punta a punta por mí.
- 01 Aplicación de campo Kotlin · Compose · Room
Una máquina de estados recuperable captura la sesión completa sin conectividad.
- 02 Contrato y dominio OpenAPI · NestJS
Un contrato une las superficies; el servidor aplica roles y recalcula resultados.
- 03 Custodia de evidencia PostgreSQL · Hash-addressed files
Cargas originales, archivos inmutables, huellas y reglas versionadas conservan la auditoría.
- 04 Revisión y entrega SvelteKit · Mapbox · WaveSurfer
El portal alinea recorrido, sonido y eventos antes de emitir un informe revocable.
Módulos
De qué está hecho el producto, tal como lo dividen sus propias pantallas.
- 01 Agenda de campo
Sesiones asignadas, paquetes offline y altas provisionales cuando la operación cambia.
- 02 Autorización y preoperacional
Autorización versionada, identidad, firmas y decisión de aptitud del vehículo.
- 03 Sesión guiada en vía
Tres fases con audio continuo, GPS, fotografías, peligros y calificación.
- 04 Evidencia offline
Captura local-first, almacenamiento cifrado y sincronización reanudable.
- 05 Sala de revisión
Una línea de tiempo que sincroniza audio, recorrido, fotos, eventos y cambios de nota.
- 06 Emisión y verificación
Informes revocables y un QR limitado que verifica la autenticidad del papel.
- 07 Portales de cliente y administración
Programación, cuentas, plantillas y acceso a resultados limitado por empresa.
Antes → después
- Antes
Una constancia firmada con poca evidencia detrás.
DespuésAudio, GPS, fotos y decisiones ligados a una sesión trazable.
- Antes
Trabajo de campo bloqueado cuando desaparece la señal.
DespuésLa sesión completa funciona offline y sincroniza después.
- Antes
Una nota de campo aceptada como verdad final.
DespuésRecálculo independiente en servidor y resolución humana de discrepancias.
Tecnologías
- Kotlin
- Jetpack Compose
- Room
- WorkManager
- SvelteKit
- NestJS
- PostgreSQL
- OpenAPI
El resto de la caja
- Hilt
- CameraX
- MediaRecorder
- Fused Location
- Android Keystore
- Retrofit
- Prisma
- WebSockets
- Mapbox
- WaveSurfer
- QRCode
- Puppeteer
- Argon2
Marcas de Simple Icons; los conceptos sin marca están dibujados en casa.
Bitácora
sept 2026 → sept 2026 · 1 meses activos
- platform app · 112 commits sept 2026 → sept 2026
En el árbol
- 19 rutas
- 16 controladores de API
- 17 modelos de datos
- 11 migraciones
- 31 archivos de prueba
- 126 archivos fuente nativos
- 468 archivos versionados
Leído del historial Git local el 6 oct 2026. Solo agregados.
El resultado
La versión actual cubre el recorrido técnico desde la programación y la captura Android hasta la sincronización, la revisión web, la emisión revocable y la verificación pública de autenticidad. La foto del repositorio reúne 103 commits, 28 rutas y handlers web y 30 archivos de prueba entre la app nativa, la API y el portal, mientras el producto avanza en beta interna.
Código privado — este archivo comparte el razonamiento, no el fuente.
