ColméIA Infantil
Handoff Técnico
📋

Visão Geral

Plataforma SaaS de assistente de IA para psicólogos infantis. Três agentes especializados ajudam no planejamento de sessões, criação de conteúdo e captação de pacientes.

📅

Planejamento de sessões

Agente que auxilia o psicólogo a planejar abordagens terapêuticas com base em fichas clínicas (PDF) do paciente.

📱

Criação de conteúdo

Agente que gera conteúdo de marketing para redes sociais, adaptado para o nicho de psicologia infantil.

👥

Captação de pacientes

Agente com estratégias para atrair novos pacientes, incluindo presença digital e referral.

Stack técnico

React 18 Vite TypeScript Tailwind CSS Supabase (Auth + DB + Storage) Edge Functions (Deno) OpenAI API Hotmart (Billing) PostgreSQL + RLS

Quem usa o sistema

PerfilAcessoO que faz
Assinante Acesso completo Usa os 3 agentes de IA, envia PDFs, gerencia conversas e consome créditos mensais.
Visitante Landing page Visualiza o site, vê planos e é redirecionado ao Hotmart para assinar.

Arquitetado, desenvolvido e entregue por Elastre

Arquitetura & Stack

Visão técnica de como os componentes se conectam.

Fluxo principal — Chat com IA

Frontend
React App
Backend
Edge Function
IA
OpenAI API
Persistência
Supabase DB

Fluxo de billing

Usuário
Clica Assinar
Checkout
Hotmart
Webhook
payment-webhook
Ativação
subscription_active

Componentes

CamadaTecnologiaDetalhe
FrontendReact 18 + Vite + TSSPA com componentes funcionais, hooks, Context API para Auth e Toast. Tailwind CSS.
AuthSupabase AuthMagic link e email/password. Sessions gerenciadas via onAuthStateChange.
DatabasePostgreSQL (Supabase)Tabelas para users, chats, messages, agent prompts, token usage. RLS ativado.
Edge FunctionsDeno (Supabase)chat-ai, payment-webhook, reset-monthly-tokens, sync-agent-prompt
IAOpenAI APIGPT para os 3 agentes. System prompts customizados por agente. Suporte a PDF attachment.
BillingHotmartCheckout externo. Webhook via Hottok ativa/desativa assinatura no banco.
StorageSupabase StorageBucket para fotos de perfil e attachments de chat (PDFs de pacientes).
🔐

Auth & Segurança

Autenticação, controle de acesso e medidas de segurança implementadas.

Fluxo de autenticação

Entrada
Login / Cadastro
Supabase
Auth + JWT
Verificação
Assinatura ativa?
Destino
Dashboard / Paywall

Onboarding

No primeiro acesso, o usuário passa por um tutorial guiado de poucos passos que apresenta a plataforma, os agentes disponíveis e como usar cada um. Após concluir, é direcionado ao dashboard.

Medidas de segurança

A Edge Function chat-ai valida que o chat_id recebido pertence ao user_auth_id autenticado antes de qualquer operação — leitura de histórico, inserção de mensagens e atualização de título. Se não pertencer, retorna 403.

O payment-webhook opera em modo fail-closed: se a variável de ambiente HOTMART_HOTTOK não estiver configurada, a função retorna 500 imediatamente sem processar. Toda chamada é validada contra o segredo do Hottok.

A função reset-monthly-tokens exige o header X-Cron-Secret com valor igual à env CRON_SECRET. Chamadas sem o header correto recebem 401.

Constraint UNIQUE(user_auth_id) na tabela users impede duplicatas. O frontend usa upsert com ON CONFLICT DO NOTHING. Listeners de visibilitychange possuem debounce para evitar rajadas de chamadas.

Logs de produção foram sanitizados: nenhum dado sensível (email, nome de paciente, conteúdo clínico) é registrado. Apenas IDs técnicos aparecem nos logs.

🤖

Agentes de IA

Três agentes especializados, cada um com system prompt customizado e comportamento adaptado ao nicho de psicologia infantil.

Agentes disponíveis

📅

Planejamento de sessões

