Una petición, una decisión
Un solo proceso delante de todos los sitios de una máquina. Lee a quién va dirigida cada petición y la lleva donde tenga que ir: a una carpeta de ficheros, a un programa que él mismo mantiene en pie, o a un cartel que explica por qué hoy no.
Dar de alta
Una web nueva es una carpeta nueva
No hay puerto que elegir, ni servicio que registrar, ni nada que
reiniciar. Se crea la carpeta con el nombre del dominio, se escribe
dentro un site.json, y en la siguiente vuelta —tres
segundos— ese dominio ya se sirve.
sites/tienda.midominio.es/site.json
// una web de ficheros { "title": "Tienda", "kind": "static", "root": "public" } // o un programa, con su puerto puesto por la casa { "title": "Tienda", "kind": "proxy", "command": ["./node_modules/.bin/next", "start"] }
El proyecto entero vive dentro de esa carpeta, con su
.git y todo. No es un fichero que apunte a otro sitio: es el sitio.
Qué corre
Tres cosas, no una
-
Un sitioAtiende un dominio. Ficheros servidos desde aquí, o un proceso vigilado al que se le reenvía.
-
Una tareaOcurre a su hora. Con diario de lo que pasó cada vez, y si la anterior seguía viva se salta en vez de matarla.
-
Un proceso propioEstá en pie siempre y no atiende ningún dominio. Vive declarado dentro del sitio al que pertenece.
Desplegar
Relevo sin cortar
Un sitio puede pedir que una variable valga lo que diga un fichero. Se compila la versión nueva con la vieja sirviendo, se escribe el nombre en ese fichero, y el middleware releva el proceso: arranca el nuevo, espera a que conteste y retira el anterior. En todo momento hay exactamente un proceso.
Quién entra
Una puerta por dominio
Cualquier sitio puede pedir contraseña antes de servir nada —también su cartel de mantenimiento: si una web es privada, que esté en obras tampoco es asunto de nadie—. El pase va en una galleta firmada, así que un reinicio no echa a quien estaba dentro, y cambiar la contraseña sí.
Y antes de eso, un filtro por dirección: lista blanca de quién puede llegar, lista negra de quién no. La negra gana. A quien no puede llegar no se le enseña ni la caja donde se escribe la clave.
Cuando falla
Alguien mirando a las cuatro de la mañana
Si un sitio se cae de verdad, el middleware le pasa el problema a Claude Code dentro de la carpeta de ese proyecto: con espera entre intentos, tope de intentos, tope de gasto y todo lo que hizo por escrito. Cada web puede vetarlo desde su propio manifiesto.
Mientras tanto, quien entre no ve una pantalla de error del navegador. Ve una página que dice qué pasa y qué hacer, con el código HTTP pequeño al pie —para quien venga a preguntar por qué su web no cargaba.
-
Volvemos enseguidaUn cartel puesto a mano, sin tocar el DNS ni el túnel. Quitarlo es un clic.
-
No arrancaDiez intentos con espera creciente, y después se para y lo dice.
-
Aquí no hay nadaUn dominio que llega y no es de esta casa sale en el panel, para que deje de ser invisible.
El panel
Todo lo de esta máquina, en una pantalla
- El cuadroCada dominio con su estado, su captura y lo que tardó en contestar la última vez.
- Registro en vivoLa salida de cada proceso según sale, sin entrar por SSH.
- ConversacionesClaude Code abierto sobre cada proyecto, dentro de su carpeta y sin salir de ella.
- CloudflareDNS y túnel desde aquí: dar de alta un dominio es marcar una casilla.
- La máquinaCPU, memoria y disco, con quién se los está comiendo.
- TareasQué se ejecuta, a qué hora y cómo acabó la última vez.
Reiniciarse
Sin llevarse la casa por delante
La puerta —el puerto por el que entra todo— la sostiene el sistema, no este programa. Cuando el middleware se releva, lo que llegue durante el hueco espera en la cola en vez de fallar, y los sitios ni se enteran: son procesos aparte y al volver se readoptan por su identificador y su hora de arranque.