El Dashboard de mi homelab: un panel que me hace actuar, no que me adorna

31 October, 2026 | homelab

Serie Homelab · Parte 13 · ← Langfuse: ver qué piensa el agente · Claude Code con mis propios MCP → · Ver la serie

TL;DR: Un homelab con agentes necesita una cara. El mío es un Dashboard web con servicios, infraestructura, contenedores, chat con ARIA y aprobaciones. La regla de diseño es una: un panel que no me lleva a una acción es decoración. Aquí te muestro cómo se ve y qué decisiones hay detrás.

Por qué una interfaz

Con varios agentes y casi veinte MCP, sin interfaz el sistema era un conjunto de procesos que solo yo sabía que existían. Quería un solo lugar para ver qué corre, hablar con el asistente y aprobar lo que él me pida. Es el centro de control.

Lo armé con React y Vite, servido por nginx. Nginx hace de paso doble: también hace de proxy hacia los MCP y sirve las capturas que genera el asistente, para que el chat las muestre.

Servicios: ¿está todo bien?

Servicios del homelab en el Dashboard: cómputo, red, monitoreo, plataforma agéntica y servidores MCP
Pantalla de Servicios: cómputo, red, monitoreo, plataforma agéntica y servidores MCP

La primera pantalla agrupa todo por capas: cómputo y almacenamiento, red y seguridad, monitoreo, plataforma agéntica y mensajería. Cada tarjeta es una luz verde o roja, con el dato clave que importa de ese servicio: consultas bloqueadas de AdGuard, monitores de Uptime Kuma, trazas de Langfuse, el modelo que está cargado.

Sí, hay rojos. En la captura, por ejemplo, Qdrant. Un panel donde todo es verde es un panel que miente o que no mira.

Infraestructura: de qué está hecha mi casa

La pantalla de Infraestructura muestra las alertas activas de Grafana (el resumen de la Parte 2), las sesiones de VSCode conectadas a mis VM, el estado de la red, los nodos con su temperatura y la PC de IA con su GPU, tokens por segundo y consumo.

Resumen de infraestructura con una alerta activa: disco alto en dev
Resumen de infraestructura con una alerta activa

Estos datos no salen del asistente. Los sirve una API de solo lectura (Agent-01), a propósito: lo que muestra y lo que actúa viven separados. El panel puede equivocarse sin romper nada.

Contenedores: el panel que más me incomoda

Resumen de contenedores: hosts, contenedores corriendo, actualizaciones pendientes y vulnerabilidades
Resumen de contenedores: hosts, contenedores corriendo, actualizaciones pendientes y vulnerabilidades

Esta pantalla muestra qué corre en cada máquina, desde cuándo, cuánta memoria usa y con qué versión. Un escáner pasa cada noche y marca las vulnerabilidades, y el panel resume cuántos contenedores tienen actualizaciones pendientes y cuántos tienen vulnerabilidades críticas.

Hoy me dice que 23 contenedores tienen vulnerabilidades críticas. Decidí mostrarlo, porque justamente de eso se trata: un panel que me señala exactamente lo que debería atender. Los que tienen candado son los protegidos, y piden mi aprobación en pantalla antes de tocarlos.

Y el chat, y las aprobaciones, y lo demás

El corazón de la interfaz es el chat con ARIA: ahí pregunto, veo las respuestas, el enlace «Trace» y las tarjetas de aprobación de la Parte 7. El resto de las pantallas son más pequeñas y más específicas: recordatorios, transcripciones, memoria, las reglas de permisos, acciones guardadas, la despensa y las noticias.

Y la tablet de pared de casa, que ARIA puede controlar (pantalla, página y audio) con su propio MCP, es mi ventana permanente al homelab.

Lo que aprendí diseñándolo

  1. Un panel debe llevar a una acción. Si miro una pantalla y no sé qué hacer con ella, la borro. Esta regla viene de la Parte 2: si no lo miro en una semana, sobra.
  2. Separa lo que muestra de lo que actúa. Una API de solo lectura para los paneles y una compuerta de aprobaciones para las acciones.
  3. Muestra lo malo primero. «Señales primero» es el orden por defecto de la lista de contenedores. Lo bonito puede esperar.
  4. El chat es una interfaz, no el producto. La gracia es lo que hay detrás: herramientas, permisos, trazas.
  5. Muéstralo todo, con juicio. Para escribir estos posts tuve que tapar IPs, dominios y un par de tarjetas. Que un panel sirva para operar no significa que sirva para enseñar tal cual.

Lo que sigue

Falta el cierre de la serie: cómo conecto estos mismos MCP a Claude Code, el asistente que uso mientras programo, y cómo este blog lo publicó una IA con las herramientas que ella misma usa. En la Parte 14.