Resultado em uma frase
Uma agência que fazia o onboarding de clientes no ClickUp, criava grupos de WhatsApp na mão e produzia artes sem padrão passou a ter um painel único onde o contrato assinado vira grupo criado em segundos e um briefing vira um trimestre inteiro de conteúdo pronto para o cliente aprovar.
- Cliente: iOBEE, agência de marketing e social media
- Meu papel: especificação, arquitetura, banco de dados, frontend, automações e deploy
- Prazo: o primeiro ciclo real, do briefing à primeira imagem gerada, rodou 3 dias depois do primeiro commit
- Resultado principal: grupo de WhatsApp do cliente criado automaticamente em segundos, sem nenhum passo manual depois da assinatura
- Especificação como contrato: escrevi três specs versionadas antes do código e trabalhei uma fase por vez, cada uma fechada com um checklist de aceite registrado no repositório. O código é validado contra a spec, não contra a memória de uma conversa.
- Uma fonte da verdade por fato: dados estruturados no Postgres, arquivos no Storage, e o banco guarda só caminhos. O painel escreve direto no banco, protegido por Auth, RLS e constraints.
- Automação só para efeitos colaterais: o n8n reage a mudanças no banco por webhooks e nunca está no caminho de escrita do usuário. Se ele cair, o cadastro continua funcionando e os efeitos são reprocessados. Tudo que ele faz fica registrado numa tabela de eventos.
- Validação em três camadas: interface, políticas de RLS e constraints. Uma cor que quebra a regra da marca é recusada pelo banco mesmo que alguém contorne a interface.
- Contrato assinado vira grupo de WhatsApp configurado em segundos, sem intervenção humana
- Extração da identidade visual a partir do site em cerca de 5 segundos
- Um trimestre inteiro de conteúdo gerado como rascunho a partir de um único briefing
- Nenhuma arte produzida antes da aprovação da copy, o que corta retrabalho e crédito de imagem desperdiçado
- Regras de marca garantidas pelo banco, não pela atenção de quem está produzindo
O contexto
Uma agência de social media vende consistência: a marca do cliente precisa aparecer igual em cada post, todo mês. Só que a operação inteira dependia de gente lembrando de fazer coisas, e isso não escala além de um punhado de clientes.
O problema
O onboarding vivia em documentos soltos, os grupos de WhatsApp eram criados à mão, os arquivos da marca ficavam espalhados e a produção de artes não tinha pipeline. Pior: arte era produzida antes de a copy ser aprovada, então trabalho e crédito de imagem iam para o lixo a cada mudança do cliente. Cor fora da paleta, fonte errada ou contraste ilegível só eram percebidos depois de publicados.
A abordagem
A solução
Onboarding que dispara sozinho. O time cadastra o cliente e, quando o status muda para contrato assinado, um workflow cria o grupo de WhatsApp com as pessoas certas, preenche a descrição com o time responsável, coloca a logo como foto e envia a mensagem de boas-vindas. Brand kit a partir do site. O painel lê o site do cliente e extrai cores, fontes e logos em poucos segundos para revisão. As fontes podem ser um arquivo enviado ou uma família do Google Fonts, e o contraste mínimo de 4,5:1 entre fundo e texto é garantido no painel e no banco. Do briefing ao trimestre. Com o briefing completo, um único "Gerar tudo" escreve a bio, os destaques com roteiro de stories e os carrosséis do trimestre como rascunhos editáveis. A aba Perfil mostra tudo como o Instagram do cliente, com edição no lugar. Motor de templates. Um catálogo de 13 famílias visuais e 39 modelos, cada família com sua própria estrutura, não só suas cores. Cada cliente fica preso a uma família, então o feed mantém consistência e dois clientes nunca saem com a mesma silhueta. Aprovação antes da produção. O colaborador envia ao cliente um deck com a copy do trimestre, registra a resposta no painel e as mudanças viram um checklist ligado aos posts. A geração de artes só é liberada quando o ciclo é aprovado.
Por baixo do capô
Next.js 16 com App Router, Tailwind v4 e shadcn/ui no painel; Supabase (Postgres, Auth, Storage, Database Webhooks) com migrations versionadas pela CLI e testes de banco; n8n para os efeitos colaterais e Evolution API para o WhatsApp, tratada como API instável (sem retentativas cegas que criem grupos duplicados). Máquinas de estado no próprio Postgres, com funções de transição e gatilhos que recusam passos fora de ordem e ativação de cliente sem onboarding, briefing e geração completos. A geração de texto passa por um provedor configurável no servidor, com modo mock para rodar offline. Uma bateria de verificação contra o projeto ao vivo cobre o banco inteiro e passou 187 de 187 checagens.
Resultados
O que eu levo deste projeto
Escrever a spec antes, fechar cada fase com um checklist e colocar as regras de negócio dentro do banco foi o que permitiu andar rápido sem quebrar o que já estava pronto. Velocidade veio da disciplina, não do atalho.
