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.
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
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.
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.
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.