Deconstruyendo esta web

Si te cuentan cómo trabajan y no pueden enseñarte el taller, desconfía. Este es el nuestro.

El recorrido va hacia abajo, del punto de presencia que respondió a tu petición al commit que autorizó estas palabras. Cada capa se abre si quieres el detalle, y todo lo que se afirma aquí está en el repositorio.

La arquitectura

No hay servidores que cuidar, y eso es lo de menos. Importa dónde se fabricó la respuesta que estás leyendo: en el edge, sobre Cloudflare Workers. Delante hay caché, y cuando acierta el código ni se ejecuta.

Debajo, el CMS es EmDash, que Cloudflare publicó con licencia MIT como sucesor de WordPress, y no un servicio al que llamar por red: es la misma aplicación, servida por el mismo worker. Y al final del descenso no hay base de datos, hay un fichero de texto en Git.

  • L5el bordeWorkers · caché delanteUn acierto devuelve la página sin ejecutar código.

    La caché de Workers se sienta delante del worker, así que un acierto responde sin ejecutar nada. Por defecto no se cachea: una página solo entra si ella misma lo pide. Cuando entra dura una hora, y al publicar se purga por etiquetas.

  • L4la puertamiddlewareDecide qué se cachea y añade las cabeceras de seguridad.

    Un único middleware para todas las respuestas: resuelve el idioma, carga las etiquetas de accesibilidad, decide la política de caché y estampa siete cabeceras de seguridad. El panel de edición queda fuera, porque trae las suyas.

  • L3el renderAstro SSRConstruye el HTML en el mismo worker que recibió la petición.

    26 rutas públicas, 24 componentes y 12 hojas de estilo, con render bajo demanda de Astro, que también es de Cloudflare desde enero de 2026. Los idiomas no se separan por prefijo sino por slug traducido, así que la ruta alterna se resuelve contra el CMS y nunca se adivina: adivinarla devuelve un 404.

  • L2el CMSEmDashCorre dentro del mismo worker: no hay servicio externo al que llamar.

    EmDash no es un servicio contratado: es el CMS que Cloudflare publicó en abril de 2026 con licencia MIT como sucesor de WordPress, y que usa en su propio blog desde el 12 de agosto. Aquí inyecta 183 rutas bajo /_emdash en esta misma aplicación, con 7 colecciones y 43 entradas: mismo script, mismos enlaces de recursos, ninguna llamada de red. Los plugins de terceros son la excepción deliberada, y corren en un aislado aparte con Worker Loader, sin salida a internet.

    El panel de EmDash editando esta misma página, con el título, el cuerpo y el estado de publicación a la vista.
    El panel, editando esta página. Corre en el mismo worker que acaba de servírtela.
  • L1los datosD1 · R2 · KVContenido, imágenes y sesiones, en el edge.

    El contenido en D1, los ficheros en R2 y las sesiones en KV. Los estáticos no pasan por aquí: los sirve la capa de recursos sin llegar a despertar al worker.

  • L0el origenseed.json · markdownLo que escribe una persona. Todo lo de encima se deriva de aquí.

    Un fichero de texto en Git, más los cuerpos de los servicios en markdown. De ahí sale la web entera en una reconstrucción desde cero, que es lo que hace la integración continua antes de cada fusión.

La petición entra por arriba. Abajo vive lo que escribe una persona, y por eso es la capa que se revisa a mano.

Contenido como código

Casi cada texto vive en seed/seed.json, y los cuerpos de los servicios en markdown: el nombre del fichero es el slug, el directorio es el idioma. Una reconstrucción desde cero rehace la web entera, y eso lo comprueba la integración continua antes de cada fusión.

La caché hereda la disciplina: una página solo se cachea si lo pide, y al publicar se purga por etiquetas. Queda un hueco y conviene decirlo: los menús y los ajustes no emiten evento, así que su desfase lo acota el TTL de una hora.

➜ serverstartup.io reconstruir --desde-cero

base de datos creada, vacía

semillas aplicadas: 43 entradas, dos idiomas

copia congelada: 26 rutas

