Frontend em React + Vite integrado ao Supabase e Evolution API para gerenciar instâncias do WhatsApp (criar, conectar, verificar status, QR Code, mensagens). Inclui um servidor de webhook (Express) para receber eventos da Evolution API e atualizar o Supabase.
- React + Vite + TypeScript
- Supabase (Auth, DB)
- Evolution API
- Express (webhook-server.js)
- Tailwind + Radix UI
- Node.js 18+ e npm
- Conta no Supabase com banco e chaves
- Evolution API (URL e API Key)
Use .env localmente (NÃO COMITAR). Exemplo de variáveis:
Frontend (build Vite):
VITE_EVOLUTION_API_URLVITE_EVOLUTION_API_KEYVITE_WEBHOOK_URL(URL pública do endpoint de webhook)VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
Servidor (não expostas no cliente):
SUPABASE_URLSUPABASE_SERVICE_ROLEWEBHOOK_SECRET(opcional para validar assinaturas)
Frontend (opcional – apenas para desenvolvimento):
VITE_WEBHOOK_SECRET(se definido, será enviado como cabeçalhox-webhook-secretna configuração do webhook ao criar a instância; não use em produção)
Importante:
.envestá ignorado pelo.gitignore. Jamais comitarSUPABASE_SERVICE_ROLE.
- Instalar deps:
npm install - Rodar frontend:
npm run dev(Vite) - Rodar webhook:
npm run webhook(Express emhttp://localhost:3001) - Healthcheck webhook:
GET http://localhost:3001/health
No cadastro de instância, em ambiente local, o webhook padrão é http://localhost:3001/webhook. Em produção, o padrão é ${window.location.origin}/api/webhook (função serverless api/webhook.ts).
O arquivo webhook-server.js:
- Recebe eventos:
connection.update,qr.updated,instance.status. - Atualiza tabela
whatsapp_instancesno Supabase (status, last_activity, qr_code, phone_number). - Endpoints úteis:
POST /webhookGET /healthPOST /simulate/connection(simulação)
Em ambiente de produção, o webhook precisa de uma URL pública. Em Vercel, o ideal é migrar para uma Function em api/webhook.
- GitHub: enviar este projeto para um repositório.
- Importar no Vercel (New Project).
- Configurar Environment Variables no Vercel:
- Em
ProductionePreview:VITE_EVOLUTION_API_URLVITE_EVOLUTION_API_KEYVITE_WEBHOOK_URL(apontar parahttps://<seu-domínio>/api/webhookquando migrarmos)VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Somente Serverless Functions (não expor ao cliente):
SUPABASE_URLSUPABASE_SERVICE_ROLEWEBHOOK_SECRET
- Em
- Build & Deploy. O frontend ficará público.
- Migrar
webhook-server.jspara uma Functionapi/webhook(próxima tarefa) para receber os eventos diretamente no domínio público do Vercel.
npm run dev— frontendnpm run webhook— servidor de webhook local
.envestá ignorado; mantenha as chaves em variáveis de ambiente.- Nunca expor
SUPABASE_SERVICE_ROLEno código cliente.
Defina a licença conforme sua preferência.