🔍 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 llamaGEMINI_BINpero apunta al mismo binario. - Notificaciones:
tools/notify-router.ts(eventoseo_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+TOPICScon 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) ycomposeSectionImage(resize limpio). - Sistema de plantillas HTML con CSS
.rk-*(responsive, pull-quotes, grid productos, CTA dorado). - Shopify article POST + notify-router
seo_audit.