Um sistema clean, escalável e intuitivo para envio de lembretes inteligentes via Push (Next.js PWA) e WhatsApp (whatsapp-web.js).
Código em TypeScript com atenção a princípios de arquitetura (SOLID, Clean Architecture) e práticas de produção.
Desenvolvido por: Alexandre de Paula — https://github.com/aledepaulaaa
Produção: https://www.aplicativobora.com.br/ 🌐
BORA permite criar, agendar e entregar lembretes inteligentes ao usuário via push notifications (PWA) e mensagens no WhatsApp. Projetado para confiabilidade em produção, com separação clara entre frontend (Next.js) e backend (bora-server) que mantém a sessão do WhatsApp.
- Frontend (appbora) — Next.js (App Router), PWA, interface de criação/assinatura de lembretes e integração Push.
- Backend (bora-server) — Node.js + TypeScript, integração com whatsapp-web.js, agendamento com node-cron, persistência em Firestore.
- Persistência — Firebase Firestore (via firebase-admin).
- Agendamento — node-cron para jobs programados; handlers específicos para fluxos (teste, premium, etc.).
- Sessão WhatsApp — .wwebjs_auth/ local (persistência de sessão).
appbora/ (Next.js — frontend)
- src/app/ (App Router: layout.tsx, page.tsx, manifest.ts)
- src/actions/, api/, configuracoes/, lembretes/, perfil/, planos/
- src/components/, contexts/, hooks/, interfaces/, theme/
bora-server/ (Node TypeScript — backend)
- src/index.ts (bootstrap)
- src/controllers/whatsapp.controller.ts
- src/routes/whatsapp.routes.ts
- src/database/firebase-admin.ts
- src/interfaces/IReminder.ts
- src/services/whatsappClient.ts, whatsappBot.ts, whatsapp.service.ts
- jobHandlers.ts, jobScheduler.ts, jobTestHandler.ts, jobPremiumUsers.ts
- .wwebjs_auth/ (não versionar)
- Clean Architecture: controllers (entrada), services (use-cases), database (infra).
- SOLID aplicado: responsabilidades únicas, injeção por abstração, módulos extensíveis.
- Tipagem forte com TypeScript (interfaces/IReminder).
- Isolamento de integrações externas (Firebase, WhatsApp) por adaptadores.
- Variáveis sensíveis em .env / Secret Manager — FIREBASE_PRIVATE_KEY devidamente formatada.
- Frontend: UI, criação/edição de lembretes, permissões de push, envio de tokens FCM para o backend.
- Backend: manutenção de sessão WhatsApp, endpoints REST (ex.: POST /api/send-message), agendamento e execução de jobs que dispararam mensagens.
- Jobs: leitura periódica de lembretes prontos, parsing de datas (chrono-node), execução e logging de envios via whatsapp-web.js.
-
Frontend
- src/app/page.tsx — entrada da UI
- src/hooks/usePushNotification.ts — integração com Push
- src/interfaces/IReminder.ts — modelo cliente
-
Backend
- src/index.ts — inicialização do servidor e serviços
- src/database/firebase-admin.ts — bootstrap do Firebase Admin
- src/services/whatsappClient.ts — eventos e cliente whatsapp-web.js
- src/services/whatsappBot.ts — fluxo conversacional / criação de lembretes
- src/services/jobScheduler.ts — start/stop de cron jobs
- src/controllers/whatsapp.controller.ts — endpoint HTTP para envio manual
- FIREBASE_PROJECT_ID
- FIREBASE_CLIENT_EMAIL
- FIREBASE_PRIVATE_KEY (formatada — manter quebras e escape corretos)
- PORT
- Outras: configs de WhatsApp / admin (definidas localmente)
Nunca commitar: .env, .wwebjs_auth/, .wwebjs_cache/ — usar Secret Manager / Vault em produção.
- Clonar repositório.
- Criar .env.local com variáveis necessárias.
- Frontend:
- cd appbora
- npm install
- npm run dev
- Backend:
- cd bora-server
- npm install
- npm run dev
Observação: ao iniciar o backend, o whatsapp-web.js solicitará QR na primeira execução — acompanhar logs.
- Sessão WhatsApp é stateful: para horizontalizar, isolar em worker/instância dedicada ou adotar filas/sessões externas.
- Jobs agendados: evitar execução duplicada em múltiplas instâncias (usar leader election / Redis locks ou mover para Cloud Scheduler/Cloud Tasks).
- Deploy frontend: Vercel / Cloud Run. Backend: Cloud Run / AWS ECS / DigitalOcean App Platform.
- Segredos: usar Secret Manager; não versionar arquivos de sessão.
- Logs e métricas: centralizar (Cloud Logging / Datadog) para rastrear entregas e falhas.
- Migrar jobs para workers escaláveis (BullMQ + Redis).
- Implementar rate limiting / queues para envios em massa (prevenir bloqueio do WhatsApp).
- Testes: unitários para jobHandlers e parsing; E2E para fluxo de envio de lembretes (simulação do WhatsApp).
- Documentar API com OpenAPI/Swagger quando abrir para consumo externo.
- Adotar monitoramento de entregabilidade (retries, DLQ) para mensagens falhas.
- Proteger private keys e credenciais.
- Evitar exposição de dados sensíveis em logs.
- Considerar consentimento e regras de opt-in para envio via WhatsApp (conformidade com políticas do provedor).
Desenvolvedor: Alexandre de Paula
GitHub: https://github.com/aledepaulaaa
Site: https://www.aplicativobora.com.br/
Versão do documento: 1.1 — visão técnica e operacional do BORA (client + server)
Licença: manter conforme repositório principal.