TransitOS
Un cliente de código abierto para transporte público en Android, empezando con Metrovalencia (FGV). Llegadas en vivo, planificador de viajes y un mapa de red interactivo. Sin anuncios, sin rastreo, y una arquitectura de proveedores para añadir cualquier operador sin tocar la app.
TransitOS es una app de código abierto para transporte público en Valencia. Cubre Metrovalencia (FGV) de extremo a extremo: llegadas en vivo, planificación de viajes y un mapa de red interactivo. Sin anuncios, sin rastreo, sin analíticas.
Qué cubre
- Llegadas en vivo por estación y línea, mediante un
AppResulttipado para que la UI distinga carga, datos y error. - Planificador de viajes con modos de salida o llegada y un margen de transbordo configurable.
- Mapa de red sobre tiles de OpenStreetMap: todas las estaciones, los colores oficiales de las líneas y, al tocar una estación, sus líneas y próximas llegadas.
- Rutas guardadas con etiquetas personalizadas (“Casa”, “Trabajo”), en local con DataStore.
- Temas e i18n: sistema / claro / oscuro / AMOLED negro puro, además de inglés, español y valenciano.
El modelo de proveedores
Cada operador expone los datos de forma distinta: endpoints, esquemas y rarezas diferentes. La trampa es dejar que un operador se filtre al resto de la app, así que la capa de dominio define un único contrato TransitRepository y cada operador vive en su propio módulo.
Presentación (app, feature-*, core-ui, core-design)
| depende de
v
Dominio (core) -> modelos, contratos de repositorio, AppResult
| implementado por
v
Datos (provider-*, core-network, core-data) -> impls de repositorio, Ktor, DataStore
:provider-metrovalencia implementa el contrato contra los datos de FGV. Añadir un operador nuevo significa añadir un módulo: crea :provider-emt, implementa TransitRepository y registra su módulo de Koin en :app. La UI, el planificador y el mapa no cambian. Esa separación es lo que hace realista el plan multi-ciudad en lugar de una reconstrucción cada vez.
Stack
- Kotlin con Coroutines y Flow, Clean Architecture
- Jetpack Compose (gestionado por BOM), Material 3, color dinámico
- Ktor para red, Koin para inyección de dependencias, DataStore para preferencias
- osmdroid para el mapa de red, Gradle Version Catalog para las versiones
Estado
En producción. En Google Play, con APKs firmadas en la página de releases (última v1.0.3). Metrovalencia está cubierta por completo. Código abierto bajo AGPL-3.0; sin afiliación ni respaldo de Metrovalencia o FGV.
Código: github.com/IgnacioLD/TransitOS.
Escrito con asistencia de IA. Pienso reescribirlo a mano.