Internet InfinitoInfinite Internet

Guía global · el making-ofGlobal guide · the making-of

Cómo se construyó el Internet Infinito How the Infinite Internet was built

Diez homepages radicalmente distintas de CyberSenseAI + una puerta de entrada que sintetiza webs en tiempo real, construidas de forma autónoma por Claude Fable 5: workers en paralelo, capturas reales con Playwright, tres pasadas de crítica obligatoria por sitio y deploy en Hetzner. Esta guía documenta el workflow completo para que cualquiera pueda replicarlo. Ten radically different CyberSenseAI homepages + a gateway that synthesizes websites in real time, built autonomously by Claude Fable 5: parallel workers, real Playwright screenshots, three mandatory critique passes per site and deployment on Hetzner. This guide documents the full workflow so anyone can replicate it.

El pipeline de un vistazoThe pipeline at a glance

Seis etapas, casi todas autónomasSix stages, almost all autonomous

01Dirección creativaCreative direction
02Workers en paraleloParallel workers
03Assets gpt-image-2gpt-image-2 assets
043 pasadas + capturas3 passes + screenshots
05Gateway infinitoInfinite gateway
06Deploy nginx + TLSnginx + TLS deploy

La única intervención humana es la primera: fijar los conceptos. Todo lo demás — código, crítica, iteración y verificación — lo ejecutan instancias de Claude Fable 5 en CLI headless. The only human intervention is the first stage: locking the concepts. Everything else — code, critique, iteration and verification — is executed by headless CLI instances of Claude Fable 5.

01

Dirección creativa: conceptos fijados a manoCreative direction: concepts locked by hand

Antes de lanzar nada, se fija por escrito un concepto radical por sitio — no «diez variaciones de una plantilla», sino diez universos con una técnica central propia que debe deslumbrar. Cada concepto se convierte en un prompt de build (prompts/<slug>.build.md) con el contenido real de CyberSenseAI, las reglas (single-file, sin librerías, sin lorem, sin errores de consola) y la exigencia de una guía /guide por sitio. Before launching anything, a radical concept per site is locked in writing — not "ten variations of a template" but ten universes, each with a signature technique that must dazzle. Each concept becomes a build prompt (prompts/<slug>.build.md) with the real CyberSenseAI content, the rules (single-file, no libraries, no lorem, no console errors) and the requirement of a per-site /guide.

slugConceptoConceptTécnica claveKey technique
centinelaSala de operaciones de ciberseguridadCybersecurity ops roomRadar de perímetro WebGLWebGL perimeter radar
organigramaEl organigrama vivoThe living org chartGrafo físico interactivoInteractive physics graph
xaiosEl sistema operativoThe operating systemBoot de terminal → diagrama 3DTerminal boot → 3D diagram
fabricaLínea de montaje del pensamientoAssembly line of thoughtCinta 3D isométricaIsometric 3D conveyor
quirofanoSalud: precisión que respiraHealth: precision that breathesECG que dibuja la páginaAn ECG draws the page
parquetEl parqué financieroThe trading floorCiudad de velas 3D + odómetros ROI3D candlestick city + ROI odometers
colmenaEquipos híbridos: la colmenaHybrid teams: the hiveRetícula hexagonal vivaLiving hexagonal lattice
adnLos valores CREI en el ADNCREI values in the DNADoble hélice 3D3D double helix
espejoHumano ↔ IA en espejoHuman ↔ AI mirroredPantalla partida coreografiadaChoreographed split screen
ajedrezEstrategia: el mismo bandoStrategy: the same sideTablero 3D humano+IA aliados3D board, human+AI allied

02

Workers Claude Fable 5 en paralelo (CLI headless)Parallel Claude Fable 5 workers (headless CLI)

Cada sitio lo construye un worker independiente: una invocación claude -p sin interfaz, con permisos de herramientas acotados y reintentos automáticos. Todos los workers se lanzan a la vez — el wall-clock del proyecto es el del sitio más lento, no la suma. Este es el runner real: Each site is built by an independent worker: a headless claude -p invocation with a scoped toolset and automatic retries. All workers launch at once — the project’s wall-clock is the slowest site’s, not the sum. This is the actual runner:

