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
Quem usa o sistema
| Perfil | Acesso | O 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
Fluxo de billing
Componentes
| Camada | Tecnologia | Detalhe |
|---|---|---|
| Frontend | React 18 + Vite + TS | SPA com componentes funcionais, hooks, Context API para Auth e Toast. Tailwind CSS. |
| Auth | Supabase Auth | Magic link e email/password. Sessions gerenciadas via onAuthStateChange. |
| Database | PostgreSQL (Supabase) | Tabelas para users, chats, messages, agent prompts, token usage. RLS ativado. |
| Edge Functions | Deno (Supabase) | chat-ai, payment-webhook, reset-monthly-tokens, sync-agent-prompt |
| IA | OpenAI API | GPT para os 3 agentes. System prompts customizados por agente. Suporte a PDF attachment. |
| Billing | Hotmart | Checkout externo. Webhook via Hottok ativa/desativa assinatura no banco. |
| Storage | Supabase Storage | Bucket 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
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
- Usuário seleciona o agente na sidebar ou na home
- Inicia um novo chat ou continua uma conversa anterior
- Pode anexar PDFs (fichas de pacientes) no agente de planejamento
- A IA responde com base no system prompt do agente + contexto da conversa
- 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
| Item | Detalhe |
|---|---|
| Limite mensal | 80.000 tokens por assinante |
| Renovação | Dia 1 de cada mês (via reset-monthly-tokens) |
| Controle | Pré-consumo: bloqueia se tokens_used >= token_limit |
| Visibilidade | Barra 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
- Usuário clica em "Assinar" na landing page ou no paywall interno
- É redirecionado ao checkout do Hotmart
- Após pagamento, o Hotmart dispara webhook para
payment-webhook - A Edge Function ativa a assinatura no banco (
subscription_active: true) - Usuário é redirecionado para a página de compra aprovada
URLs de redirect do Hotmart
| Evento | URL |
|---|---|
| Compra aprovada | https://colmeiainfantil.com.br?pago=true |
| Aguardando pagamento | https://colmeiainfantil.com.br?aguardando=true |
| Análise de crédito | https://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
Edge Functions
| Função | Trigger | O que faz |
|---|---|---|
chat-ai | Chamada do frontend | Valida ownership, busca histórico, chama OpenAI, salva resposta, contabiliza tokens, gera título automático no primeiro envio |
payment-webhook | Hotmart (Hottok) | Ativa/desativa assinatura e seta current_period_end |
reset-monthly-tokens | Cron mensal | Zera tokens_used e renova period_end para todos os assinantes ativos. Desativa expirados. |
sync-agent-prompt | Manual/admin | Sincroniza system prompts dos agentes |
Landing Page
Site de vendas integrado ao app, com checkout via Hotmart.
Seções do site
- Hero — headline, subtítulo, CTAs (Começar agora / Já tenho conta) e preview dos agentes
- Agentes — detalhamento dos 3 agentes com funcionalidades
- Passo a passo — 3 etapas: cadastre-se, escolha o agente, converse
- Comparativo — tabela "Com ColméIA vs Sem ColméIA"
- Showcase — mockups da plataforma em desktop e mobile
- Preços — planos mensal e anual com CTAs para Hotmart
- FAQ — perguntas frequentes em accordion
- CTA final — "Pronta para transformar seus atendimentos?"
- Footer — links para Termos, Privacidade e Suporte
Páginas auxiliares
| Página | Rota | Propósito |
|---|---|---|
| Compra aprovada | ?pago=true | Confirmação de pagamento com CTA para acessar a plataforma |
| Aguardando pagamento | ?aguardando=true | Aviso de boleto em processamento |
| Análise de crédito | ?analise=true | Pagamento em análise |
| Termos de Uso | /termos | Termos legais do SaaS |
| Política de Privacidade | /privacidade | LGPD, dados coletados, terceiros |
| Suporte | /suporte | Contato 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ável | Onde usar | Descrição |
|---|---|---|
OPENAI_API_KEY | chat-ai | Chave da API da OpenAI |
HOTMART_HOTTOK | payment-webhook | Secret do Hottok para validar webhooks |
CRON_SECRET | reset-monthly-tokens | Secret para autenticar chamadas do cron |
SUPABASE_SERVICE_ROLE_KEY | Todas | Chave 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
- Authentication > URL Configuration: Site URL =
https://colmeiainfantil.com.br - Authentication > Email Templates: Customizar para português com marca ColméIA
- Edge Functions > Secrets: Configurar todas as env vars listadas acima
- 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:
.envcorreto, build limpo, domínio configurado - Cron: pg_cron configurado com
CRON_SECRETpara 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
| Item | Situação | Açã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.