copia renderizada: coincide con la congelada

╰─ listo. La reconstrucción es la prueba, y corre antes de cada fusión.

Los agentes

Que un modelo redacte el primer borrador no tiene mérito ni misterio. Lo que decide si esto es serio es quién tiene autoridad para qué.

El agente propone y no fusiona. Las comprobaciones rechazan y no escriben: su credencial es de solo lectura. La persona puede las dos cosas, y por eso es la única que puede equivocarse con nombre y apellidos. La letra pequeña: que el agente no fusione es una regla escrita, no un candado del servidor.

Antes de preguntarle nada a una persona, la rama pasa por dieciséis pasos que pueden fallar. Se niegan a dejar pasar lo que una revisión a ojo no ve:

Un guardia solo vale si puede fallar, y uno que no encuentra nada se ve igual que uno que no puede. Los más delicados llevan un control positivo que los revienta si dejan de mirar. La última puerta tampoco es automática: producción se despliega a mano.

agent/draft → mainOpen

publicar sin que nadie lo lea

Nombres no citables: un cliente que no puede salir en un repositorio público.

Textos fuera del CMS: una etiqueta que solo existe en un idioma, o una frase escrita a fuego en la plantilla.

Colores fuera del sistema: un literal o una anchura nueva, que es como vuelven las siete medidas distintas.

Caché en el sitio equivocado: una llamada puesta donde las cabeceras ya se han ido, que no cachea nada y lo parece.

Copia que cambia sola: el texto renderizado de 26 rutas está congelado.

Imágenes que se piden a sí mismas: una URL absoluta a nuestro propio dominio, que en Cloudflare no puede funcionar y en local no se nota.

Accesibilidad y contraste: tabulador, reflujo a 320 píxeles y validación del W3C.

All checks have passed — quality-gates / gates

✓ gitleaks✓ citabilidad✓ astro check✓ esquema de semillas✓ textos del CMS✓ tokens de diseño✓ pistas de caché✓ tests unitarios✓ construcción✓ arranque de la pila✓ html-validate✓ copia congelada✓ cabeceras✓ hrefs de imagen✓ accesibilidad✓ Lighthouse
✔ ApprovedSigned-off-by: julio.arguelloMerge pull request

Los números

Un número sin fecha es el peor sitio para la deriva, así que aquí hay dos clases y no se mezclan. El umbral vive en un fichero: 95 o más en rendimiento, cien en accesibilidad, buenas prácticas y SEO, sobre la mediana de tres pasadas con emulación móvil.

La medición lleva su fecha. El 24 de agosto de 2026, sobre la construcción de producción: cien en las cuatro categorías y en las cinco direcciones, con el mayor contenido pintado por debajo de 1,6 segundos. Es la mediana de cada una, y la cota es la peor de las cinco.

Umbrales · integración continuaEXIGIDO
rendimiento95 o más
accesibilidad100
buenas prácticas100
SEO100
rutas con copia congelada26
pasos que pueden fallar16

El taller, a la vista

El repositorio es público y se sincroniza con cada cambio en la rama principal, con la historia entera y sin filtrar. Publicar así tiene un coste: por eso existe el guardia de nombres no citables.

Código, semillas, comprobaciones y despliegues: está todo. Mira dentro y dinos si harías algo distinto.

SERVERSTARTUP.iomanual de montaje · ES/EN · hoja 1 de 1

PIEZAS INCLUIDAS

MONTAJE

  • 01escribe las semillas
  • 02la skill fija la voz
  • 03el agente redacta
  • 04revisión humana ✋
  • 05pull request y merge
  • 06deploy al edge
⚠ Advertencias

No montar sin el paso 04. El agente redacta, el humano firma.

El paso 03 nunca hace merge. Nunca.

ℹ Datos de montaje

Tiempo de montaje: tres semanas a ratos.

Tornillería incluida: cero traspasos.

Ver el repositorio →

Hablemos de ingeniero a ingeniero.

Trae el problema como esté. Te responde quien va a escribir el código.

Cuéntanos tu proyecto