Recebe fichas clínicas (PDF) e sugere abordagens terapêuticas, atividades de regulação emocional e estratégias para sessão. O profissional envia o PDF do paciente e descreve o objetivo.

📱

Criação de conteúdo

Gera posts, carrosséis, legendas e ideias para redes sociais focadas em psicologia infantil. Adaptável para Instagram, Facebook, LinkedIn ou TikTok.

👥

Captação de pacientes

Estratégias de marketing digital, SEO local, Google Meu Negócio, parcerias com escolas e presença em comunidades de mães/pais.

Como funciona

  1. Usuário seleciona o agente na sidebar ou na home
  2. Inicia um novo chat ou continua uma conversa anterior
  3. Pode anexar PDFs (fichas de pacientes) no agente de planejamento
  4. A IA responde com base no system prompt do agente + contexto da conversa
  5. Cada mensagem consome tokens do plano mensal

System prompts

Os prompts de cada agente ficam na tabela agent_prompts no Supabase e podem ser editados diretamente no banco sem deploy. A Edge Function sync-agent-prompt sincroniza alterações.

Importante: os agentes são ferramentas de apoio. Toda resposta gerada deve ser validada pelo profissional de psicologia. A plataforma não substitui julgamento clínico.

Upload de PDFs

O agente de planejamento aceita PDFs anexados pelo usuário. O texto é extraído e enviado como contexto para a OpenAI. Os arquivos são armazenados no Supabase Storage com políticas de acesso restrito ao dono.

🪙

Créditos & Billing

Sistema de créditos baseado em tokens consumidos nas conversas com os agentes.

Como funciona

ItemDetalhe
Limite mensal80.000 tokens por assinante
RenovaçãoDia 1 de cada mês (via reset-monthly-tokens)
ControlePré-consumo: bloqueia se tokens_used >= token_limit
VisibilidadeBarra de créditos na sidebar e card na home mostram uso e renovação

Planos

Mensal — R$ 19,90/mês

Acesso aos 3 agentes, 80.000 tokens/mês, envio de PDFs, suporte por WhatsApp. Cancela quando quiser.

Anual — R$ 191,00/ano

Tudo do plano mensal. Equivale a R$ 15,91/mês. Economia de 20%.

Fluxo de assinatura

  1. Usuário clica em "Assinar" na landing page ou no paywall interno
  2. É redirecionado ao checkout do Hotmart
  3. Após pagamento, o Hotmart dispara webhook para payment-webhook
  4. A Edge Function ativa a assinatura no banco (subscription_active: true)
  5. Usuário é redirecionado para a página de compra aprovada

URLs de redirect do Hotmart

EventoURL
Compra aprovadahttps://colmeiainfantil.com.br?pago=true
Aguardando pagamentohttps://colmeiainfantil.com.br?aguardando=true
Análise de créditohttps://colmeiainfantil.com.br?analise=true

O Hottok é o serviço que conecta os eventos do Hotmart ao webhook no Supabase. O secret deve ser configurado como HOTMART_HOTTOK nas variáveis de ambiente das Edge Functions.

🗄

Banco de Dados

Schema PostgreSQL com RLS, constraints e Edge Functions.

Tabelas principais

users
id (PK) user_auth_id (FK, UNIQUE) fullname profile_pic_url plan_type (monthly/annual) subscription_active current_period_end created_at
chats
id (PK) user_auth_id (FK) agent_type title created_at updated_at
messages
id (PK) chat_id (FK) role (user/assistant) content tokens_used attachments created_at
agent_prompts
id (PK) agent_type system_prompt model updated_at
token_usage
id (PK) user_auth_id (FK) tokens_used token_limit period_start period_end

Edge Functions

FunçãoTriggerO que faz
chat-aiChamada do frontendValida ownership, busca histórico, chama OpenAI, salva resposta, contabiliza tokens, gera título automático no primeiro envio
payment-webhookHotmart (Hottok)Ativa/desativa assinatura e seta current_period_end
reset-monthly-tokensCron mensalZera tokens_used e renova period_end para todos os assinantes ativos. Desativa expirados.
sync-agent-promptManual/adminSincroniza system prompts dos agentes
🌐

Landing Page

