← Volver al catálogo

🔍 SEO Blog v2 (visual editorial — sin programar)

Archivo: /Users/user/rifai-agents/agentes/content/seo-blog-v2.ts · Plist: ninguno encontrado en cron/ · Horario: el código se autolimita a Mar/Jue/Sáb, pero NO hay plist → hoy NO corre solo (solo manual / FORCE_BLOG=1)

> No existe com.rifai.seo-blog-v2.plist. El motor SEO en producción es seo-blog.ts (com.rifai.seo-engine, 8:00). Este v2 es una evolución visual no desplegada.

Qué hace

Generador de blog editorial más visual que v1: incrusta el TÍTULO dentro de la imagen hero (con Sharp), inserta 6-8 imágenes inline temáticas (personas, emoción, contexto urbano, nunca fondo blanco) y da una imagen propia a cada H2. Genera el artículo (1500-2000 palabras) con el LLM y lo publica en el blog "news" de Shopify. Solo modo BLOG (no toca SEO de productos).

Cómo funciona

1. Carga .env, calcula día Madrid, lee estado (data/seo-engine-state.json, compartido con v1). Solo actúa Mar/Jue/Sáb o con FORCE_BLOG=1.

2. Elige topic de BLOG_TOPICS (cada topic trae su bgPrompt para el hero) evitando los 5 últimos.

3. Busca productos relevantes vía GraphQL Shopify.

4. Genera 7 imágenes en paralelo con fal.ai (flux/schnell, landscape_16_9): 1 hero + 6 inline, todas con estilo editorial anti-fondo-blanco y anti-moto.

5. composeHero(): con Sharp incrusta título + subtítulo + etiqueta dorada + gradiente sobre la imagen hero; la sube a fal storage.

6. Pide a gemini-cli (sonnet, timeout 300s) el artículo HTML (sin H1, con placeholders {{IMG_2..6}} y {{PRODUCT_CARDS}}), inyectando contexto Brain (identidad + productos relacionados).

7. Sustituye imágenes inline + product cards, envuelve con hero + CSS embebido, publica POST /blogs/{BLOG_ID}/articles.json.

8. Notifica vía router (seo_audit).

Datos/APIs

  • Shopify Admin REST + GraphQL (/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).
  • Brain brain/tools/brain.js (identidad + getRelatedProducts).
  • Notificaciones: tools/notify-router.ts (a diferencia de v1, aquí sí usa router, evento seo_audit).

Cómo probarlo

cd /Users/user/rifai-agents && FORCE_BLOG=1 npx tsx agentes/content/seo-blog-v2.ts

Espera: topic, productos, "7 imágenes editoriales", hero compuesto con título, artículo y ✅ Publicado: <url>. Publica de verdad en Shopify. Sin FORCE_BLOG y fuera de Mar/Jue/Sáb solo imprime "sin blog programado".

Si se rompe / recuperar

No tiene plist que recargar. Para desplegarlo habría que crear com.rifai.*.plist apuntando a este archivo (cuidando de no chocar con seo-engine a las 8:00) y launchctl load. Sin programación no tiene log dedicado (stdout en manual). Estado compartido data/seo-engine-state.json.

Cómo replicarlo

  • Igual base que v1 (.env, BLOG_TOPICS, GraphQL productos, LLM, Shopify article POST).
  • Añade Sharp composeHero para incrustar título sobre la imagen hero.
  • 7 imágenes fal.ai (hero + 6 inline) con prompts editoriales anti-fondo-blanco.
  • Brain (getRelatedProducts) para citar catálogo.
  • notify-router evento seo_audit.