Vibe Coding #4 — Dashboard de Analítica de Datos con Svelte y Python | ENTSO-E API Datos Energéticos

Construyendo un dashboard interactivo para explorar datos energéticos europeos de ENTSO-E — mix de generación, cargas eléctricas y precios day-ahead con zoom sincronizado y layouts arrastrables.

23 de febrero de 2026 16:30 CET 1:28:00 EN
svelteentsoeenergydashboardfrontendpythonechartsinteractive

Recibe actualizaciones semanales

Sesiones de live coding, librerías Python para datos energéticos y tutoriales prácticos. Un email por semana, sin relleno.

Resultado

Un dashboard interactivo que consulta datos energéticos de ENTSO-E para cualquier país europeo — mix de generación, cargas eléctricas y precios day-ahead visualizados en ECharts sincronizados con layouts arrastrables, todo construido en una sola sesión en directo.

El problema

  • En Vibe Coding #3 construimos python-entsoe para consultar datos energéticos europeos, pero cada análisis seguía requiriendo escribir código Python
  • La Plataforma de Transparencia oficial de ENTSO-E tiene interactividad limitada — sin sincronización entre gráficos, sin layouts personalizables
  • Los usuarios de negocio necesitan una interfaz point-and-click para explorar generación, cargas y precios sin tocar código
  • Comparar múltiples dimensiones de datos (generación vs. cargas vs. precios) lado a lado requiere esfuerzo manual cada vez

Plataforma de Transparencia ENTSO-E — el dashboard que estamos emulando

La solución

Partimos de la librería python-entsoe construida en el Vibe Coding #3 y nos propusimos envolverla en un dashboard web interactivo — sin más código para ver gráficos.

Planificación y arquitectura

Primer paso: escribir un plan en CLAUDE.md especificando el objetivo (una aplicación web dashboard sirviendo datos de Python ENTSO-E), el stack tecnológico y la estructura del repositorio antes de implementar nada.

Claude Code investigó librerías de gráficos. Comparamos D3.js, LayerCake (nativa de Svelte) y Apache ECharts revisando estrellas en GitHub, descargas en npm y demos interactivas.

Comparando librerías de gráficos — ejemplos interactivos de Apache ECharts

ECharts ganó — interacciones más reactivas de serie, especialmente para tooltips hover y controles de zoom. Claude Code propuso una estructura monorepo con backend/ (FastAPI) y frontend/ (SvelteKit):

Claude Code planificando la estructura del repositorio

Construyendo el backend

El backend FastAPI usa python-entsoe para consultar generación, cargas y precios. El paso clave de preprocesamiento: tablas pivote para reestructurar los DataFrames crudos al formato que ECharts espera — tipos de generación como columnas, timestamps como filas, con valores NaN rellenados a cero para la serialización JSON.

Cliente backend de ENTSO-E con preprocesamiento de datos en tabla pivote

También reutilizamos los metadatos de países de la librería python-entsoe (códigos de área, nombres de países) en lugar de duplicar hardcoded — un detalle que Claude Code habría pasado por alto sin guía.

Setup del frontend

Para el frontend, instalamos SvelteKit con componentes Shadcn UI usando Bun. Shadcn proporciona componentes prediseñados como sidebars, combo boxes y botones — acelerando significativamente el desarrollo del dashboard.

Instalando componentes Shadcn UI para el sidebar del dashboard

Primer dashboard funcional

Tras conectar backend con frontend, consultamos la generación energética de Alemania. El primer intento falló con un error de serialización JSON — la tabla pivote producía valores NaN. Tras rellenar valores faltantes con ceros, los gráficos renderizaron:

Primer dashboard funcional — consultando datos de generación energética de Alemania

Caché y persistencia de datos

La API de ENTSO-E es lenta para rangos de fechas grandes. Implementamos un sistema de caché de dos capas: caché TTL en memoria para consultas repetidas rápidas, más persistencia en disco (archivos Parquet indexados por país y rango de fechas) para que los datos sobrevivan reinicios del servidor.

Mejoras de UX

