← Todos os projetos

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.

Meu papel
Produto, UX e UI, desenvolvimento, pagamentos, testes e deploy
Quando
Outubro e novembro de 2026
Stack
Next.js 16, React 19, TypeScript, PostgreSQL (Neon), Prisma 7, Auth.js v5, Mercado Pago (Pix, OAuth, assinaturas), Tailwind CSS, Ipê, Jest, Cypress, Docker no Render

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í

Página de agendamento no celular: o serviço Escova modelada, 60 minutos, R$ 45, e a grade das próximas duas semanas com os dias livres em destaque.
Escolhendo o dia no celular.
Página do sinal no tema escuro: o título “Falta só o sinal”, o QR Code do Pix e o código copia e cola da demo.
O sinal no Pix, tema escuro.
Painel do Studio Ana Luz: o endereço da página pública e os próximos agendamentos, cada um com o nome da cliente e o WhatsApp.
Painel do negócio, com os agendamentos que já pagaram o sinal.

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.

ÁreaResultadoComo é conferido
Testes107 unitários · 38 de integração · 24 de ponta a pontaJest, PGlite (Postgres de verdade em memória), Cypress contra o build de produção
Acessibilidade0 violações no axe · WCAG 2.2 AAcypress-axe em português e inglês, claro e escuro, e numa tela de 320px
Concorrência1 de 8 agendamentos simultâneos venceTeste de integração com a transação e o lock de verdade
Cabeçalhos de segurançaCSP com nonce, HSTS, nosniff, frame-ancestors noneTeste de ponta a ponta que lê os cabeçalhos da resposta
CódigoTypeScript strict, 0 avisos do ESLintTypecheck 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.