Site institucional e de dados de mercado do DataCattle — reconstrução em Next.js (App Router, TypeScript, Tailwind) do site anterior em WordPress. Ver o spec original para o contexto completo da migração.
npm install
npm run devAbra http://localhost:3000. Sem nenhuma variável de ambiente configurada, os dados de mercado (/graficos) caem automaticamente para dados de exemplo (lib/market/fixtures.ts) e o blog (/artigos) busca o RSS real do Substack.
Outros comandos úteis:
npm run build # build de produção
npm run lint # eslint
npm run test # vitest (rodada única)
npm run test:watch # vitest em modo watch
npm run format # prettier --writeCopie .env.local.example para .env.local e preencha:
| Variável | Uso |
|---|---|
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_REGION |
Acesso ao bucket S3 com os dados de mercado |
S3_BUCKET_NAME |
Nome do bucket (datacattle) |
SUBSTACK_URL |
URL do Substack usado como blog (https://datacattle.substack.com) |
RESEND_API_KEY |
Envio do formulário de contato via Resend — requer domínio verificado |
CONTACT_EMAIL_TO |
E-mail que recebe as mensagens do formulário de contato |
CRON_SECRET |
Protege /api/cron/scrape-mercado contra acionamento público — deve bater com o secret configurado no Vercel Cron |
- Chaves S3 dos ajustes diários:
lib/market/s3.tsassumeajustes-diarios/latest.jsoncomo chave do objeto já alimentado pelo processo externo do usuário — confirmar o nome real e ajustarS3_KEYS.dailyAdjustments. - Mercado Físico: os preços regionais em
/graficosainda usam dado de exemplo (lib/market/fixtures.ts); falta decidir a fonte real (CEPEA regionalizado ou outra). - Licença de dados CEPEA: o indicador é raspado de
cepea.esalq.usp.br, cuja licença de dados é CC BY-NC 4.0 (uso não comercial) — vale confirmar com o CEPEA se o uso comercial do DataCattle precisa de acordo à parte. - Domínio no Resend: o "from" do e-mail de contato (
contato@datacattle.net) precisa de um domínio verificado na Resend antes de funcionar em produção. - Logo:
components/ui/Logo.tsxusa um wordmark de texto provisório — trocar pelo arquivo de marca oficial quando disponível.
- Importar o repositório na Vercel.
- Configurar todas as variáveis de ambiente acima no dashboard do projeto.
vercel.jsonjá define o cron diário (/api/cron/scrape-mercadoàs 06:00 UTC) que atualiza o Indicador CEPEA/B3 no S3.- Apontar o DNS de
datacattle.netpara a Vercel (ação manual do usuário, fora do escopo deste repositório).
O repositório usa Conventional Commits + release-please para automatizar versionamento semântico, CHANGELOG.md e GitHub Releases.
- Commits em
maindevem seguir o padrãotipo(escopo opcional): descrição, por exemplo:feat: adiciona página de artigosfix: corrige scraping do indicador CEPEAchore: atualiza dependênciasfeat!:ou rodapéBREAKING CHANGE:para mudanças incompatíveis
- A cada push em
main, o workflowrelease-please(.github/workflows/release-please.yml) mantém uma PR de release atualizada com o changelog acumulado. - Ao fazer merge dessa PR, o release-please cria automaticamente a tag
vX.Y.Z, atualizapackage.json/CHANGELOG.mde publica a GitHub Release correspondente. - O CI (
.github/workflows/ci.yml) roda lint e testes em toda PR/push paramain.