Fase 4 · 8 módulos con datos reales

Datos de Eurostat,
en cada pantalla.

Un cliente móvil y de escritorio de código abierto para la API pública de Eurostat. Ocho módulos temáticos — economía, población, medio ambiente, comercio, transporte, turismo, social, ciencia — sobre una única base de código Kotlin Multiplatform.

🇪🇺Cliente de código abierto independiente de terceros. No está afiliado a Eurostat ni a la Comisión Europea.

Vista general de los ocho módulos de la app EU Stats
18
datasets de Eurostat
8
módulos temáticos
444
tests unitarios pasando
AGPL-3.0
licencia de código abierto
Qué hace

Datos europeos públicos, tratados como un producto de primera clase.

Interfaz editorial y discreta. Caché stale-while-revalidate. Llamadas API reales, sin mocks. Diseñado para ciudadanos, periodistas y estudiantes que quieren explorar estadísticas europeas sin depender de ningún proveedor concreto.

Datos de API pública real

Los ocho módulos muestran datos en vivo de la API oficial de difusión de Eurostat — 18 datasets en total. Sin mocks predefinidos; sin bases de datos de demostración.

Caché stale-while-revalidate

Caché SQLDelight con TTL de 12 horas. Los datos en caché se muestran al instante; la actualización de red ocurre en segundo plano con un banner discreto; el modo sin conexión nunca deja la pantalla en blanco.

Ocho módulos temáticos

Economía, Población, Medio ambiente, Comercio, Transporte, Turismo, Social, Ciencia. Cada uno gestiona su propio dataset, su selector y una gráfica característica adaptada a la forma de los datos.

Gráficas sobre Compose Canvas puro

Ocho tipos de gráfica — líneas, barras apiladas, pirámide, mapa de calor, barras divergentes, radar, small-multiples, multilínea destacado — dibujados sobre un Canvas de Compose sin dependencias de renderizado de terceros.

Multiplataforma desde el primer día

Teléfono y tablet Android, iPhone e iPad, y un .jar Compose Desktop autónomo para macOS, Linux y Windows — todo desde una única base de código Kotlin compartida.

Selector de año en cada pantalla

Recién incorporado: elige cualquier año histórico y el titular con las estadísticas se actualiza al instante, sin ninguna petición de red. La gráfica conserva la serie completa; el año solo actualiza los valores en primer plano.

Ocho módulos

Abre una pestaña. Elige un país. Explora los años.

Cada módulo tiene su propio dataset, su selector y una gráfica característica adaptada a la forma de los datos. Las descripciones se toman directamente del README del proyecto.

Módulo Población — arrastra el control de año para transformar la pirámide

Población

demo_pjangroup · 18 cohortes · H/M/T

Una pirámide demográfica con 18 cohortes de edad (bandas quinquenales, de Y_LT5 a Y_GE85). El titular muestra la población total con la variación interanual. Un control segmentado de tres opciones (Total / Hombres / Mujeres) atenúa el lado opuesto de la pirámide al seleccionar un sexo. Un control deslizante recorre los años disponibles; una fila de chips de países cambia el país activo sin hacer nuevas peticiones.

gráfica de pirámide control de año segmentado H/M/T
Módulo Economía — PIB, inflación HICP y déficit

Economía

nama_10_gdp · prc_hicp_aind · gov_10dd_edpt1

Tres indicadores macroeconómicos — PIB a precios corrientes (miles de millones de EUR), índice de inflación HICP (2015 = 100) y capacidad/necesidad de financiación de las administraciones públicas en % del PIB — mostrados como gráfica de líneas multipaís. Un control segmentado selecciona la métrica activa; las dos métricas inactivas permanecen visibles como fichas de estadísticas secundarias atenuadas. Un control deslizante de doble manilla recorta el rango temporal de la gráfica; un menú desplegable independiente elige el año para el titular.

gráfica multilínea métrica segmentada control de doble manilla
Módulo Medio ambiente — GHG, energía, índice climático SDG

Medio ambiente

env_air_gge · nrg_bal_c · sdg_13_10

Tres datasets climáticos seleccionables mediante un menú desplegable: emisiones de gases de efecto invernadero en Mt CO₂-eq, consumo final de energía en ktoe y el índice climático SDG 13 con base 1990 = 100. Cuando están activos GHG o Energía, una fila de chips filtra por sector (TOTAL / TRANSPORTE / INDUSTRIA). La gráfica principal es una línea que compara el país activo con un país de referencia; dos fichas de estadísticas muestran las otras dos métricas para el mismo año.

menú de métrica chips de sector línea comparativa
Módulo Comercio — barras divergentes para exportaciones, importaciones, saldo

Comercio

ext_lt_intratrd

Flujos comerciales de bienes intra-UE — exportaciones, importaciones y saldo comercial en miles de millones de EUR. La gráfica principal es de barras divergentes que cubre los ocho años más recientes, con las exportaciones a la derecha y las importaciones a la izquierda. Tres pestañas subrayadas (Exportaciones / Importaciones / Saldo) destacan la dirección relevante. Dos fichas de estadísticas compactas muestran las cifras del país seleccionado para el año elegido.

barras divergentes pestañas subrayadas menú de año
Módulo Transporte — small multiples de pasajeros por carretera y aéreos

Transporte

road_pa_buscoa · avia_paoc

Volúmenes de pasajeros por carretera y aéreos presentados como gráficas de líneas small-multiple en paralelo. Los datos de carretera (miles de millones de pasajeros) y aéreos (millones de pasajeros) tienen escala independiente por panel. Un toggle en pastilla (CARRETERA / AIRE / TODO) controla qué paneles son visibles. Un interruptor de escala logarítmica comprime el eje para países con magnitudes muy distintas. Tres fichas de estadísticas resumen carretera, aire y una ficha "mar: n/d" que explica honestamente la exclusión del dataset basado en puertos.

