Fonte diária de informação do produtor rural da região do Araguaia (sul do PA / nordeste do MT): cotações que importam, o preço da praça na voz de quem está na lida, chuva e boletim — tudo grátis, atualizado todo dia.
Plataforma de informação agropecuária da região do Araguaia. No ar em agroapp-bay.vercel.app com 12 cotações (gado, grão, câmbio, ouro, bolsa e cripto), boletim diário, previsão de chuva e o Termômetro da Praça — construída em fatias verticais finas, cada uma com spec, plano, testes e deploy verificado.
- 🟢 Estado atual e ponto de retomada:
ESTADO-DO-PROJETO.md - 📄 Conceito completo do produto:
conceito-praca-araguaia.md - 🧭 Specs e planos de cada fatia:
docs/superpowers/
Seis categorias — boi gordo, vaca gorda, novilha, bezerro (arroba; o bezerro por cabeça) e soja, milho (saca de 60 kg) — em cards de mesmo tamanho, lado a lado: preços em cima, Termômetro embaixo. Boi e vaca trazem as três cidades do Pará (Marabá, Paragominas, Redenção) e uma linha por estado (Mato Grosso, Tocantins, Goiás, Bahia, Maranhão), com o valor da praça de referência da Scot mais próxima do Araguaia. Cada card credita quem apurou e quando: a CONAB fecha a semana, a Scot fecha o dia. O Termômetro traz o que os produtores reportaram nas cidades, com o convite a reportar já no produto certo.
O Ouro aparece em R$ por grama (metal fino, 999) — a cotação de mercado. O Ibovespa aparece em pontos, sem R$ na frente: índice não é dinheiro. Cada linha traz a mini-tendência de 30 dias.
| Página | O que oferece |
|---|---|
/ — Notícias do Mercado |
Home com as notícias do agro/pecuária/mercado, agregadas de 9 veículos (RSS), com foto e seção por assunto. O ticker de preços fica no topo de todas as páginas. |
/cotacoes — a praça hoje |
Na porteira, 6 categorias: boi e vaca pela Scot (3 cidades do PA + uma praça de referência por estado — MT, TO, GO, BA, MA), novilha e bezerro (Scot, reposição por estado) e soja e milho (CONAB, por estado) — cada card também mostra o que os produtores reportaram nas cidades. No mercado, 6 cotações com mini-tendência de 30 dias: dólar, euro, ouro (R$/g), Ibovespa, bitcoin e ethereum. Topo com ticker e a cidade/UF + temperatura do usuário (geolocalização). |
/cotacao/[tipo] |
Gráfico de tendência de cada cotação, com toggle 7 / 30 / 90 dias. |
/boletim |
Card-resumo do dia em PNG 1080×1960 (via next/og/Satori) pronto para Instagram/WhatsApp, com botão de download. Enviado também no Telegram todo dia. |
/chuva |
Sua região primeiro (previsão da localização do usuário) e depois os 5 municípios da praça — chuva, probabilidade e temperatura de 7 dias (Open-Meteo). O card da sua região é o mesmo componente dos municípios: uma linha de dia lida do mesmo jeito em todos. |
/termometro |
Termômetro da Praça: o "valor típico" (mediana) dos preços reportados por produtores nos últimos 7 dias, nas 6 categorias da porteira, por município, contrastado com a referência oficial. |
/termometro/reportar |
Reporte de preço anônimo (sem cadastro), com faixa de plausibilidade, honeypot e limite por IP. O convite no card já abre no produto certo (?produto=). |
/fornecedores |
Vitrine de fornecedores da praça (contato direto por WhatsApp). Qualquer um se cadastra em /fornecedores/anunciar; só entra no ar depois da moderação. |
/calculadora |
Calculadora do produtor, em quatro contas: gado na balança (boi, vaca ou novilha: peso vivo + rendimento → arrobas), lote de bezerro (por cabeça), colheita de grãos (sacas) e mercado (o que você tem em dólar, euro, ouro ou cripto, em reais). O preço da praça já vem preenchido. |
/moderar |
Moderação pelo celular (senha): abas de preços e fornecedores — aprovar/rejeitar/remover sem abrir o banco. |
Tudo apoiado em fontes públicas e gratuitas — sem provedores pagos e sem dados pessoais. Alertas e boletim também chegam pelo bot @pracaaraguaia_bot no Telegram.
| Categoria | Fonte | Unidade | Ritmo |
|---|---|---|---|
| Boi gordo, vaca gorda | Scot Consultoria — praça a praça (3 cidades do PA + praça de referência de MT/TO/GO/BA/MA) | R$/@ | diário |
| Novilha, bezerro | Scot Consultoria — reposição por estado | R$/cabeça | diário |
| Soja, milho | CONAB (PrecosSemanalUF.txt, arquivo público) |
saca 60 kg | semanal (fecha seg–sex) |
| Dólar, euro | BCB · Frankfurter | R$ | diário |
| Ouro | gold-api (onça troy) × USD-BRL | R$/g | diário |
| Ibovespa | B3, via Yahoo Finance (^BVSP) |
pontos | diário |
| Bitcoin, ethereum | CoinGecko | R$ | diário |
| Chuva | INMET · CEMADEN · Open-Meteo | mm | diário |
| Termômetro | reportes dos próprios produtores | R$/@ | contínuo |
A CONAB só publica boi/soja/milho por estado (
BOI|GORDO, sem vaca/novilha/bezerro), e por estado a granularidade some — o produtor negocia na praça, não no "preço do Pará". Por isso boi e vaca vêm da Scot, praça a praça: as três cidades do Pará e uma linha de referência por estado vizinho. Novilha e bezerro são reposição (também Scot). Cada card diz na cara quem apurou o preço e em que dia.
Direção "fazenda moderna premium" — editorial, paleta terra, sem cara de dashboard genérico.
| Elemento | Escolha |
|---|---|
| Tipografia | Playfair Display (display serifada, títulos) · Archivo (UI e números) · JetBrains Mono (dados, ticker, timestamps) — via next/font |
| Paleta | Areia (bone #F1EBDE), papel (#FBF8F1), oliva (#3F4A24), couro (#6E3E1E), ocre (#B4863B); alta em musgo (#6B8339), baixa em tijolo (#A63A26) e chuva em água (#45707C) — nunca neon |
| Marca | "Broto no sulco" — a folha nascendo da terra lavrada, num selo de osso com o anel oliva. Ela balança de leve no vento (some em prefers-reduced-motion) e fica parada no favicon, no card do bot e no OG. Desenho único em lib/marca.ts, consumido pelos quatro. |
| Navegação | Menu inline no desktop; abaixo de 900px, hambúrguer + gaveta lateral (fecha no Esc, no fundo e ao navegar; trava o scroll enquanto aberta) |
| Assinatura | Cards que abrem com a foto do produto (escurece e revela os dados), grão de papel sutil, filetes finos, ticker de pregão rolante e o hero com um touro nelore no pasto |
Os tokens vivem no @theme do Tailwind v4 (app/globals.css); cada componente mora à distância de quem o usa (ver AGENTS.md).
Duas trilhas de dados: a coleta agendada das cotações (cron diário) e o fluxo de reportes do Termômetro (anônimo, moderado). Ambas convergem no Supabase, e as páginas leem com a chave anon sob RLS.
flowchart TD
subgraph Fontes["Fontes públicas gratuitas"]
CONAB["CONAB<br/>soja · milho"]
GADO["Scot Consultoria<br/>boi · vaca · novilha · bezerro"]
CAMBIO["BCB · Frankfurter · gold-api · CoinGecko<br/>dólar · euro · ouro · cripto"]
METEO["Open-Meteo<br/>chuva"]
end
subgraph Coleta["Coleta agendada"]
CRON["Vercel Cron 1×/dia"] -->|Bearer CRON_SECRET| COLETAR["GET /api/coletar"]
CONAB --> COLETAR
GADO --> COLETAR
CAMBIO --> COLETAR
end
subgraph Reportes["Termômetro da Praça"]
PROD["Produtor"] -->|preço anônimo| REPORTAR["POST /api/reportar<br/>honeypot · faixa · rate-limit"]
MOD["Moderador"] -->|senha + cookie HMAC| DECIDIR["POST /api/moderar/decidir"]
end
COLETAR -->|service role| DB[("Supabase / PostgreSQL<br/>RLS: leitura pública<br/>escrita só service role")]
REPORTAR -->|service role| DB
DECIDIR -->|service role| DB
DB -->|anon key| PAGES["Páginas Next.js<br/>painel · gráficos · boletim · termômetro"]
METEO -->|ISR/dynamic| PAGES
Princípio de design: cada fonte de cotação é desacoplada da orquestração (lib/fontes/* ↔ lib/coleta.ts via a porta CotacaoRepo), então adicionar uma cotação é registrar uma função — sem tocar no resto. A lógica de negócio (mediana, faixa, agregação, validação, sessão de moderação) vive em módulos puros e testados em lib/, separada da apresentação.
Cada funcionalidade é uma fatia vertical fina que percorre o ciclo completo antes da próxima começar: brainstorming → spec → plano → implementação (TDD) → review → deploy verificado.
timeline
title Fatias entregues e no ar
Fatias 1–3 : Painel + dólar (AwesomeAPI→BCB) : Gráfico 7/30/90d + backfill : Euro e ouro + registry de fontes
Fatia 4 : Commodities CONAB (boi, soja, milho)
Fatia 5 : Boletim diário em PNG
Fatia 6 : Previsão de chuva
Fatia 7 : Redesign visual (identidade própria)
Fatias 8–9 : Termômetro T1 (reporte + RLS) : Termômetro T2 (moderação pelo celular)
Fatias 10–11 : Mediana + faixa (robustez) : Histórico do Termômetro
| Camada | Tecnologia |
|---|---|
| Front + back | Next.js 15 (App Router), TypeScript (strict), Tailwind CSS v4 |
| Tipografia | Playfair Display · Archivo · JetBrains Mono (via next/font) |
| Banco / Auth | Supabase (PostgreSQL + Row Level Security) |
| Gráficos | Sparklines em SVG puro · Recharts (detalhe) |
| Imagem do boletim / OG | next/og (Satori) — PNG gerado no servidor |
| Geolocalização | Vercel Edge Geo (IP) + Open-Meteo (temperatura) |
| Coleta / envio agendados | Route Handlers + Vercel Cron (coleta · boletim · alertas) |
| Bot | Telegram Bot API (inscrição, boletim, alertas) |
| Testes | Vitest + Testing Library (578 testes) |
| Deploy | Vercel (auto-deploy no push, ISR, cron) |
agro_app/
├─ app/ # Pasta com _ não vira rota (private folder do Next)
│ ├─ layout.tsx # Casca, metadata padrão e cromo — nada mais
│ ├─ _chrome/ # Masthead, ticker, rodapé, busca: só o layout usa
│ ├─ page.tsx · _home/ # Home (notícias) e o que só ela usa
│ ├─ cotacao/[tipo]/page.tsx # Detalhe + gráfico de tendência
│ ├─ boletim/page.tsx # Card do dia + download
│ ├─ chuva/ # Previsão de 7 dias + _components/
│ ├─ termometro/
│ │ ├─ page.tsx # Valor típico (mediana) por produto
│ │ ├─ _components/ # Usado pela subárvore do termômetro
│ │ ├─ reportar/page.tsx # Reporte anônimo
│ │ └─ [produto]/page.tsx # Histórico (gráfico) do produto
│ ├─ moderar/page.tsx # Moderação protegida por senha
│ └─ api/
│ ├─ coletar · backfill # Coleta/backfill (Cron/segredo)
│ ├─ boletim # PNG 1080×1080
│ ├─ reportar # Recebe reporte anônimo
│ └─ moderar/{login,decidir} # Sessão + decisão da moderação
├─ lib/
│ ├─ fontes/* # Uma fonte por arquivo + registry
│ │ ├─ conab.ts # soja, milho (arquivo semanal por UF)
│ │ ├─ scot.ts # boi, vaca (praça a praça: cidades do PA + estados)
│ │ ├─ pecuaria.ts # novilha, bezerro (reposição por UF)
│ │ └─ ouro.ts # ouro fino em R$/g (onça troy × USD-BRL)
│ ├─ marca.ts · autor.ts # Marca e assinatura (site, favicon, card, OG)
│ ├─ coleta.ts · backfill.ts # Orquestração pura
│ ├─ termometro.ts # Produtos, validação, mediana, faixa
│ ├─ termometro-historico.ts # Mediana diária para o gráfico
│ ├─ moderacao.ts # Token HMAC, sessão, validação
│ ├─ boletim.ts · grafico.ts # View-models puros
│ ├─ formato.ts # Número e data em pt-BR (nunca `new Intl` na página)
│ └─ supabase/{server,public,repo}.ts
├─ components/ # Só o compartilhado por 2+ rotas (+ ui/ do shadcn)
├─ supabase/migrations/ # DDL + RLS versionado
├─ tests/ # 578 testes unitários e de componente
├─ vercel.json # Cron diário → /api/coletar
└─ docs/superpowers/{specs,plans}/ # Spec e plano de cada fatia
- Node.js 18.18+ (recomendado 20+)
- Uma conta Supabase
npm installCrie um projeto e aplique as migrations de supabase/migrations/ em ordem (SQL Editor do Supabase Studio, ou supabase db push com o projeto vinculado):
0001_cotacoes.sql— tabelascotacoesecotacoes_historico+ RLS0002_*— constraint única(tipo, data_referencia)0003_reportes.sql— tabelareportesdo Termômetro + RLS
cp .env.local.example .env.localNEXT_PUBLIC_SUPABASE_URL=https://SEU-PROJETO.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=... # anon / publishable key
SUPABASE_SERVICE_ROLE_KEY=... # service role — NUNCA expor no client
CRON_SECRET=... # segredo forte para a coleta agendada
MODERACAO_SENHA=... # senha da moderação em /moderar
⚠️ SUPABASE_SERVICE_ROLE_KEYeMODERACAO_SENHAsão usadas apenas no servidor. Nunca as coloque numa variávelNEXT_PUBLIC_*.
npm run dev # http://localhost:3000A primeira coleta popula o painel (a tela começa vazia):
curl -H "authorization: Bearer SEU_CRON_SECRET" http://localhost:3000/api/coletar| Comando | O que faz |
|---|---|
npm run dev |
Servidor de desenvolvimento |
npm run build |
Build de produção |
npm start |
Sobe o build |
npm test |
Roda os testes (Vitest) |
npm run test:watch |
Testes em watch mode |
npm run lint |
ESLint |
- Conecte o repositório à Vercel — cada
git pushnamasterdispara o deploy. - Defina as 5 variáveis de ambiente (as mesmas do
.env.local) no projeto, marcadas para Production. - O agendamento em
vercel.jsonchama/api/coletar1×/dia; a Vercel injetaAuthorization: Bearer ${CRON_SECRET}automaticamente.
cotacoes -- último valor "vivo" por tipo (1 linha por tipo)
tipo, valor, unidade, variacao_pct, fonte, data_referencia, atualizado_em
cotacoes_uf -- o preço por estado (soja/milho/novilha/bezerro), 1 linha por (tipo, uf)
tipo, uf, valor, unidade, variacao_pct, data_referencia, atualizado_em
cotacoes_praca -- boi e vaca da Scot, praça a praça, 1 linha por (tipo, praca, uf)
tipo, praca, uf, valor, unidade, valor_prazo, variacao_pct, data_referencia, atualizado_em
cotacoes_historico -- série temporal append-only (alimenta os gráficos)
tipo, valor, fonte, data_referencia, created_at
reportes -- Termômetro da Praça: preços reportados, moderados
produto, municipio, valor, status (pendente/aprovado/rejeitado), ip_hash, criado_emRLS desde o início: SELECT público (em reportes, só linhas aprovado); INSERT/UPDATE/DELETE revogados de anon/authenticated — toda escrita passa pelo service role no servidor.
- Painel de cotações + coleta diária do dólar
- Gráfico de tendência (toggle 7/30/90) + backfill
- Euro e ouro — coleta/backfill multi-fonte resiliente
- Commodities via CONAB: boi gordo, soja, milho
- Boletim diário em card PNG (Satori)
- Previsão de chuva por município
- Redesign com identidade visual própria
- Termômetro da Praça: reporte anônimo + moderação pelo celular
- Mediana + faixa (robustez) e histórico do Termômetro
- Calculadora do produtor (lote de boi + colheita)
- Bot de Telegram: inscrição, boletim diário e alertas de movimento (gratuito)
- Vitrine de fornecedores com submissão pública + moderação
- Redesign "fazenda moderna premium" + geolocalização do usuário
- Menu hambúrguer no celular + marca nova ("broto no sulco") em site, favicon, card e OG
- Porteira completa: vaca gorda, novilha e bezerro (Scot), além do boi
- Boi e vaca praça a praça (Scot): cidades do PA + uma praça de referência por estado
- Notícias do Mercado como home (9 veículos, RSS) + busca funcional
- Ouro (R$/g) e Ibovespa no mercado
- Termômetro nas 6 categorias da porteira (antes só o boi)
- Calculadora com gado, bezerro, colheita e mercado (ouro, câmbio, cripto)
- Verificação do produtor (OTP) e reputação — dependem de provedor pago; em avaliação
Cada fatia segue o ciclo spec → plano → implementação, documentado em docs/superpowers/.
Projeto privado. Todos os direitos reservados.