# tools/worker.sh <slug> <phase> <promptfile>
for attempt in $(seq 1 12); do
  timeout 3000 claude -p "$(cat "$PROMPTFILE")" \
    --model claude-fable-5 --effort high \
    --allowedTools "Read,Write,Edit,Bash,Glob,Grep" \
    --dangerously-skip-permissions >> "$LOG" 2>&1
  rc=$?
  if [ $rc -eq 0 ]; then touch "$DONE"; exit 0; fi
  # límite de sesión → dormir hasta el reset; glitch → reintento inmediato
  if tail -3 "$LOG" | grep -qi "session limit"; then sleep "$WAIT"; else sleep 5; fi
done

Claves del diseño: cada worker deja un .done idempotente (relanzar no repite trabajo hecho), el log por sitio permite auditar cada intento, y la espera por «session limit» distingue cuota real de glitches transitorios, que se reintentan sin bajar el paralelismo. Design keys: each worker leaves an idempotent .done marker (relaunching never repeats finished work), the per-site log makes every attempt auditable, and the "session limit" wait distinguishes real quota from transient glitches, which are retried without ever lowering parallelism.

03

Assets con gpt-image-2 vía LiteLLMAssets with gpt-image-2 via LiteLLM

Las imágenes de los diez sitios (héroes y texturas) se generan con gpt-image-2 a través de un proxy LiteLLM local con API compatible OpenAI. Los workers piden sus propios assets desde el prompt de build y los convierten a .webp. La puerta de entrada, en cambio, no usa ni una sola imagen: toda su presentación es generativa (canvas + CSS desde las paletas de mood). The ten sites’ images (heroes and textures) are generated with gpt-image-2 through a local LiteLLM proxy exposing an OpenAI-compatible API. Workers request their own assets from the build prompt and convert them to .webp. The gateway, by contrast, uses no images at all: its whole presentation is generative (canvas + CSS derived from the mood palettes).

curl -s http://localhost:4000/v1/images/generations \
  -H "Authorization: Bearer $LITELLM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"…dirección de arte del sitio…","size":"1536x1024"}' \
  | jq -r '.data[0].b64_json' | base64 -d > hero.png
cwebp -q 82 hero.png -o hero.webp

04

Tres pasadas de iteración con ojos realesThree iteration passes with real eyes

Ningún sitio se queda con su primer borrador. Un pipeline por sitio (tools/pipeline.sh) encadena tres pasadas; antes de cada una, tools/shoot.py abre la página con Playwright y guarda cuatro capturas reales (hero 1440px, mitad de scroll, footer y móvil 390px) además de los errores de consola. El worker de la pasada está obligado a mirar las capturas con su herramienta de lectura de imágenes y a criticar un mínimo de 8 defectos antes de tocar código. Cada pasada tiene un foco distinto — este es el foco real de cada una: No site keeps its first draft. A per-site pipeline (tools/pipeline.sh) chains three passes; before each one, tools/shoot.py opens the page with Playwright and saves four real screenshots (1440px hero, mid-scroll, footer and 390px mobile) plus any console errors. The pass worker is required to look at the screenshots with its image-reading tool and to critique at least 8 defects before touching code. Each pass has a different focus — this is the real focus of each:

# tools/passprompt.py — el foco de cada pasada (extracto real)
FOCUS = {
 1: "PRIMERA PASADA — problemas estructurales y de concepto: ¿la técnica central
     deslumbra de verdad o se queda a medias? ¿el hero para el scroll de golpe?…",
 2: "SEGUNDA PASADA — craft fino: espaciados y ritmo vertical exactos, contraste AA,
     estados hover/focus de TODO lo interactivo, timing/easing de cada animación…",
 3: "TERCERA PASADA — la lupa final: móvil 390px impecable, 60fps, accesibilidad,
     robustez (resize, WebGL no disponible), microcopy pulido, la guía /guide al día…",
}

Si la captura detecta errores de consola, el prompt de la pasada los marca como prioridad absoluta. La pasada 3 termina con una captura final de verificación. If the screenshot run detects console errors, the pass prompt flags them as top priority. Pass 3 ends with a final verification screenshot.

Lo que dejó la lupa final (pasada 3 de la puerta)What the final pass left behind (gateway pass 3)

05

La puerta infinita: moods, cookie y síntesisThe infinite gateway: moods, cookie and synthesis

La portada convierte los diez sitios en un solo producto: una web por mood. Tres mecanismos, todos client-side sobre un hosting 100% estático: The gateway turns the ten sites into a single product: one web per mood. Three mechanisms, all client-side on 100% static hosting:

