Pular para o conteúdo principal

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.