← Volver al catálogo

🔍 SEO Blog v3 (editorial multinacional — sin programar)

Archivo: /Users/user/rifai-agents/agentes/content/seo-blog-v3.ts · Plist: ninguno encontrado en cron/ · Horario: sin disparador → corre solo en manual

> No existe com.rifai.seo-blog-v3.plist. Es la versión más avanzada de diseño editorial, no desplegada. El motor en producción sigue siendo seo-blog.ts (com.rifai.seo-engine, 8:00).

Qué hace

Generador de blog de "nivel revista multinacional": hero con título + byline "RifKings Editorial" + fecha + read time + contador de comentarios, una imagen descriptiva limpia por sección que rima con el tema, lede emocional, TL;DR dorado, pull-quotes, tabla comparativa, grid de productos del catálogo, CTA premium y tags. Estilo Wired/Monocle/The Verge con CSS embebido profesional y responsive. A diferencia de v1/v2, la IA planifica primero las 6 secciones en JSON y luego se renderiza.

Cómo funciona

1. Carga .env, lee estado propio (data/seo-blog-v3-state.json), elige topic de TOPICS por índice rotativo (cada uno con kicker + emoji).

2. Carga productos patinete del catálogo Shopify (filtro por tipo "Sporting Goods" y fallback por regex de título).

3. Pide a gemini-cli (sonnet) un JSON estricto con: lede, tldr_bullets, 6 sections (kicker, title, image_prompt, body HTML con pull-quote), comparison (tabla), cta_text, tags.

4. Genera la imagen hero con fal.ai (flux/schnell, 16:9) y la compone con Sharp (composeHero: título + kicker dorado + meta byline/fecha/read time + branding).

5. Genera en paralelo una imagen por sección (fal.ai) y la limpia/redimensiona con Sharp (composeSectionImage, sin texto incrustado); cada una sube a fal storage. El prompt KICK_PROMPT es muy agresivo anti-moto/Vespa/moped.

6. Construye el HTML completo (CSS .rk-* + hero + meta + lede + tldr + secciones + tabla + grid de productos + CTA + tags + byline).

7. Publica POST /blogs/{BLOG_ID}/articles.json (published:true) y notifica vía router (seo_audit).

Datos/APIs

  • Shopify Admin REST (/admin/api/2024-10, BLOG_ID=75567464627). Vars: SHOPIFY_STORE, SHOPIFY_ACCESS_TOKEN.
  • fal.ai (flux/schnell + storage). Var: FAL_API_KEY.
  • LLM local tools/gemini-cli (sonnet) — aquí la variable se llama GEMINI_BIN pero apunta al mismo binario.
  • Notificaciones: tools/notify-router.ts (evento seo_audit).
  • No usa Brain ni Telegram directo.

Cómo probarlo

cd /Users/user/rifai-agents && npx tsx agentes/content/seo-blog-v3.ts

Espera: topic, productos, plan con 6 secciones, hero, imágenes por sección, "HTML generado: N chars" y ✅ Publicado: <url>. No respeta día de la semana: publica siempre que se ejecute y escribe de verdad en Shopify.

Si se rompe / recuperar

No tiene plist que recargar. Para automatizar, crear un plist hacia este archivo (evitando solapar con seo-engine 8:00) y launchctl load. Sin programación, salida a stdout en manual. Estado propio en data/seo-blog-v3-state.json. Fallos típicos: JSON del plan inválido (exit 1), catálogo sin patinetes, fal.ai sin imagen (la sección queda sin foto pero sigue).

Cómo replicarlo

  • Lector .env + TOPICS con kicker/emoji + estado propio.
  • Shopify REST para productos (filtro tipo + fallback regex).
  • LLM local que devuelve un PLAN JSON (lede, tldr, 6 secciones, comparison, cta, tags).
  • fal.ai hero + 1 imagen por sección; Sharp composeHero (título+meta) y composeSectionImage (resize limpio).
  • Sistema de plantillas HTML con CSS .rk-* (responsive, pull-quotes, grid productos, CTA dorado).
  • Shopify article POST + notify-router seo_audit.