Site de vendas integrado ao app, com checkout via Hotmart.

Seções do site

  1. Hero — headline, subtítulo, CTAs (Começar agora / Já tenho conta) e preview dos agentes
  2. Agentes — detalhamento dos 3 agentes com funcionalidades
  3. Passo a passo — 3 etapas: cadastre-se, escolha o agente, converse
  4. Comparativo — tabela "Com ColméIA vs Sem ColméIA"
  5. Showcase — mockups da plataforma em desktop e mobile
  6. Preços — planos mensal e anual com CTAs para Hotmart
  7. FAQ — perguntas frequentes em accordion
  8. CTA final — "Pronta para transformar seus atendimentos?"
  9. Footer — links para Termos, Privacidade e Suporte

Páginas auxiliares

PáginaRotaPropósito
Compra aprovada?pago=trueConfirmação de pagamento com CTA para acessar a plataforma
Aguardando pagamento?aguardando=trueAviso de boleto em processamento
Análise de crédito?analise=truePagamento em análise
Termos de Uso/termosTermos legais do SaaS
Política de Privacidade/privacidadeLGPD, dados coletados, terceiros
Suporte/suporteContato via WhatsApp e email
🔧

Desafios & Decisões

Problemas reais que surgiram durante o desenvolvimento e como foram resolvidos.

Problema: O listener de visibilitychange (que reconecta a sessão ao voltar pra aba) disparava múltiplas vezes em rajada, criando dezenas de registros duplicados na tabela users para o mesmo usuário.

Causa raiz: O handler fazia INSERT direto sem verificar existência prévia.

Solução: Três camadas de proteção — (1) upsert com ON CONFLICT DO NOTHING no código, (2) debounce no listener de visibilitychange, (3) constraint UNIQUE(user_auth_id) no banco como safety net.

Contexto: O projeto nasceu como "PsicoAmina". Durante o desenvolvimento, foi decidido renomear para "ColméIA Infantil" com nova identidade visual (paleta cream/maroon/gold, mascote abelha).

Impacto: Refatoração completa de branding — logo, cores, tipografia, landing page, domínio (colmeiainfantil.com.br), onboarding, e limpeza de referências no código.

Problema: O webhook de pagamento originalmente operava em modo fail-open — se o secret não estivesse configurado, aceitava qualquer request.

Solução: Invertido para fail-closed. Sem HOTMART_HOTTOK configurado, retorna 500 imediatamente. Nomes de variáveis de ambiente foram unificados entre código e documentação.

Problema: A Edge Function chat-ai recebia chat_id do frontend sem validar se pertencia ao usuário autenticado.

Solução: Adicionada validação de ownership em todas as operações que envolvem chat_id: leitura de histórico, inserção de mensagens e atualização de título. Um usuário não consegue acessar conversas de outro.

Configuração do domínio colmeiainfantil.com.br com DNS apontando para Vercel. A Site URL do Supabase precisa refletir o domínio final para que magic links e emails de confirmação funcionem corretamente.

Config & Deploy

Variáveis de ambiente, deploy e checklist de produção.

Variáveis de ambiente — Frontend (.env)

VITE_SUPABASE_URL=https://SEU-PROJETO.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...

Variáveis de ambiente — Edge Functions (Supabase Secrets)

VariávelOnde usarDescrição
OPENAI_API_KEYchat-aiChave da API da OpenAI
HOTMART_HOTTOKpayment-webhookSecret do Hottok para validar webhooks
CRON_SECRETreset-monthly-tokensSecret para autenticar chamadas do cron
SUPABASE_SERVICE_ROLE_KEYTodasChave service role para operações admin no banco
🔑

A OPENAI_API_KEY e a SUPABASE_SERVICE_ROLE_KEY são secretas. Nunca devem aparecer no frontend ou no repositório. A anon key é pública (protegida por RLS).

Rodando localmente

npm install
npm run dev
# Acessar em http://localhost:5173

Deploy

npm run build
# Output em dist/ — deploy via Vercel, Netlify ou qualquer host estático