small multiples toggle en pastilla escala logarítmica
Módulo Turismo — barras apiladas de pernoctaciones y mapa de calor de estacionalidad

Turismo

tour_occ_ninat · tour_occ_nim

Pernoctaciones en alojamientos turísticos — nacionales, extranjeras y totales — representadas como gráfica de barras apiladas para los nueve años más recientes. Una fila de chips controla qué métrica guía el valor principal. Debajo de las barras apiladas, un mapa de calor de estacionalidad mensual (celdas = mes × año) muestra la distribución de pernoctaciones a lo largo del calendario.

barras apiladas fila de chips mapa de calor estacional
Módulo Social — las fichas KPI dirigen una gráfica de líneas destacada

Social

ilc_li02 · ilc_peps01 · hlth_silc_01

Tres indicadores de bienestar en porcentaje extraídos de las encuestas EU-SILC: tasa de riesgo de pobreza, tasa de riesgo de pobreza o exclusión social y proporción de población que declara una salud autopercibida muy buena. Los tres se representan juntos en una gráfica multilínea destacada; tocar una ficha KPI desplaza el énfasis a esa serie y actualiza el valor principal.

multilínea destacado selector de ficha KPI control de año
Módulo Ciencia — gráfica radar de I+D, uso de internet y educación terciaria

Ciencia

rd_e_gerdtot · isoc_ci_ifp_iu · edat_lfse_03

Tres indicadores de innovación — gasto en I&D como % del PIB, tasa de uso de internet y nivel de educación terciaria entre 25–64 años — mostrados simultáneamente en una gráfica radar. El radar superpone el país activo a un país de referencia (con preferencia por DE, luego FR, luego EU27). Tres sparklines muestran siempre la tendencia completa. No hay selector de métrica; el radar presenta los tres ejes a la vez.

gráfica radar superposición de referencia tres sparklines
Bajo el capó

Decisiones conservadoras y probadas — a propósito.

Clean Architecture distribuida en 17 módulos Gradle. Cada capa tiene un contrato sealed. Sin el operador !! en ningún sitio; sin gráficas de terceros; sin fugas de dispatcher.

Arquitectura

  • Clean Architecture multimodular — datadomainui
  • Contratos Result<T> · AppError · DispatcherProvider
  • Decompose para navegación, componentes y ciclo de vida
  • Koin para inyección de dependencias
  • Patrón de repositorio stale-while-revalidate

Datos

  • Ktor Client — engine Darwin en iOS, OkHttp en Android
  • kotlinx.serialization para JSON y blobs de caché
  • Esquemas SQLDelight con DAOs tipados
  • Parser JSON-stat 2.0 escrito a mano en core-jsonstat
  • Coroutines + Flow + StateFlow en toda la app

Interfaz

  • Compose Multiplatform — Android, iOS, Desktop
  • Tokens de diseño object Euro — colores, tipografía, espaciado, formas
  • ~25 composables reutilizables en core-ui
  • Ocho tipos de gráfica sobre Canvas Compose puro — sin Koalaplot
  • kotlin.test y Turbine para tests unitarios y de flujo
Tres factores de forma

Teléfono, tablet, escritorio — el mismo código Compose.

Un periodista en el escritorio, un estudiante en la tablet, un ciudadano en el móvil — los mismos datos, los mismos componentes, el mismo renderizado. Ya implementado a nivel de infraestructura.

Android
Android móvil · tablet
iOS
iPhone · iPad
macOS · Linux · Windows
Compose Desktop

Una única base de código Kotlin. Interfaz Compose Multiplatform. Componentes nativos en cada plataforma.

Roadmap

Transparentes sobre lo que está listo, lo que viene y lo que necesita financiación.

El proyecto está en la Fase 4: los ocho módulos muestran datos reales en Android. La Fase 5 completa la estructura — vista general, selector de país, ajustes — y la Fase 6 publica la primera versión.

Disponible hoy

Fase 4 · verificado
  • Ocho módulos temáticos conectados a datos reales de Eurostat
  • Caché stale-while-revalidate · el modo sin conexión sobrevive a un vuelo
  • Selector de año en cada módulo · el titular se actualiza sin nuevas peticiones
  • Ocho tipos de gráfica sobre Canvas Compose puro
  • APK Android compilado · .jar Compose Desktop funcionando en macOS/Linux/Windows
  • Publicado bajo AGPL-3.0

Próximo hito (M1)

Fase 5 · en curso
  • Pantalla de vista general — cuadrícula de acceso rápido
  • Selector de país — lista con búsqueda y toque en el mapa
  • Prueba de humo en iOS en simulador · verificar las ocho pestañas
  • Persistencia de ajustes · tema, país por defecto, idioma
  • Renderizado real de banderas · fuente Inter incluida

Objetivos de financiación (M2 · M3)

Fase 6 · candidato NLnet
  • Localización · traducciones al polaco y al ucraniano
  • Instaladores nativos · .dmg, .msi, .deb, Flatpak
  • Comparación multipaís · superposición o small-multiples
  • Búsqueda transversal · índice de indicadores de los ocho módulos
  • Diseños maestro-detalle para pantallas anchas, tablet y escritorio
Código abierto · interés público

Desarrollado de forma independiente. Publicado bajo AGPL-3.0.

Actualmente en proceso de evaluación para una candidatura a la convocatoria abierta de NLnet, para financiar los próximos hitos. Ciudadanos, periodistas y estudiantes deberían poder explorar los datos públicos europeos sin depender de ningún proveedor concreto — en cualquier dispositivo que ya tengan.

Leer la roadmap