Caso de estudio · Producto propio

WPilot Site Control, un panel para monitorizar webs WordPress

Diseñé y programé un panel self-hosted que vigila las webs WordPress de los clientes de una agencia: disponibilidad, seguridad, actualizaciones y rendimiento. Avisa por email y notificación push, y genera informes para el cliente.

Panel de WPilot Site Control con los servidores de un cliente agrupados y el estado de cada web

Mi papel

Producto completo: diseño, desarrollo e infraestructura

Estado

En producción · 937 commits

Tipo

Aplicación web + plugin WordPress

Stack

Next.js 16 · React 19 · TypeScript · PostgreSQL · Redis · PHP

01 · Contexto

El problema

Una agencia que mantiene decenas de webs WordPress suele enterarse de los problemas cuando llama el cliente: una web caída, un certificado caducado, un plugin vulnerable o un administrador nuevo que nadie creó.

Revisarlas una a una no escala, y las herramientas genéricas de monitorización solo miran si la web responde. Hacía falta una herramienta que leyera el estado de WordPress por dentro y avisara antes de que llamara el cliente.

En vídeo

WPilot Site Control en 54 segundos

El tráiler del producto: vigilancia de cada web, actualizaciones sin entrar al wp-admin, biblioteca de plugins propios, licencias y seguridad.

02 · Mi papel

Lo que hice

Me encargué del producto de principio a fin:

  • Diseño: prototipos en HTML de cada pantalla del panel y un sistema de diseño propio con contraste medido.
  • Panel: Next.js con App Router, PostgreSQL con Drizzle y colas BullMQ sobre Redis para las comprobaciones, los reintentos y los despliegues.
  • Plugin WordPress: un cliente pasivo que solo responde a peticiones firmadas por el panel.
  • Avisos e informes: alertas por email y notificaciones web push, e informes de PageSpeed programados que el cliente puede imprimir.
  • Infraestructura: Docker sobre Coolify en un servidor Proxmox propio, detrás de Cloudflare Tunnel.

03 · Decisiones

Consultas programadas y avisos urgentes

Cada 30 minutos el panel consulta un endpoint de salud firmado de cada web: versiones de WordPress y PHP, base de datos, disco, tareas programadas atrasadas y caducidad del certificado.

Los eventos urgentes —un inicio de sesión de administrador, un ataque de fuerza bruta, la activación de un plugin o un cambio en wp-config— llegan al momento por push. Cada evento lleva un identificador único y se guarda 30 días en una cola local de la web; el panel lleva un cursor por sitio y los ingiere de forma idempotente. Si un aviso se pierde por el camino, la siguiente consulta lo recupera.

El panel es además el centro del resto de productos WPilot: catálogo, versiones firmadas, licencias e instalación remota de plugins en las webs gestionadas.

04 · Seguridad

Seguridad de un panel con acceso a todas las webs

Peticiones firmadas

HMAC-SHA256 sobre fecha, método, ruta y cuerpo, con una ventana de 5 minutos contra repeticiones.

Versiones firmadas

Cada orden y cada versión de plugin se firma con Ed25519 y se verifica antes de instalarse.

Secretos cifrados

AES-256-GCM para los secretos guardados; PostgreSQL y Redis solo escuchan en local.

Accesos

Contraseñas con Argon2id, 2FA obligatorio, bloqueo tras 5 intentos y revocación de sesiones.

Red

Protección contra SSRF en cada petición saliente, sin HTTP ni IP privadas, y CSP con nonce.

Permisos

Matriz de roles y alcances con registro de auditoría de cada acción.

05 · Calidad

Tests e integración continua

La integración continua levanta PostgreSQL y Redis reales, genera claves de firma desechables en cada ejecución y prueba el plugin en tres versiones de PHP.

333

archivos de test en el panel

937

commits entre septiembre y noviembre de 2026

3

versiones de PHP en CI: 7.4, 8.1 y 8.3

30 min

entre comprobaciones; los eventos urgentes llegan al momento

Siguiente caso

WPilot Justify →

Automatización de las justificaciones del Kit Digital con Playwright y Electron.