Supabase — Configurações essenciais

  1. Authentication > URL Configuration: Site URL = https://colmeiainfantil.com.br
  2. Authentication > Email Templates: Customizar para português com marca ColméIA
  3. Edge Functions > Secrets: Configurar todas as env vars listadas acima
  4. Database > Extensions: pg_cron habilitado para reset mensal

Checklist de deploy

  • Supabase: Schema aplicado, RLS ativado, Edge Functions deployed, secrets configurados
  • Hotmart: Produto criado, checkout funcional, 3 URLs de redirect configuradas, Hottok ativo
  • Frontend: .env correto, build limpo, domínio configurado
  • Cron: pg_cron configurado com CRON_SECRET para reset mensal
  • Teste: Criar conta, assinar, usar chat, verificar créditos

Conformidade & LGPD

Ressalvas de conformidade e pontos que exigem atenção antes do lançamento comercial.

Atenção: a plataforma lida com dados de saúde de menores de idade — classificados como dados sensíveis pela LGPD (art. 11 e art. 14). Os pontos abaixo devem ser tratados antes de operar comercialmente.

O que a plataforma já tem

  • Página de Termos de Uso com conteúdo real
  • Página de Política de Privacidade adequada à LGPD
  • Logs sanitizados (sem dados pessoais ou clínicos)
  • RLS ativado no banco, isolamento por usuário
  • Validação de ownership nas Edge Functions

O que precisa de atenção jurídica

ItemSituaçãoAção necessária
Dados de pacientes enviados à OpenAI Requer análise PDFs com dados clínicos de crianças são enviados à OpenAI como contexto. É necessário consentimento informado dos responsáveis legais e um aditivo no contrato de prestação de serviço.
DPO / Canal do titular Não implementado A LGPD exige canal para titulares exercerem direitos (acesso, retificação, exclusão). Definir responsável e canal de contato.
Exportação / exclusão de dados Não implementado Funcionalidade de exportar e deletar dados do usuário na plataforma. Direito de portabilidade (art. 18).
Retenção de dados Parcial Definir política de retenção: por quanto tempo conversas e PDFs ficam armazenados após cancelamento.
💡

Recomendação: por se tratar de dados de saúde de menores, é fortemente recomendável consultar um advogado especializado em LGPD antes do lançamento comercial. A Elastre entrega o sistema tecnicamente seguro; a conformidade legal é responsabilidade do controlador dos dados (o dono do produto).

📈

Dicas pra Escalar

Considerações técnicas para quando a base de usuários crescer.

Cada conversa consome tokens da OpenAI. Com 100 assinantes ativos, o custo estimado fica entre US$ 50-150/mês dependendo do uso. Monitore o consumo no dashboard da OpenAI e ajuste o token_limit se necessário.

Otimização: considerar modelos mais baratos (GPT-4o-mini) para o agente de conteúdo, que exige menos raciocínio complexo. Manter o modelo principal no agente de planejamento de sessões.

Os prompts ficam na tabela agent_prompts no banco. Isso permite iterar e melhorar os agentes sem precisar de deploy. Recomendação: versionar os prompts (guardar histórico de alterações) para poder reverter se uma mudança piorar a qualidade.

A arquitetura suporta a adição de novos agentes sem refatoração. Basta inserir um novo registro em agent_prompts com o agent_type desejado e adicionar a entrada na sidebar do frontend. A Edge Function chat-ai já usa o prompt dinamicamente pelo tipo de agente.

O sistema já suporta diferentes plan_type. Para oferecer trial: criar um plano "free" com token_limit reduzido (ex: 5.000 tokens) e sem exigir Hotmart. Quando converter para pago, o webhook atualiza normalmente.

Com centenas de assinantes, a tabela messages será a que mais cresce. Considerar índice em (chat_id, created_at) para queries de histórico. O plano gratuito do Supabase suporta até 500MB — monitore o uso e migre para Pro quando necessário.

Se quiser oferecer a plataforma para clínicas (vários psicólogos sob uma conta), a estrutura atual precisaria de uma camada de organização acima do usuário. O campo user_auth_id já isola dados — seria necessário adicionar org_id e ajustar RLS.

Documentação técnica do projeto ColméIA Infantil.
Arquitetado, desenvolvido e entregue por Elastre — Abril 2026.