Estudo de caso
Naora: agenda online em que o sinal no Pix garante o horário
Um sistema de agendamento para salões, barbearias e estúdios de beleza. A cliente escolhe o serviço, o dia e o horário, e o horário só fica dela depois de um sinal pequeno pago no Pix. O negócio ganha um painel, e o sinal cai direto na conta do Mercado Pago dele.
O problema
Pequenos negócios de beleza no Brasil marcam clientes pelo WhatsApp. A cliente confirma, o horário fica guardado, outra pessoa é recusada, e ela não aparece. A cadeira fica vazia e aquela hora se perde.
O sinal muda o compromisso: quem paga aparece, e quem não paga libera o horário para outra pessoa. O Pix deixa esse sinal instantâneo e barato, então tudo acontece no celular em menos de um minuto.
A Naora também é um micro-SaaS de verdade, feito para rodar em produção com custo zero. No plano Grátis ela fica com 15% de cada sinal; o plano Pro custa R$ 39,90 por mês, sem taxa.
O que eu construí
- Uma página pública para cada negócio e o agendamento em três passos: dia, horário, dados. Dias e horários são links comuns, então a página funciona antes do JavaScript carregar e um horário pode ser compartilhado.
- O sinal no Pix pelo Mercado Pago: QR Code e código copia e cola, reserva do horário por 30 minutos e uma página que confirma sozinha quando o pagamento cai.
- O painel do negócio: serviços com preço e sinal, horários de funcionamento, próximos agendamentos com link para o WhatsApp, Mercado Pago conectado por OAuth e o plano.
- Cobrança freemium: os 15% passam pela divisão de pagamento do Mercado Pago (application fee), e o Pro é uma assinatura do Mercado Pago.
- Demo com um clique e Pix simulado, login com Google e área da conta fixa no topo, para ninguém ficar preso na demo.
- Português e inglês, tema claro e escuro, uso por teclado e leitor de tela.
Decisões que valem explicar
O mesmo horário nunca é vendido duas vezes
Duas clientes podem tocar no mesmo horário no mesmo segundo. A conferência e a gravação rodam numa transação que segura um advisory lock do Postgres para aquele negócio: o segundo pedido espera, vê o primeiro agendamento e recebe o aviso de que o horário acabou de ser ocupado. Um teste de integração dispara 8 pedidos ao mesmo tempo e espera que só um vença.
O webhook só diz “confira de novo”
Um aviso do Mercado Pago nunca confirma um agendamento sozinho. A Naora lê o pagamento de volta no Mercado Pago com o token do próprio negócio e só confirma quando ele diz aprovado. Um aviso forjado, ou enviado ao endereço de outro negócio, não muda nada. Cada cobrança usa o id do agendamento como chave de idempotência.
Pagamento atrasado é registrado, não vira horário duplicado
Se a cliente paga depois do fim da reserva e outra pessoa já pegou o horário, o pagamento fica salvo e aparece para o dono, e nenhum segundo agendamento é criado.
Os horários seguem o fuso do negócio
A grade é montada no fuso horário do negócio, não no do servidor, que roda nos Estados Unidos. Testes unitários cobrem São Paulo e Nova York, inclusive na troca do horário de verão.
Sem sinal, sem agendamento online
Uma versão inicial deixava um negócio sem Mercado Pago receber agendamentos com o sinal “combinado direto com o negócio”, e a taxa da plataforma simplesmente sumia. Agora uma regra decide quando um serviço pode ser agendado online, e o servidor, a página pública e o painel seguem a mesma regra.
Segredos continuam secretos
Os tokens do Mercado Pago ficam guardados com criptografia AES-256-GCM e são renovados antes de vencer. O state do OAuth é assinado com HMAC e amarrado a um nonce num cookie HttpOnly. Cada página recebe um nonce novo na Content Security Policy.
Qualidade, medida
Conferido a cada pull request. Última conferência em 4 de novembro de 2026.
| Área | Resultado | Como é conferido |
|---|---|---|
| Testes | 107 unitários · 38 de integração · 24 de ponta a ponta | Jest, PGlite (Postgres de verdade em memória), Cypress contra o build de produção |
| Acessibilidade | 0 violações no axe · WCAG 2.2 AA | cypress-axe em português e inglês, claro e escuro, e numa tela de 320px |
| Concorrência | 1 de 8 agendamentos simultâneos vence | Teste de integração com a transação e o lock de verdade |
| Cabeçalhos de segurança | CSP com nonce, HSTS, nosniff, frame-ancestors none | Teste de ponta a ponta que lê os cabeçalhos da resposta |
| Código | TypeScript strict, 0 avisos do ESLint | Typecheck e lint a cada pull request |
O ciclo de QA
A Naora está no ar, e o ciclo de QA está acontecendo agora. O plano de testes tem 38 casos em 11 módulos, uma matriz de risco que coloca o dinheiro em primeiro lugar e critérios claros de entrada, saída e suspensão.
As rodadas vão do seguro ao real: primeiro a demo e as contas, depois um Pix de verdade entre duas contas do Mercado Pago para conferir os 15% no extrato, depois a assinatura Pro e, por fim, o feedback de pessoas de fora num beta aberto.
O que eu aprendi
- Uma regra de negócio pode se esconder numa frase simpática. “O sinal é combinado direto com o negócio” parecia gentil e tirava a receita sem ninguém perceber.
- Atrás de um proxy, o servidor não sabe o próprio endereço. Os redirecionamentos passaram a usar o endereço público do site, depois que o login com Google mandou pessoas para um endereço interno.
- Uma mudança visual pequena pode mudar o que um teste enxerga. O topo fixo fez o Cypress tratar o link “Pular para o conteúdo” de outro jeito, e a correção certa estava na página, não no teste.
Teste você
Sem cadastro: clique em “Testar a demo” no topo, crie um salão de mentira e agende como cliente. O Pix da demo é simulado e nada é cobrado. Ela roda no plano gratuito do Render, então a primeira visita pode levar cerca de um minuto. Abrir a Naora.