// synth.js — el corazón de la derivación (extracto real)
var seed = makeSeed(text, Date.now());        // hash(texto + timestamp)
var rng  = mulberry32(xmur3(seed)());         // PRNG determinista
var t    = traitsOf(text);                    // oscuro/cálido/minimal/brutal… + hue
var bg   = dark ? {h:hue,s:satBase,l:6+rng()*6} : {h:hue,s:…,l:94+rng()*3};
var ink  = ensureContrast({…}, bg, 8);        // empuja L hasta cumplir WCAG
var accent = ensureContrast({h:hue2,…}, bg, 3.1);
var pair = PAIRS[best];                       // 14 pares de Google Fonts, por traits
var layout = t.brutal ? 'brutal' : …;         // editorial | poster | split | brutal

La misma semilla + el mismo texto producen siempre el mismo diseño: al volver a la portada, la cookie custom:<seed> re-sintetiza la web idéntica sin servidor ni base de datos. The same seed + the same text always produce the same design: on return, the custom:<seed> cookie re-synthesizes the identical web with no server and no database.

06

El widget y el deploy (nginx + TLS en Hetzner)The widget and the deploy (nginx + TLS on Hetzner)

La píldora «Quiero cambiar mi estilo de web» vive en /_infinite/widget.js: cero dependencias, Shadow DOM (no pelea con el CSS anfitrión), bilingüe por navigator.language y respetuosa con prefers-reduced-motion. Los diez index.html no se tocan: la inyección la hace nginx en el momento de servir, y el conjunto se publica en un subdominio nuevo con TLS, sin rozar el dominio corporativo vivo: The "Change my web style" pill lives in /_infinite/widget.js: zero dependencies, Shadow DOM (never fights the host CSS), bilingual via navigator.language and respectful of prefers-reduced-motion. The ten index.html files are never touched: nginx injects the widget at serve time, and everything ships on a fresh TLS subdomain without touching the live corporate domain:

# vhost nginx del subdominio (extracto)
server {
  server_name infinito.cybersenseai.com;
  root /var/www/infinito;
  location / {
    sub_filter '</body>'
      '<script src="/_infinite/widget.js" defer></script></body>';
    sub_filter_once on;
  }
  # TLS via certbot --nginx; A record nuevo → servidor Hetzner
}

ReplícaloReplicate it

El workflow en ocho pasosThe workflow in eight steps

  1. Escribe un concepto radical por sitio y fíjalo en un prompt de build con el contenido real y las reglas (single-file, sin librerías, sin lorem, consola limpia).Write one radical concept per site and lock it into a build prompt with the real content and the rules (single-file, no libraries, no lorem, clean console).
  2. Lanza un worker headless por sitio, todos a la vez, con reintentos idempotentes y log por sitio.Launch one headless worker per site, all at once, with idempotent retries and a per-site log.
  3. Deja que cada worker genere sus assets (gpt-image-2 u otro modelo de imagen) y los optimice a webp.Let each worker generate its own assets (gpt-image-2 or another image model) and optimize them to webp.
  4. Captura cada sitio con Playwright (desktop, scroll, footer, móvil + errores de consola) antes de cada pasada.Screenshot every site with Playwright (desktop, scroll, footer, mobile + console errors) before each pass.
  5. Ejecuta 3 pasadas de crítica obligatoria (mínimo 8 defectos por pasada) con focos distintos: concepto → craft → lupa final.Run 3 mandatory critique passes (minimum 8 defects each) with distinct focuses: concept → craft → final magnifying glass.
  6. Construye la puerta: metadatos de mood, cookie de retorno, matching difuso y motor de síntesis determinista.Build the gateway: mood metadata, return cookie, fuzzy matching and a deterministic synthesis engine.
  7. Inyecta el conmutador de estilo en el deploy (nginx sub_filter), nunca en el código fuente de los sitios.Inject the style switcher at deploy time (nginx sub_filter), never into the sites’ source code.
  8. Publica en un subdominio nuevo con TLS y verifica todo en producción con una última pasada de capturas.Publish on a fresh TLS subdomain and verify everything in production with one last screenshot pass.

Las guías por sitioPer-site guides

Cada universo cuenta cómo se hizoEvery universe tells how it was made