Dashboard Frontend - Next.js 13 + TypeScript + Supabase
HIDROWAVE é um sistema completo de automação hidropônica que integra:
- Frontend Next.js: Dashboard web responsivo para monitoramento e controle
- Backend ESP32: Sistema Master-Slave com ESP-NOW para controle de relés
- Banco de Dados Supabase: Armazenamento em tempo real de sensores e comandos
- Sistema de Automação: Motor de decisão baseado em regras configuráveis
✅ Dashboard em Tempo Real
- Monitoramento de sensores (pH, TDS, EC, temperatura, umidade)
- Gráficos históricos de dados
- Status online/offline de dispositivos
✅ Controle de Relés
- Controle Master (16 relés via PCF8574)
- Controle Slave remoto via ESP-NOW (múltiplos dispositivos)
- Nomeação personalizada de relés
- Estados em tempo real
✅ Sistema de Automação
- Criação de regras baseadas em condições
- Motor de decisão inteligente
- Histórico de execuções
✅ EC Controller
- Cálculo automático de dosagem de nutrientes
- Proporções configuráveis
- PID adaptativo
HIDROWAVE-main/
│
├── 📄 README.md # Este arquivo
├── 📄 package.json # Dependências do projeto
├── 📄 next.config.js # Configuração Next.js
├── 📄 tsconfig.json # Configuração TypeScript
├── 📄 tailwind.config.js # Configuração Tailwind CSS
├── 📄 vercel.json # Configuração Vercel
│
├── 📂 public/ # Arquivos estáticos
│ ├── file.svg
│ ├── globe.svg
│ ├── next.svg
│ ├── vercel.svg
│ └── window.svg
│
├── 📂 src/
│ ├── 📂 app/ # Next.js App Router
│ │ ├── 📄 layout.tsx # Layout principal
│ │ ├── 📄 page.tsx # Página inicial
│ │ ├── 📄 globals.css # Estilos globais
│ │ │
│ │ ├── 📂 dashboard/ # Dashboard principal
│ │ │ └── page.tsx
│ │ │
│ │ ├── 📂 dispositivos/ # Gerenciamento de dispositivos
│ │ │ └── page.tsx
│ │ │
│ │ ├── 📂 automacao/ # Sistema de automação
│ │ │ └── page.tsx
│ │ │
│ │ ├── 📂 configuracao/ # Configurações
│ │ │ └── page.tsx
│ │ │
│ │ ├── 📂 ajuda/ # Ajuda
│ │ │ └── page.tsx
│ │ │
│ │ ├── 📂 login/ # Autenticação
│ │ │ └── page.tsx
│ │ │
│ │ └── 📂 api/ # API Routes (Next.js)
│ │ ├── 📂 automation/
│ │ │ └── 📂 rules/
│ │ │ └── route.ts
│ │ │
│ │ ├── 📂 device/
│ │ │ └── 📂 register/
│ │ │ └── route.ts
│ │ │
│ │ ├── 📂 ec-controller/
│ │ │ └── 📂 config/
│ │ │ └── route.ts
│ │ │
│ │ ├── 📂 esp-now/
│ │ │ ├── command/route.ts
│ │ │ ├── command-acks/route.ts
│ │ │ ├── slave-relay-name/route.ts
│ │ │ └── slaves/route.ts
│ │ │
│ │ ├── 📂 relay/
│ │ │ └── route.ts
│ │ │
│ │ ├── 📂 relay-commands/
│ │ │ ├── master/route.ts
│ │ │ └── slave/route.ts
│ │ │
│ │ ├── 📂 relay-master/
│ │ │ ├── toggle/route.ts
│ │ │ └── toggle-array/route.ts
│ │ │
│ │ ├── 📂 relay-slaves/
│ │ │ └── toggle/route.ts
│ │ │
│ │ ├── relay-names/route.ts
│ │ ├── relay-states/route.ts
│ │ ├── hydro-data/route.ts
│ │ └── environment-data/route.ts
│ │
│ ├── 📂 components/ # Componentes React
│ │ ├── DeviceControlPanel.tsx # Painel de controle de dispositivos
│ │ ├── RelayControl.tsx # Controle de relés
│ │ ├── SensorCard.tsx # Card de sensores
│ │ ├── SensorChart.tsx # Gráficos de sensores
│ │ ├── NutrientControl.tsx # Controle de nutrientes
│ │ ├── CreateRuleModal.tsx # Modal de criação de regras
│ │ ├── RuleCard.tsx # Card de regras
│ │ ├── RelayMapDiagram.tsx # Diagrama de mapeamento de relés
│ │ ├── Sidebar.tsx # Barra lateral
│ │ ├── LayoutContent.tsx # Layout de conteúdo
│ │ └── ProtectedRoute.tsx # Rota protegida
│ │
│ ├── 📂 contexts/ # React Contexts
│ │ ├── AuthContext.tsx # Contexto de autenticação
│ │ └── SidebarContext.tsx # Contexto da sidebar
│ │
│ └── 📂 lib/ # Bibliotecas e utilitários
│ ├── supabase.ts # Cliente Supabase
│ ├── esp32-api.ts # API do ESP32
│ ├── esp-now-slaves.ts # Gerenciamento de slaves ESP-NOW
│ ├── relay-slaves-api.ts # API de relés slaves
│ ├── automation.ts # Lógica de automação
│ ├── nutrition-plan.ts # Plano de nutrição
│ ├── analytics.ts # Analytics
│ └── settings.ts # Configurações
│
├── 📂 scripts/ # Scripts SQL
│ ├── SCHEMA_COMPLETO_VALIDADO.sql
│ ├── MIGRACAO_COMPLETA_RELAY_COMMANDS_V2.sql
│ ├── SCRIPT_COMPLETO_RPC_ATOMICO.sql
│ └── ... (outros scripts SQL)
│
└── 📂 Documentação/ # Documentação técnica
├── ANALISE_ARQUITETURAL_COMPLETA.md
├── FLUXO_COMPLETO_ESP32_SUPABASE.md
├── PLANO_INTEGRACAO_COMPLETA_MVP.md
├── PLANO_COMPLETO_MOTOR_DECISAO.md
└── ... (outros arquivos .md)
- Next.js 13.5.6 - Framework React com App Router
- React 18.2 - Biblioteca UI
- TypeScript 5.0 - Tipagem estática
- Tailwind CSS 3.3 - Framework CSS utilitário
- Chart.js 4.4 - Gráficos e visualizações
- React Hot Toast 2.4 - Notificações
- Supabase - Backend as a Service (PostgreSQL + Auth + Realtime)
- Next.js API Routes - API REST serverless
- ESP32 Master - Controlador principal (WiFi + ESP-NOW)
- ESP32 Slaves - Dispositivos remotos (ESP-NOW)
- PCF8574 - Expansor I2C para relés
- Node.js 18+ (LTS recomendado)
- npm ou yarn
- Conta Supabase (projeto criado)
- ESP32 Master configurado (WiFi + ESP-NOW)
# 1. Clone o repositório
git clone https://github.com/yhanusleverage/HIDROWAVE.git
cd HIDROWAVE/HIDROWAVE-main
# 2. Instale as dependências
npm install
# 3. Configure variáveis de ambiente
cp .env.example .env.local
# Edite .env.local com suas credenciais Supabase
# 4. Execute o servidor de desenvolvimento
npm run devA aplicação estará disponível em http://localhost:3000
Crie um arquivo .env.local na raiz do projeto:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_keyExecute os scripts SQL em scripts/:
-- Setup completo do banco de dados
scripts/SCHEMA_COMPLETO_VALIDADO.sqlTabelas principais:
device_status- Status de dispositivos (ESP32 Master + Slaves)slave_relay_states- Estados de relés dos slavesrelay_commands- Comandos de relés (pending/executed)decision_rules- Regras de automaçãohydro_measurements- Medições hidropônicas (pH, TDS, EC)environment_data- Dados ambientais (temperatura, umidade)
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/esp-now/command |
Enviar comando ESP-NOW |
| GET | /api/esp-now/slaves |
Listar slaves |
| POST | /api/esp-now/slave-relay-name |
Renomear relé |
| GET | /api/esp-now/command-acks |
ACKs de comandos |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/relay-master/toggle |
Toggle relé master |
| POST | /api/relay-master/toggle-array |
Toggle array de relés |
| POST | /api/relay-slaves/toggle |
Toggle relé slave |
| GET | /api/relay-states |
Estados de todos os relés |
| GET | /api/relay-names |
Nomes dos relés |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/automation/rules |
Listar regras |
| POST | /api/automation/rules |
Criar regra |
| PUT | /api/automation/rules/[id] |
Atualizar regra |
| DELETE | /api/automation/rules/[id] |
Deletar regra |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/hydro-data |
Dados hidropônicos |
| GET | /api/environment-data |
Dados ambientais |
# 1. Instale Vercel CLI
npm i -g vercel
# 2. Deploy
vercel
# 3. Configure variáveis de ambiente no dashboard VercelLive Demo: hidrowave.vercel.app
Compatível com qualquer plataforma que suporte Next.js:
- Netlify
- AWS Amplify
- Railway
- Render
| Métrica | Valor | Observação |
|---|---|---|
| First Contentful Paint | < 1.5s | Otimizado com SSR |
| Time to Interactive | < 3s | Code splitting |
| Bundle Size | ~200KB (gzipped) | Tree shaking |
| API Response Time | < 100ms (local) | Next.js API Routes |
| Real-time Sync | < 500ms (ESP-NOW) | Polling + optimistic UI |
- ✅ Autenticação: Supabase Auth (JWT, Email/Password)
- ✅ Autorização: Row Level Security (RLS) no Supabase
- ✅ API Protection: API Keys + CORS (Next.js API Routes)
- ✅ Input Validation: Zod schemas (type-safe validation)
- ✅ XSS Protection: React auto-escaping (sanitização automática)
Consulte os arquivos .md na raiz do projeto para documentação detalhada:
ANALISE_ARQUITETURAL_COMPLETA.md- Análise arquitetural completaFLUXO_COMPLETO_ESP32_SUPABASE.md- Fluxo de dados ESP32 ↔ SupabasePLANO_INTEGRACAO_COMPLETA_MVP.md- Plano de integração MVPPLANO_COMPLETO_MOTOR_DECISAO.md- Motor de decisão- E muitos outros...
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'feat: adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
yhanusleverage
- GitHub: @yhanusleverage
- Backend: ESP-HIDROWAVE
- Live Demo: hidrowave.vercel.app
- Backend ESP32: ESP-HIDROWAVE
- Repositório: HIDROWAVE
Desenvolvido com ❤️ para automação hidropônica
⭐ Se este projeto foi útil, considere dar uma estrela!