El selector de países era un dropdown básico — hacer scroll entre 40+ países para encontrar España. Lo reemplazamos por un combo box de Shadcn con filtrado por escritura:

Combo box para filtrar países — mejora de UX

Zoom sincronizado de gráficos

La funcionalidad estrella: hacer zoom en cualquier gráfico y que todos los demás se actualicen simultáneamente. Un checkbox en el sidebar activa la sincronización — al seleccionar un rango temporal en el gráfico de generación, los gráficos de cargas y precios hacen zoom automáticamente a la misma ventana.

Todos los gráficos sincronizados — hacer zoom en uno actualiza todos los demás

Layout arrastrable

La última funcionalidad: un grid configurable donde los gráficos se pueden arrastrar y redimensionar. Investigamos librerías de drag compatibles con Svelte e integramos una para permitir disposiciones personalizadas — poner generación y cargas lado a lado, ampliar el gráfico de precios, o apilarlos verticalmente.

Layout arrastrable de gráficos — cuadrícula de dashboard configurable

Resultado final

El dashboard terminado consultando datos de España — tres gráficos (mix de generación, cargas eléctricas, precios day-ahead) dispuestos lado a lado con controles de zoom sincronizado:

Dashboard final con datos de España — gráficos lado a lado con zoom sincronizado

También mostramos la plataforma social de Datons para compartir visualizaciones de datos — donde estos conceptos de dashboard evolucionarán hacia una herramienta colaborativa con comentarios, vistas a página completa y tipos de gráficos avanzados como heatmaps:

Plataforma de redes sociales de Datons para compartir visualizaciones de datos

Referencia

Funcionalidades del dashboard

FuncionalidadDetallesDescripción
Selector de paísesCombo box con búsquedaFiltrado por escritura entre 40+ países ENTSO-E
Rango de fechasSelectores inicio/finRango personalizado para todas las consultas
Mix de generaciónECharts área apiladaSolar, eólica, nuclear, gas, hidro, biomasa, etc.
Cargas eléctricasECharts gráfico de líneaDemanda real a lo largo del tiempo
Precios day-aheadECharts gráfico de líneaPrecios horarios en EUR/MWh
Zoom sincronizadoToggle checkboxHacer zoom en un gráfico actualiza todos los demás
Layout arrastrableGrid con drag/resizeDisposición configurable del dashboard
CachéMemoria + disco (Parquet)Consultas repetidas rápidas, sobrevive reinicios

Estructura del proyecto

entsoe-dashboard
.claude
plan.md# Plan de desarrollo
.envrc# direnv — carga API key de ENTSO-E
Makefile# make dev — arranca ambos servicios
backend
pyproject.toml# UV + dependencia python-entsoe
app
main.py# App FastAPI + CORS
routes# /generation, /loads, /prices, /metadata
services
entsoe_client.py# Wrapper python-entsoe + tablas pivote
data
raw# Caché Parquet (por país + rango de fechas)
frontend
package.json# Bun + SvelteKit + ECharts
src
routes
+page.svelte# Página del dashboard
lib
components# Wrappers ECharts, sidebar, combo box
api.ts# Cliente API del backend
app.css# Tema Shadcn
components.json# Configuración Shadcn

Arquitectura

Navegador
Dashboard energético interactivo
Frontend SvelteKit
•ECharts (generación, cargas, precios)
•Shadcn UI (sidebar, combo box)
•Grid con layout arrastrable
REST API
Backend FastAPI
•/generation/{country}
•/loads/{country}
•/prices/{country}
•/metadata/countries
Capa de caché
•Caché TTL en memoria
•Persistencia en disco (Parquet)
python-entsoe
github.com/datons/python-entsoe
Plataforma de Transparencia ENTSO-E
40+ países, datos energéticos

Stack

  • SvelteKit 5 · Apache ECharts · Shadcn UI · Bun
  • FastAPI · python-entsoe · Caché Parquet

Recursos

Índice
Buscar sección

Usamos cookies para mejorar tu experiencia y analizar el uso del sitio. Puedes gestionar tus preferencias en cualquier momento.