Plataforma de inteligência climática para o agronegócio, focada no manejo operacional da cana-de-açúcar. Oferece visualização em tempo real de indicadores críticos como saldo hídrico (P - ET₀), janelas de pulverização e colheita, com suporte a decisão offline-first e baixa latência.
O Clima para Manejo resolve a lacuna entre dados meteorológicos brutos e a tomada de decisão no campo. Em vez de apenas mostrar a temperatura, processamos variáveis complexas para entregar insights acionáveis:
- Saldo Hídrico Diário: Cálculo automático de Precipitação vs. Evapotranspiração de Referência (FAO-56).
- Janela Operacional: Indicadores claros (Verde/Vermelho) para condições de pulverização e tráfego de máquinas.
- Dados Hiperlocais: Busca precisa por geocodificação global.
Construído com uma arquitetura moderna, escalável e tipada de ponta a ponta.
- Next.js 14 (App Router): Server-Side Rendering (SSR) e otimização de performance.
- TypeScript: Segurança de tipos estrita.
- Tailwind CSS + shadcn/ui: Design system responsivo e acessível (temas Claro/Escuro).
- State Machine: Gestão robusta de estados de UI (loading, erro, sucesso).
- FastAPI (Python): Alta performance assíncrona.
- Redis: Cache distribuído para redução de latência e proteção de rate limit.
- Pydantic: Validação de dados rigorosa.
- Arquitetura Limpa: Separação clara de responsabilidades (Rotas, Serviços, Schemas).
- Docker Compose: Ambiente de desenvolvimento e produção containerizado.
- CI/CD (GitHub Actions): Pipelines automatizados de teste, lint e segurança.
- Vercel: Deploy híbrido (Frontend + Serverless Functions).
- Testes: Pytest (Backend) e Jest/Testing Library (Frontend).
- Segurança: Rate Limiting, Headers HTTP seguros, Scan de vulnerabilidades (Trivy).
A aplicação é totalmente containerizada. Você precisa apenas do Docker e Docker Compose.
-
Clone o repositório:
git clone https://github.com/samdevtx/clima-manejo.git cd clima-manejo -
Configure o ambiente: Copie o arquivo de exemplo (opcional, pois os defaults funcionam):
cp .env.example .env
-
Inicie a aplicação:
docker compose up --build
Acesse em seu navegador:
- Frontend: http://localhost:3000
- API Docs: http://localhost:8000/docs
O projeto está configurado para deploy zero-config na Vercel, utilizando a arquitetura híbrida (Next.js + Python Serverless).
Configure as seguintes variáveis no painel da Vercel:
| Variável | Descrição | Exemplo |
|---|---|---|
OPEN_METEO_API_URL |
API de Clima | https://api.open-meteo.com/v1/forecast |
OPEN_METEO_GEOCODING_API_URL |
API de Geocodificação | https://geocoding-api.open-meteo.com/v1/search |
LOG_LEVEL |
Nível de Log | INFO |
REDIS_URL |
(Opcional) URL do Redis/KV | redis://... |
Nota: Não configure
BACKEND_URLna Vercel. O roteamento interno cuida disso automaticamente.
O sistema adota um padrão de Proxy Interno, onde o Next.js atua como camada de apresentação e redireciona chamadas de API (/api/*) diretamente para o FastAPI (rodando como Serverless Function em produção ou container em dev).
graph LR
User[Navegador] -->|HTTPS| Next[Next.js Frontend]
Next -->|Rewrite /api/*| Fast[FastAPI Backend]
Fast -->|Cache| Redis[(Redis/Memória)]
Fast -->|Dados Externos| OpenMeteo[Open-Meteo API]
clima-manejo/
├── backend/ # API FastAPI
│ ├── app/
│ │ ├── routes/ # Endpoints (Weather, Cities)
│ │ ├── services/ # Regras de Negócio (OpenMeteo, Cache)
│ │ └── schemas/ # Pydantic Models (Contratos)
│ └── tests/ # Testes de Integração
├── frontend/ # Next.js App
│ ├── src/
│ │ ├── app/ # App Router (Páginas)
│ │ ├── components/ # UI Components (Atomic Design)
│ │ └── lib/ # Utilities (API Client, Formatters)
└── docker-compose.yml # Orquestração- Cache Estratégico: O Backend implementa cache (Redis ou Memória) para chamadas externas, reduzindo custos e latência.
- Resiliência: O Frontend possui Error Boundaries e Skeletons para garantir UX fluida mesmo em falhas parciais.
- Normalização: Todos os dados são normalizados no Backend, entregando ao Frontend apenas o necessário para renderização (padrão View Model).
Busca cidades por nome. Retorna lista normalizada com coordenadas.
Retorna o relatório climático consolidado.
- current: Condições atuais (Temp, Vento, Umidade).
- derived: Indicadores calculados (Saldo Hídrico, Janela Operacional).
- today: Resumo do dia (Máx/Mín, Precipitação total).
Desenvolvido com foco em performance, manutenibilidade e experiência do usuário.