Procedimiento real del pipeline

Qué pasa entre --url y un HTML servido. Cada paso etiquetado por quién lo ejecuta (TS determinista / Claude Opus / Qwen 27B local) y cuánto tarda.

scripts/demo_pipeline.py + scripts/render_freestyle.py · vLLM Qwen 27B FP8 · Claude Opus 4.7 (Plan)

1. Pipeline compartido (extracción + composición)

Pasos comunes a los tres outputs. Determina el payload.json que luego renderiza cada modo.

STEP 01

Scrape DOM

Playwright
Playwright en Docker carga la URL, extrae texto + metadatos del DOM como TOON estructurado.
/tmp/leadforge_dom/<slug>.toon
STEP 02

Analyzer

Claude Opus (CLI)
Infiere brand_profile a partir del TOON: nombre, tagline, niche, paleta hex, typography_vibe, radius, contacto.
brand_profile
STEP 03

Composer

Claude Opus (CLI)
Elige sections (hero, value_props, services, process, social_proof, faq, about, cta, contact, footer) y rellena cada una con copy específico.
sections: Section[]
STEP 04

Assemble

Python
Ensambla y valida LandingPayload v2.
payload.json
STEP 05

Write

Python
Escribe a disco. Termina el pipeline shared.
previews/<slug>/payload.json
STEP 06 — diverge

Render HTML

3 caminos
El mismo payload.json produce tres HTML distintos según qué renderer corra. Ver bloque siguiente.
previews/<slug>/<variant>.html

2. Step 06 · Los dos renderers

Mismo payload.json entra. Default = tier base instantáneo. Opus = tier premium por marca.

Default tier base

Renderer TS determinista. Sin LLM, sin tokens, instantáneo.

payload.json
cf-worker-template/src/landing.ts
index.html
· TS determinista, 1004 líneas, mismo CSS para toda marca.
  • Sin LLM en el render
  • CSS parametrizado por 5 variables
  • Reproducible 100 %, instantáneo
  • Identidad genérica — sirve solo para volumen bajo coste
Inferencia:
0 tokens
Coste:
$0
Latencia render:
< 50 ms
Identidad:
genérica

Opus freestyle tier premium

Sin templates, sin schema rígido. Opus piensa y produce el HTML en una pasada.

payload.json + scrape
Claude Opus 4.7 (designer system prompt)
index.html
· Opus recibe brand + scrape y produce HTML/CSS/JS completo.
· Identidad y componentes 100 % a su criterio.
  • Opus controla diseño y código
  • Coste real: ~$0.50 – $2 por landing
  • Latencia: 2–4 min (claude CLI subprocess)
  • En producción: añadir screenshot diff + Lighthouse + axe gate
Inferencia:
~33-36 KB HTML output
Coste:
~$0.50 – $2 / landing
Latencia render:
~3 min
Identidad:
premium por marca

Decisión: dónde va cada modelo

El modelo local (Qwen 27B) se reserva para los pasos de alto volumen y bajo valor. Opus se concentra en el render visual que se factura.

Step del pipelineModeloRazón
Scout (Google Places + IG + SerpAPI)Qwen localbúsqueda masiva, mucho input
DedupeBGE-M3embeddings, no LLM
Analyzer (DOM → brand_profile)Qwen localconsume scrape entero como input
Composer (sections + copy)Qwen localalto volumen de tokens
Render landing HTMLClaude Opusvalor vendible — calidad importa
Outreach (email + IG + WhatsApp)Qwen localvolumen 10k+ mensajes, Opus quebraría margen
Review / scoringQwen + heurísticastext classification barato

3. Comparación cruda

Atributo Default Opus freestyle
¿Quién escribe el HTML?TS deterministaClaude Opus 4.7
Sin templates fijosno
Latencia render< 50 ms~3 min
Coste tokens$0~$0.50 – $2
Tier sugeridovolumen bajo coste$5k – $15k por landing
Volumen viable / díainfinito~50–300 (rate-limit Anthropic)

4. Timeline real medido (okastore.net + meg4.dev)

T+0s

Disparo del pipeline shared

python3 scripts/demo_pipeline.py --url https://okastore.net --force

T+10.7s

Step 01 · Scrape

Playwright Docker → 6 KB TOON

T+15.6s

Step 02 · Analyzer (Claude CLI)

4.9 s. brand_profile detectado: name=OkaStore, palette warm-dark, typography=neo-grotesk.

T+50.3s

Step 03 · Composer (Claude CLI)

34.7 s. 10 sections producidas.

T+50.5s

Step 04-05 · Assemble + write

payload.json · 8 KB

T+50.5s · Step 06

Renderers ejecutándose en paralelo

scripts/render_freestyle.py --mode full-opus (Opus): 190 s.

scripts/render_freestyle.py --mode mix (Opus brief 163 s + Qwen render ~15-20 min).