Emilio Carrión
Cómo construí un gemelo digital de València (y por qué no sé si es arte o ingeniería)
Durante las Fallas construí València Respira: una instalación visual en tiempo real con once capas de datos vivos. Este artículo cuenta las decisiones técnicas y de diseño detrás de la pieza, y lo que aprendí construyendo algo que no encaja en ninguna categoría.
Llevo días queriendo escribir esto y no encontraba el ángulo. Porque no es un artículo sobre arquitectura de software. Ni sobre datos abiertos. Ni sobre arte digital. Es sobre las tres cosas a la vez, y no sé muy bien en qué orden ponerlas.
Voy a intentarlo de la forma más honesta que pueda: contando las decisiones que tomé y por qué.
Todo empezó con un dashboard de Fallas
La Nit del Foc de 2026. Estoy en casa, abro el portal de datos abiertos de València por curiosidad, y descubro que hay sensores acústicos midiendo el ruido en tiempo real, monumentos falleros geolocalizados, y tráfico en vivo. En unas horas monto un dashboard con Leaflet y Chart.js. Lo publico en LinkedIn, tiene buena tracción, y debería haberlo dejado ahí.
Pero me quedé enganchado.
Empecé a explorar qué más tenía el portal. Y lo que encontré me sorprendió: calidad del aire en tiempo real, 200.000 árboles geolocalizados, estaciones de Valenbisi, más de 1.100 paradas de bus, cauces de riego, la costa dibujada en OpenStreetMap. Y cuando cruzas eso con la API de Open-Meteo (viento, temperatura, meteorología) y con datos de comercios y equipamientos públicos de OpenStreetMap, tienes una imagen completa de una ciudad entera actualizada cada pocos minutos.
Y nadie estaba haciendo nada con ello. Al menos, nada que fuera más allá de un CSV.
Así que tomé una decisión que no sé muy bien cómo justificar racionalmente: decidí construir algo que no fuera útil. No un dashboard. No una herramienta de análisis. Algo que simplemente mostrase la ciudad como es, en tiempo real, y que fuera bonito de contemplar.
Por qué fondo oscuro (y por qué importa)
La primera decisión fue estética, y condicionó todo lo demás.
Un fondo oscuro hace que cualquier punto de luz destaque. Es la diferencia entre mirar una ciudad desde un avión de día (todo se mezcla) y mirarla de noche (cada farola, cada coche, cada ventana encendida es un punto de información). La metáfora de la pieza es exactamente esa: un retrato nocturno de València donde los datos son los puntos de luz.
Pero el fondo no es negro estático. Cambia con la hora real del día y la temperatura real. De madrugada es más oscuro. A mediodía, ligeramente más claro. Cuando hace frío, el tono se desplaza hacia azul profundo. Cuando hace calor, aparece un matiz cálido. Es un gradiente vertical de dos píxeles de ancho que se estira a pantalla completa y se recalcula cada minuto.
Y alguien dirá: "eso es un detalle que nadie nota." Exacto. Si lo notas, está mal hecho. La atmósfera tiene que sentirse, no verse.
Once capas y un orden que no es aleatorio
La pieza tiene once capas de datos. Pero no aparecen todas a la vez. Se revelan una a una, con un efecto de luz radial que se expande desde el centro de la pantalla. Y el orden está pensado.
Primero aparecen el agua y el mar. Es la geografía base. La piedra y el agua que definen dónde está València. Partículas de luz fluyen por los cauces de riego como si fueran agua real, y otras flotan sobre el Mediterráneo como reflejos de luna.
Cuatro segundos después aparece el tráfico. Es la primera capa "viva", la que le dice al espectador que esto no es un mapa estático. Pulsos cyan si fluye, ámbar si está denso, rojo si está congestionado. Cada pulso recorre el tramo de carretera real a una velocidad proporcional al estado del tráfico. Si hay congestión, se mueven despacio. Si fluye, van rápido.
Otros cuatro segundos y llegan las capas humanas: Valenbisi, EMT, comercios, equipamientos. Es el sistema nervioso de la ciudad. 5.000 bares y tiendas que parpadean a su propio ritmo (la hostelería brilla más de noche, las tiendas de día). Hospitales y colegios que pulsan lento, como un latido estable.
Y al final, los árboles. 200.000 puntos verdes con halo que aparecen sobre todo lo demás. La vida sobre la infraestructura.
Esa secuencia (piedra, movimiento, personas, naturaleza) no es decorativa. Es narrativa. Es la historia de cómo se construye una ciudad, contada en 16 segundos.
La respiración: datos convertidos en metáfora
Toda la pieza respira. Las manzanas catastrales se expanden y contraen con un ciclo cuya velocidad depende de la calidad real del aire en ese momento.
Cuando el aire está limpio, el ciclo es rápido y ligero (unos 3 segundos). Cuando hay contaminación, se vuelve lento y pesado (hasta 7 segundos). La amplitud también cambia: más contaminación, más expansión, como si la ciudad estuviera haciendo esfuerzo para respirar.
No es una decisión estética. Es diseño de información disfrazado de poesía. Cualquiera que mire la pieza durante un minuto puede sentir si el aire está limpio o no, sin leer un número ni mirar una gráfica. Y si la abres a las 8 de la mañana con el tráfico de hora punta y luego a las 3 de la madrugada, la diferencia es palpable.
Dicho esto, no voy a fingir que esto se me ocurrió de primeras. La primera versión tenía la respiración a un ritmo fijo. Quedaba bonito pero vacío. Conectarla a los datos reales de calidad del aire fue lo que la convirtió en algo que significaba algo.
Los comercios tienen personalidad (y reloj)
De las once capas, la de comercios es la que más me costó calibrar. Son más de 5.000 puntos (bares, restaurantes, cafés, tiendas), cada uno con datos de OpenStreetMap. Y el reto era que no parecieran una nube uniforme de puntitos naranjas.
La solución fue darle a cada comercio su propio ciclo de parpadeo. Cada uno tiene una fase aleatoria y una velocidad distinta. Pero además, los bares y restaurantes brillan más de noche (multiplicados por una curva nocturna) y las tiendas brillan más de día (curva diurna). El resultado es que si dejas la pieza abierta, ves cómo el patrón de luz comercial cambia con las horas. No porque le digas a la pieza "ahora es de noche", sino porque los datos de hora real modulan el brillo.
Es el calor humano de la ciudad. Y creo que es la capa que más diferencia a València Respira de una visualización de datos convencional.
Tres tiers de rendimiento (o por qué soy ingeniero de sistemas)
Aquí es donde el Staff Engineer que llevo dentro no pudo resistirse.
La pieza renderiza cientos de miles de puntos a 60 fps. En un portátil potente con Chrome, eso va bien. En un iPhone SE de hace tres años, no. Y si la pieza es una instalación pensada para cualquier pantalla, tiene que funcionar en cualquier dispositivo.
Así que implementé tres tiers de rendimiento que se detectan automáticamente: cuántos cores tiene el dispositivo, si es táctil, si la pantalla es pequeña, si el usuario tiene configurado "reducir movimiento" en accesibilidad. Según eso, la pieza ajusta la cantidad de partículas de viento, lluvia, estrellas, el efecto de bloom, y el parallax.
En tier "high" tienes 200 partículas de viento y bloom completo. En "low", 60 partículas y sin bloom. La pieza sigue siendo la misma. Solo es más ligera.
Y alguien dirá: "eso es overengineering para un proyecto artístico." Puede ser. Pero también es exactamente lo que hago en mi trabajo: diseñar sistemas que funcionen para todos, no solo para el caso ideal. Si un visitante de museo abre la pieza en su móvil mientras está en la sala y la pieza va a 12 fps, la experiencia está rota. Eso no es aceptable, ni en un almacén ni en un museo.
Lo invisible que sostiene todo
Hay tres sistemas que no se ven pero sin los cuales la pieza se sentiría muerta.
El primero es el viento. Partículas que fluyen en la dirección del viento real de València, cada una con su propia desviación angular. Cuando sopla levante, toda la pieza se mueve hacia el oeste. No es decorativo. Es información meteorológica que sientes sin leerla.
El segundo es la meteorología. Si llueve en València, llueve en la pieza. Partículas inclinadas por el viento. Si hay niebla, un velo sutil cubre todo. Si hay tormenta, relámpagos iluminan brevemente la ciudad cada 3-8 segundos. Cuando implementé esto y lo probé un día de lluvia real, fue la primera vez que sentí que la pieza "vivía" de verdad.
El tercero es el idle Lissajous. Cuando nadie toca la pantalla durante 15 segundos, la cámara empieza a moverse sola siguiendo una curva de Lissajous. Un movimiento suave, orgánico, que hace que la pieza nunca esté quieta. Pensé en esto específicamente para un contexto de museo: alguien pasa por delante sin tocar, y la pieza sigue respirando, moviéndose, viva.
El refresh invisible
Los datos de tráfico se actualizan cada 3 minutos. Valenbisi cada 10. La meteorología cada 10. La calidad del aire cada 10. Pero no puedes simplemente recargar los datos y repintar todo de golpe, porque el visitante vería un parpadeo.
Así que cada refresh hace un cross-fade: la capa hace fade out, se cargan los nuevos datos, y hace fade in. Es una transición de menos de un segundo que nadie nota. Pero si la quitas, la pieza se siente inestable. Es lo mismo que hacemos en producción con los deploys: el usuario no debería enterarse de que algo ha cambiado por debajo.
También implementé un fallback: si se pierde la conexión a internet, la pieza sigue mostrando los últimos datos cargados y se recupera sola cuando vuelve la conexión. No muestra un error. No se rompe. Degrada con gracia, como cualquier sistema bien diseñado.
El ingeniero que no se apaga
Ese cross-fade solo fue posible por algo que hice casi sin pensar: separar la carga de datos, el procesamiento y el renderizado en tres capas independientes.
La primera versión de la pieza funcionaba, pero cada capa mezclaba todo en la misma función: obtenía los datos del API, los proyectaba a coordenadas del mapa, y los pintaba en pantalla. Todo junto. En un prototipo eso vale, pero en el momento en que quieres actualizar los datos sin que la pieza parpadee, necesitas que esas responsabilidades estén separadas. No puedes hacer un fade out del renderizado si está acoplado a la carga de datos.
Así que refactoricé toda la pieza con el mismo patrón que usaría en cualquier sistema de producción: obtener, procesar, presentar. Tres capas, cada una ignorante de las otras. Y de paso, agrupé todo el estado (que eran decenas de variables sueltas) en objetos por subsistema: datos geográficos, meteorología, cámara, interacción, debug.
No voy a fingir que fue una decisión artística. Fue puro instinto de ingeniero. Pero resulta que el mismo patrón que hace que un sistema de almacenes sea mantenible es el que hace que una pieza de arte pueda respirar sin romperse. No sé si eso dice algo profundo o simplemente que llevo demasiados años haciendo esto.
Lo que aprendí sobre mi ciudad
No esperaba esto, pero construir València Respira me ha enseñado cosas sobre València que no sabía.
Que los cauces de riego rodean el casco urbano como arterias. Que hay barrios con miles de árboles y barrios con casi ninguno. Que a las 3 de la madrugada el tráfico desaparece casi por completo pero las estaciones de Valenbisi del centro siguen activas. Que los días de levante la pieza entera se mueve hacia el oeste y se siente distinta.
Llevo años viviendo aquí y nunca había visto la ciudad así. Supongo que esa es la gracia de los datos: no te dicen nada nuevo, pero te obligan a mirar lo que siempre estuvo ahí.
No sé si es arte
Te digo la verdad: no lo sé.
Lo que sí sé es que no es un dashboard, no es un mapa, y no es una herramienta de análisis. Es algo que se contempla. Que cambia con el tiempo. Que reacciona al mundo real. Que nunca se repite.
Llevo casi un doctorado investigando gemelos digitales. La definición formal es "una representación digital de un sistema físico que se actualiza con datos en tiempo real." València Respira encaja en esa definición perfectamente. Pero también encaja en la definición de instalación artística: una obra site-specific, viva, diseñada para un espacio físico.
Puede que sea las dos cosas. Puede que la distinción no importe.
Lo que sí me importa es que me ha obligado a salir de mi zona de confort por primera vez en mucho tiempo. A tomar decisiones que no se miden en latencia ni en throughput sino en si algo se siente bien cuando lo miras. Y eso, para un ingeniero de sistemas, es territorio nuevo y un poco incómodo.
La pieza ya está publicada en respira.emiliocarrion.com. Está diseñada para ser proyectada en un espacio oscuro, pero funciona en cualquier pantalla. Si la abres ahora y la abres en diez minutos, algo habrá cambiado. Porque la ciudad no se detiene.
Y la pieza respira con ella.
Pregunta para ti: ¿Has construido alguna vez algo que no encajara en tu definición habitual de "trabajo"? Me encantaría saber cómo fue.
Este contenido fue enviado primero a mi newsletter
Cada semana envío reflexiones exclusivas, recursos y análisis profundos sobre ingeniería de software, liderazgo técnico y desarrollo de carrera. No te pierdas el próximo.
Únete a más de 5,000 ingenieros que ya reciben contenido exclusivo cada semana
Artículos relacionados
El Senior Egoísta
Cuando un senior acumula conocimiento en su cabeza, el equipo se queda sin red. Con la IA acelerando la creación de código, compartir contexto deja de ser una buena práctica y pasa a ser una responsabilidad crítica.
La IA no va a eliminar al ingeniero de software. Va a eliminar al que solo escribía código.
Dario Amodei dice que la IA reemplazará a los ingenieros en 6-12 meses. Jensen Huang dice que no deberíamos aprender a programar. Llevo meses dándole vueltas a esto. No tengo todas las respuestas, pero sí tengo una postura.
El Senior Engineer está muerto. Larga vida al Experto Generalista
El senior engineer clásico (profundidad extrema en un stack, foco en implementación) se está quedando obsoleto. La evolución natural es convertirte en experto generalista: profundidad técnica real con amplitud de criterio para conectar tecnología con negocio.
