El problema
Fui de senderismo a una zona sin señal y me di cuenta de que todas las apps de rutas que tenía instaladas eran inútiles sin conexión. Quería una app que funcionara completamente offline una vez descargada la ruta, incluyendo mapas, perfil de elevación y una forma de avisar que estaba bien.
Rol e impacto
- Proyecto individual, mobile.
- Totalmente funcional sin conectividad tras descargar la ruta una sola vez.
- Usada en 12 caminatas personales, incluidas 3 sin señal de celular en absoluto.
- Rastreo GPS en segundo plano eficiente, menos de 4% de batería por hora.
Decisiones técnicas y desafíos
Empaquetar tiles de mapa para cada ruta posible habría hecho la app enorme, pero descargarlos bajo demanda va en contra del propósito offline-first. Comparé pre-renderizar vector tiles por región en tiempo de build contra dejar que el usuario descargue un paquete de tiles acotado solo para la ruta elegida.
Opté por paquetes MBTiles bajo demanda acotados a un bounding box alrededor de la ruta seleccionada, ya que mantuvo la instalación base pequeña y el usuario solo paga el costo de almacenamiento de las rutas que realmente piensa caminar.
El rastreo GPS continuo de alta precisión es una de las formas más rápidas de agotar la batería en una caminata de varias horas. Evalué rastreo de alta precisión siempre activo contra una frecuencia de muestreo adaptativa según la velocidad de movimiento.
Elegí una frecuencia de muestreo adaptativa que amplía el intervalo de sondeo GPS cuando la velocidad es baja o el dispositivo está quieto, porque mantuvo el registro de la ruta preciso en los tramos en movimiento mientras reducía significativamente el consumo de batería en segundo plano durante las paradas.
Stack detallado
| Capa | Tecnología | Por qué |
|---|---|---|
| Mobile | React Native, Expo, MapLibre | Multiplataforma con renderizado de mapas nativo y tiles offline |
| Storage | SQLite, paquetes MBTiles en el dispositivo | Datos de rutas y mapas local-first sin depender de un servidor |
| Estado | Zustand | Store liviano para el estado de ruta, GPS y descargas |
Galería
Qué haría diferente
Agregaría un flujo de SOS real que funcione vía mensajería satelital en vez de solo un check-in local de "marcar como seguro". Ahora mismo, el check-in de seguridad solo sirve una vez que vuelves a tener señal, lo cual falla justo en el escenario que debería cubrir.