--- name: Blog GoTechBr imagens com fallback chain description: BlogPostGenerator no site GotechBr nunca mais salva post sem imagem - cadeia Pixabay + Loremflickr + GD branded com trava antes do INSERT type: project originSessionId: c010475f-ff9d-400a-9abf-0c6844cef5c7 --- # Blog GoTechBr — imagens dos posts Site `D:\xampp\htdocs\GotechBr` (deploy em `/home/gotechbr/public_html/`). Posts ficam em `site_blog_posts` no DB da intranet (`gotechbr_intranete`). ## Como uploads sao servidos - DB guarda so o nome do arquivo em `imagem_destaque` (ex: `seguranca-na-web-1773284405-2194.jpg`) - Pasta fisica: `/home/gotechbr/public_html/sistema.gotechbr/uploads/site/blog/` (intranet) - Site GotechBr le via `upload_url('blog/' . $post['imagem_destaque'])` - `UPLOAD_BASE_URL` no `/home/gotechbr/public_html/.env` = `https://sistema.gotechbr.com.br/site-img/` - Rota CI4 `site-img/(:segment)/(:segment)` em `app/Config/Routes.php` linha 1708 → `SiteUploads::serve` - View do blog: `app/Views/site/noticias.php` linha ~41 ## Fix do BlogPostGenerator (2026-04-28) `app/Libraries/BlogPostGenerator.php` — `buscarImagem()` agora retorna `string` (nunca null) com 3 camadas: 1. **Pixabay** (foto de qualidade) — chave `PIXABAY_API_KEY` no `/home/gotechbr/public_html/.env` (NAO no .env da intranet). Valor real: `24153424-be1776f84b1611e9916de2b82` 2. **Loremflickr** (`https://loremflickr.com/1200/630/{termo}`) — substitui `source.unsplash.com` que esta morto (HTTP 503 desde 2024). Foto Flickr CC, sem key 3. **`gerarCapaGD()`** — capa local com gradiente verde GoTechBr + titulo escalado + tag de categoria colorida. Nao depende de nada externo, sempre funciona Trava extra em `gerarPost()`: ```php if (empty($imagem)) { $imagem = $this->gerarCapaGD($conteudo['titulo'], $temaKey); } ``` Garante que **fisicamente nao da pra inserir post sem imagem**. ## Mapeamento de cores por categoria (em `gerarCapaGD`) - marketing_digital: laranja (#FF6B35) - redes_sociais: rosa (#E91E63) - desenvolvimento_web: roxo (#673AB7) - seo: verde (#27AE60) - design_grafico: roxo claro (#9B59B6) - tecnologia: azul (#0066CC) - empreendedorismo: vermelho (#FF5722) - google_ads: azul Google (#4285F4) ## Atencao - Servidor tem OPcache `validate_timestamps=0` → sempre `pkill php-cgi` apos deploy - Rodar npm install no servidor Baileys NAO afeta este modulo (e PHP no servidor de hospedagem diferente) - Cron de geracao de post: endpoint `/cron/gerar-post?token=CRON_SECRET_TOKEN` em `Noticias::cronGerarPost`. Intervalo minimo 21600s (BLOG_CRON_INTERVAL), limite diario 4 (BLOG_DAILY_LIMIT)