Visão e pilares, diagrama do sistema, borda no Cloudflare + Next.js (SSR) e orquestração dos containers com Coolify.
Evolution no container × Supabase; bancos de usuários e de dados brutos, logs em NoSQL dedicado e arquivos no R2 + CDN.
Deploy & homologação (Cypress/Playwright, Workers × imagem Docker) e observabilidade & correção (Grafana, erro vira ticket).
Infisical, OpenRouter, back-office, integração de mídia (Meta/Google Ads · ETL), Design System + Segundo Cérebro e mensageria (Evolution × uazapi).
Questões em aberto, custo (método) e o fecho: as 4 decisões de hoje.
Front no Cloudflare + Next.js (render no servidor); a VPS roda os containers de cada cliente via Coolify; dados no Supabase, fora da VPS. Segredos, LLM e inventário são camadas transversais.
Cloudflare na frente + Next.js com SSR / React Server Components. Consultas e CRUD rodam no servidor — a API nunca é exposta ao browser.
Coolify (PaaS self-hosted) gerencia deploy, logs de container e instala softwares que precisam viver em container, como a Evolution API.
Supabase como banco das aplicações dos clientes (backup / restore gerenciados). O DB do Evolution fica dentro do próprio container do serviço.
Infisical como camada central de acesso a chaves/segredos, injetando nos serviços — no lugar de .env espalhados por container.
OpenRouter como ponto único de acesso a modelos. Cada software recebe acesso específico, com controle e billing centralizados.
Software à parte que mapeia quais serviços estão vinculados a cada cliente — a fonte de verdade do inventário cliente ↔ containers.
Grafana para dashboards de recurso por container (CPU/RAM/disco/rede) e ingestão de erros. Erros viram tickets acionáveis — por nós ou por IA de correção.
Bancos por finalidade — usuários × dados brutos —, logs em NoSQL dedicado e arquivos no Cloudflare R2 + CDN — backup, isolamento e entrega adequados a cada tipo de dado.
Meta e Google Ads via tech providers → ETL → banco → dashboards e agentes, para decisões de verba de campanha do cliente.
Design System da marca + Segundo Cérebro (base de conhecimento) — fonte única para produção humana e da equipe de agentes 24/7.
O data layer do Next pode viver em dois lugares, e isso é uma decisão por serviço/stack, não global:
Baixa latência global, escala automática. Bom quando o serviço cabe nas restrições do runtime de edge.
Quando o serviço precisa de proximidade dos containers, libs nativas ou stack que não roda no edge.
Deixar essa escolha explícita evita padronizar cedo demais em um runtime que não serve para todos os serviços.
Um PaaS self-hosted rodando na nossa VPS: entrega a experiência de "sobe o serviço e me dá os logs" que um dev espera de uma plataforma gerenciada, mas sob nosso controle e no nosso custo de VPS — sem a complexidade de operar Kubernetes.
É a peça que torna a plataforma multi-serviço por cliente operável por um time enxuto: cada software de cliente ou de terceiro vira um container gerenciado pelo mesmo painel.
O banco do Evolution fica dentro do próprio container do serviço, acoplado a ele. É estado do serviço de mensageria, gerenciado junto com o container que o Coolify sobe.
O banco das aplicações de cliente fica no Supabase, fora da VPS. É o dado de negócio que precisa de garantia de recuperação.
Cada tipo de dado tem exigência diferente de backup, escrita e entrega. Em vez de um destino único, separamos em três — cada um no armazenamento que melhor atende às suas restrições.
No core, separamos o banco de usuários do banco de dados brutos — isolando o acesso do usuário do dado bruto. São bancos distintos, não schemas: backup e restore são por banco, com isolamento de blast-radius por finalidade.
Logs vão para um banco NoSQL separado do transacional. O padrão é append: escrita e leitura, sem update — por isso NoSQL encaixa, sem preocupação com update ou migração de schema de log.
Arquivos e binários ficam no R2 (object storage da Cloudflare), aproveitando o CDN da Cloudflare para entrega. Tira o arquivo pesado de dentro da VPS e do banco.
Fechamento: separar por tipo de dado — bancos de usuários e de dados brutos · logs em NoSQL · arquivos no R2 — dá backup, isolamento e entrega adequados a cada um.
Deploy direto, sem imagem nem container: o código é publicado no edge. Sem build de Docker, sem registry — o Cloudflare hospeda e escala.
Build de imagem Docker → registry → o Coolify baixa a imagem e executa o container na VPS. Ciclo de vida gerido como container.
O mindset "deploy = instantâneo" vale para o edge. Na VPS o ciclo build → push → pull → run é ordem de grandeza maior — planeje a janela, não subestime.
Dashboards de uso por container: CPU · RAM · disco · rede. Dupla função: (1) saúde operacional da VPS e (2) base de métricas para o rateio de custo — as mesmas medições alimentam o método do slide de custo.
Erros de produção são instrumentados e ingeridos num ponto central, junto com falhas do gate E2E. Daí saem os tickets — nada de erro que só aparece no log de um container e some.
Fechamento: erros do Grafana e do E2E viram tickets acionáveis — hoje por nós, amanhã por uma AI de correção plugável no mesmo fluxo.
O Infisical passa a ser a fonte única de segredos da plataforma; os serviços orquestrados pelo Coolify recebem os segredos injetados, não hardcoded.
Evita chaves de provedores de LLM espalhadas por serviço e torna o custo de IA rastreável por software/cliente — insumo direto para o rateio de custo (slide 16).
Numa plataforma com vários serviços por cliente, sem inventário central a informação vira conhecimento tribal. O back-office responde, a qualquer momento: quais containers pertencem a qual cliente, o que está ativo e o que deve ser cobrado.
É também a base do rateio de custo (slide 16): sem saber quem tem o quê, não há como atribuir consumo de VPS por cliente. Justifica cobrança, suporte e rateio.
O acesso a Meta Ads e Google Ads via MCP esbarra em permissão: o cliente pode não ter a permissão necessária para expor as contas de anúncio diretamente.
Usamos tech providers (parceiros de mídia) que permitem à OCANA acessar Meta e Google Ads em nome do cliente, contornando a limitação de permissão.
Entrega: os dados passam por ETL, ficam num banco próprio e são consumidos por dashboards e agentes — fornecidos ao cliente para decisões: investir, aumentar ou realocar verba de campanha.
No setup, centralizamos cores, tipografia, identidade visual e as regras de design da marca — uma fonte única para produção, humana e de agentes.
Base de conhecimento da empresa: a fonte de verdade consultada por agentes e pessoas para saber exatamente o que fazer. Alimentada periodicamente e usada pela empresa toda — principalmente pela equipe de agentes 24/7.
Pode haver bases por departamento para evitar fuga de conhecimento entre áreas, mantendo um núcleo comum consultável por todos.
Fonte única de marca + conhecimento alimentado continuamente = produção consistente, por humanos e pela equipe de agentes 24/7.
| Plano | Mensalidade | Dispositivos | Custo unitário |
|---|---|---|---|
| Entry | R$ 38 | 2 | R$ 19,00 / dispositivo |
| Servidor LITE | R$ 138 | até 100 | R$ 1,38 / dispositivo |
| Servidor PRO | R$ 195 | até 300 | R$ 0,65 / dispositivo |
Princípio — tudo é custo. Se a operação roda 24/7 com agentes (não conosco de plantão), quanto menos responsabilidade e infra do nosso lado e mais serviços gerenciados por terceiros — que já operam 24/7, com muitos usuários — melhor: reduz custo, tempo e nossa disponibilidade, liberando o time para os problemas mais críticos. Ecoa as escolhas de Supabase e "não Kubernetes".
Cada caso é caso. Depende de recurso disponível, do isolamento exigido e de serviços em background / cronjobs que rodam periodicamente e competem por CPU/RAM na mesma VPS.
a decidir · multi-tenantComo ratear por ferramenta/cliente o consumo de CPU/RAM/disco/rede da VPS, mais manutenção e disponibilidade. Detalhado no próximo slide como método, não como total.
a decidir · rateioDisponibilidade prometida, horários de atuação e a janela de deploy de cada cliente (horário de baixa). Conecta com o fluxo de homologação e deploy agendado.
a decidir · SLASão decisões, não pendências técnicas: cada uma tem trade-off e precisa de acordo do time e, onde couber, do cliente. Nenhuma tem resposta única — a escolha depende do porte e do perfil de cada conta.
O aluguel da VPS tem preço de tabela. O difícil é atribuir quanto dos recursos (CPU/RAM/disco/rede) cada ferramenta ou cliente consome, somar horas de manutenção, o custo do Supabase e do OpenRouter, e a disponibilidade (SLA). Nenhum total é apresentado de propósito — é o que precisamos medir.
O total só entra depois da medição — nada fabricado.
A arquitetura está fechada; faltam apenas estas 4 decisões para destravar custo e operação.