📄 Cópia local — fonte de verdade no GitHub. Origem:
Posicionamento-Digital/cadencia-growth/main/docs/blog-instagram-gen.mdSincronizar via/documentar-softwareousync_to_framework.py.
blog-instagram-gen — geração de blog e Instagram (VPS)¶
TL;DR¶
2 scripts de geração que rodam na VPS: blog_generate.py gera post de blog e faz deploy via webhook. instagram_generate.py gera legenda/hashtags para Instagram (a publicação em si é feita pelos workers Coolify VPS Master).
Identidade¶
- Tipo: Python scripts
- Paths (VPS
/cadencia/): pipeline/blog_generate.pypipeline/instagram_generate.py- Status: ativo
- Deps:
published_posts,tenant_config, cadencia-blog webhook
blog_generate.py¶
- Gera post de blog via LLM (conteúdo long-form baseado no editorial do post)
- Salva em
published_posts.blog_content+published_posts.published=true - Chama
POST /api/publishno blog tenant (cadencia-blog) para revalidar cache - Se blog falha →
trigger_server.pyaborta o restante da pipeline (G — blog é pré-requisito)
instagram_generate.py¶
- Gera caption + hashtags para Instagram
- NÃO publica — publicação via
instagram_publisher.pynos workers Coolify VPS Master - Salva em
published_posts.instagram_caption
Don'ts¶
- Blog failure = abort da pipeline. Fix bugs aqui tem prioridade
instagram_generate.pyna VPS einstagram_publisher.pynos workers são coisas diferentes
Quando usar¶
- Cron diário 11h BRT — blog gera primeiro, instagram depois (usa blog como insumo).
- Trigger on-demand para canais
blogeinstagram.
Quando NÃO usar¶
- ❌ Para carrossel/reels (workers Coolify VPS Master).
- ❌
trial/essencial/starterfora de seg+qui (frequência restrita). - ❌ Blog em batch concorrente — gera duplicação.
Por que funciona assim¶
- Blog primeiro (insumo) → Instagram + LinkedIn derivam dele.
- Render HTML em template Jinja → publicação automática no
cadencia-blog(Next.js estático, white-label por tenant).
🚫 Don'ts¶
- Não rodar 2 instâncias do
blog_generate.pysimultaneamente para o mesmo tenant — duplica post. - Não ignorar coluna
research_documentscorreta no schema. - Não publicar Instagram sem blog do dia.
🪦 Já tentamos¶
- 2026-04-25 — Blog batch concorrente posts duplicados: ver
2026-04-25_blog-batch-concorrente-posts-duplicados.md. - 2026-04-25 — Blog generate coluna research errada: ver
2026-04-25_blog-generate-coluna-research-errada.md. - 2026-04-21 — Disparo blog hang sem timeout subprocess: ver incident.
🔥 Troubleshooting¶
| Sintoma | Causa provável | Fix |
|---|---|---|
| Post duplicado | Batch concorrente; sem lock | Lock pessimista por tenant antes de gerar |
| Coluna research errada | Schema mudou, código antigo | Reconciliar research_documents column name |
| Blog trava 100% CPU | Subprocess sem timeout | Adicionar timeout= |
📚 Referências cruzadas¶
- linkedin-generation — Consumidor
- seinfeld-email — Derivado do blog
- blog-tenant — Destino de publicação