7

Pitch: O que dá quando mistura AGRO e TECH ?

Como construímos o portal Farmify: dados reais do agronegócio + time de redação com agentes IA

O Portal Farmify é um portal de notícias e dados do agronegócio brasileiro. Nasceu da necessidade de um lugar que juntasse cotações em tempo real, dados climáticos, safra, exportações e análise editorial — num produto que produtores rurais, traders e agrônomos realmente usam.

Este artigo descreve o que construímos: stack, APIs integradas e a parte que mais me orgulho — um time editorial de agentes IA que reescreve e publica conteúdo automaticamente.


Stack

Frontend

  • React 19 + Vite + TypeScript
  • Tailwind CSS v4 (via @tailwindcss/vite, design system 100% CSS com @theme)
  • Leaflet para mapas interativos do Brasil
  • Fontes: Barlow Condensed (títulos), Plus Jakarta Sans (corpo), Fraunces (serif editorial)

Backend

  • Node.js + Express + TypeScript
  • Deploy no Render
  • Supabase (PostgreSQL gerenciado + realtime)
  • Upstash Redis (cache L2 distribuído + locks distribuídos)
  • Cloudflare R2 (sitemap + assets estáticos)

APIs reais integradas

O painel de dados do Farmify consome de verdade:

FonteO que puxa
CEPEA/ESALQCotações de commodities (soja, milho, boi gordo, café, algodão...)
CONABProgresso de safra por cultura e estado
ComexStat (MDIC)Exportações brasileiras (volume, valor, destinos)
B3Contratos futuros (SFI, CCM, BGI, ICF, WDO)
BCB FocusExpectativas de mercado: IPCA, PIB, Selic, câmbio
USDA WASDERelatório mensal de oferta e demanda global
USDA NASSDados de produção agropecuária dos EUA
FRED (St. Louis Fed)Macros americanas
INPEFocos de queimadas em tempo real
Open-MeteoClima ao vivo para capitais + mapa climático nacional
INMETDados meteorológicos nacionais
IBGE SIDRADados estruturais do agronegócio brasileiro
FAO FAOSTATDados globais de produção e comércio alimentar
CFTCPosições de não-comerciais (especuladores) nos futuros agro EUA

Tudo isso alimenta widgets no painel: radar macro, progresso de safra, exportações em ticker, mapa de queimadas, clima das capitais e tabela de cotações regionais.


O desafio de infra no Render 512MB

O backend roda num plano starter do Render com memória bastante limitada. Isso forçou algumas decisões:

  • Boot assíncrono em cascata: crons não disparam todos de uma vez. CRON_START_DELAY_MS=30000 + gap de 8s entre cada um evita pico de memória na inicialização.
  • Lock distribuído via Redis: extractionLock e openMeteoSyncLock usam Upstash para garantir que crons simultâneos (em caso de restart) não corram em paralelo.
  • Cache em dois níveis: cache em memória com TTL (ttlCache.ts) + Redis como L2. Dados de APIs externas ficam cachados; só chama a API quando o cache expira.

O time editorial de agentes IA

Essa é a parte mais interessante do projeto.

Quando nossos scrapers capturam uma notícia de fontes como Globo Rural, Notícias Agrícolas etc., ela entra num pipeline editorial automatizado onde agentes IA reescrevem e publicam o conteúdo com a voz do Farmify.

Pipeline de 6 papéis

Notícia bruta → [Repórter] → [Editor-Chefe] → [Especialista Técnico]
              → [Especialista SEO] → [Revisor] → [Publicador] → Artigo publicado

Cada agente tem um papel fixo com tarefa específica:

AgenteTarefa
RepórterExtrai fatos principais e reescreve com voz Farmify
Editor-ChefeMelhora narrativa, fluidez, estrutura, título e subtítulo
Especialista TécnicoValida termos agrícolas, enriquece com contexto útil ao produtor
Especialista SEOOtimiza headings, keywords, Google Discover, gera FAQ
RevisorCorrige português, concordância, repetições
PublicadorGera slug, meta title, meta description, tags e categoria sugerida

Personas com identidade própria

Cada passo do pipeline pode ter uma persona associada — um agente com nome, cargo, especialidade, DNA editorial, goals e regras próprias. A persona é configurável pelo admin: você pode ter "Ana Lima, repórter especialista em soja" rodando num modelo, e "Carlos Mendes, editor-chefe sênior" rodando em outro.

Isso significa que o time editorial é configurável via painel admin — sem mexer em código.

Multi-provider

O campo provider na persona aceita: openai, anthropic, gemini, deepseek, mistral, grok, local. Cada agente pode rodar num modelo diferente. Hoje usamos GPT-4o-mini por custo, mas podemos mudar por persona ou por categoria de conteúdo.

Saída estruturada

