Architecture Decision Records
ADR-001: Vite + Express no VPS, não Next.js + Vercel
Decisão: SPA React + Vite, backend Express em containers Docker no VPS.
Motivo: WebSocket persistente (inbox em tempo real) é incompatível com Vercel serverless. Workers BullMQ exigem processo Node.js de longa duração. Custo fixo no VPS vs. custo variável imprevisível no Vercel em volume.
ADR-002: PostgreSQL próprio + pgvector, não Supabase
Decisão: PostgreSQL em container Docker, com pgvector para RAG.
Motivo: Dados sensíveis (mensagens, contatos, chaves) ficam no servidor próprio (LGPD). pgvector elimina Pinecone/Weaviate. Custo zero vs. Supabase Pro.
ADR-003: Evolution API sobre Baileys diretamente
Decisão: Evolution API como camada de abstração sobre Baileys.
Motivo: REST API limpa, gerencia reconexão e sessões autonomamente, comunidade ativa, container Docker isolado.
ADR-004: BullMQ para filas, não Supabase Edge Functions
Decisão: BullMQ + Redis para processamento assíncrono.
Motivo: Delay e retry nativos, rate limiting por grupo (canal), concurrency configurável, jobs persistem entre restarts.
ADR-005: JWT próprio, não Supabase Auth
Decisão: JWT próprio (access token 7d + refresh token 30d).
Motivo: Multi-tenant complexo difícil de modelar em Supabase Auth. Controle total de permissões granulares por módulo.
ADR-006: pgvector para RAG, não Pinecone/Weaviate
Decisão: pgvector no mesmo PostgreSQL para embeddings e busca semântica.
Motivo: Sem dependência externa. Para o volume inicial (menos de 100k chunks), performance suficiente com IVFFlat. Custo zero.
ADR-007: Resend para email
Decisão: Resend para emails transacionais (convites, recuperação de senha).
Motivo: API simples, suporte a React Email, free tier 3k/mês, sem configurar SPF/DKIM manualmente.