Cada agente retorna JSON estrito (sem markdown, nunca texto livre). Exemplo do Publicador:

{
  "title": "string",
  "subtitle": "string",
  "summary": "string",
  "content": "string (HTML final)",
  "slug": "string",
  "seoTitle": "string (até 60 chars)",
  "seoDescription": "string (até 160 chars)",
  "seoKeyword": "string",
  "tags": ["string"],
  "suggestedCategoryName": "string"
}

A regra mais importante no prompt de todos os agentes: nunca invente fatos, números, citações ou nomes que não estejam no material original. O enriquecimento técnico só vai para o texto se baseado no conteúdo extraído ou marcado explicitamente como "análise".

Teams configuráveis

O pipeline é definido por um editorial team — uma lista ordenada de steps com role + personaId. O admin pode criar múltiplos times (ex: "time express" só com Repórter + Publicador para breaking news, "time completo" com os 6 agentes para reportagens longas) e definir qual é o padrão.


Geração de artes para Instagram

Além do pipeline editorial, existe um módulo de social generator que usa Puppeteer para renderizar artes HTML/CSS, capturar screenshot e publicar automaticamente via Instagram Graph API.

O processo: o agente gera a legenda com GPT → Puppeteer renderiza o template visual → upload para Meta → publicação agendada. O Upstash Redis serve como lock para evitar colisões de publicação (Meta limita requests e cobra por slot de tempo).


Sitemap automatizado

O sitemap é gerado em chunks, salvo no Cloudflare R2 e servido via CDN (cdn.farmify.com.br). Após cada atualização, o sistema faz ping automático para os motores de busca. Cron a cada 6 horas, com debounce de 30s para mudanças em rajada.


O que aprendemos

APIs de dados agro são inconsistentes. CEPEA usa scraping de tabelas HTML. CONAB muda o formato do CSV sem aviso. ComexStat tem rate limit agressivo. USDA WASDE é um PDF que você precisa parsear. Cada integração é um projeto por si só.

Pipeline de agentes exige prompt engineering disciplinado. A tentação de deixar o LLM "ser criativo" é grande — mas num portal de agronegócio onde você está falando de preço de soja por saca, a alucinação é um problema real. Output JSON estruturado + regra de não inventar fatos resolveu a maior parte dos problemas.

Configurabilidade via banco de dados tem custo. Deixar personas e times configuráveis pelo admin é poderoso, mas significa que bugs de configuração aparecem em runtime, não em compile time. Valeu a pena, mas exigiu boa validação no agentRegistry.


Próximos passos

  • Suporte a categorias por persona (repórter especialista em café cobre só categoria Café)
  • Painel de métricas do pipeline: tokens consumidos, custo por artigo, tempo por step
  • Teste A/B de personas: comparar output de dois agentes no mesmo papel

Se você está construindo algo similar — portal de nicho com dados de APIs externas + pipeline editorial IA — fico feliz em trocar ideia nos comentários.

O Portal Farmify está disponível em [https://portal.farmify.com.br]

Carregando publicação patrocinada...
1
2

Estamos bem perto do lançamento oficial, impulsionar com tráfego pago etc..
Espero num futuro breve trazer uma versão atualizada do desafio que vai ser enfrentar uma onda grande de acessos, com milhares de notícias sendo lidas e processadas por agentes simultaneamente.
E de preferência ainda lidando com um server limitado (e grátis)

1

Projeto legal! Obrigado por compartilhar parte da trajetoria e dos desafios

Gostei da pipeline apresentada, evita grande parte dos delirios.

Duvida: Toda noticia bruta que chega no scarpper passa pela pipeline e é publicada ou tem algum filtro no caminho? de assuntos já publicados e/ou de assuntos de baixa relevância?

2

Estamos evoluindo equipes de agentes, atualmente temos uma equipe padrão, que toda notícia chega e cai diretamente nela, mas a ideia é que dependendo do tema central da noticia original ele vai ativar equipes especializadas no nicho específico e complementar aquela notícia; exemplo: "Safra da soja caiu drasticamente", ele vai direcionar a equipe de "soja" que além de especialistas "genéricos" na produção de conteúdo, tem cientistas, especialistas em mercado e números etc, e eles buscam noticias relacionadas recentes para trazer uma matéria/artigo mais completo, atualizado e com comparativos reais.
A partir daí o céu é o limite...

1

Meus 2 cents,

Parabens pela iniciativa !

Antigamente precisavamos de uma equipe de 7-10 pessoas para manter um portal semelhante - hoje da para fazer um projeto "solo" (ou quase isso) de boa: Impressionante !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

1

Hoje estamos percebendo "a dor" que uma agência tinha antigamente, porém com agentes de IA... No total hoje já passam de 27 agentes disponíveis para trabalho 24 horas por dia na nossa redação.