2025 · Co-founder & Desenvolvedor full-stack

Vain

  • NestJS
  • Next.js
  • PostgreSQL
  • Prisma
  • Redis
  • BullMQ
  • Stripe
  • TailwindCSS
  • Sanity

Vain

Prestadores de serviço autônomos — barbeiros, cabeleireiros, esteticistas — gerenciam a agenda no WhatsApp, em cadernos físicos ou em planilhas. Isso gera confusão, no-shows sem punição e tempo perdido com confirmações manuais. A Vain nasceu para resolver isso: uma plataforma onde o prestador configura seus serviços e disponibilidade uma vez, e os clientes agendam sozinhos pela internet, sem precisar falar com ninguém.

O que ele faz

Cada prestador tem uma página pública de booking com URL própria. O cliente entra, escolhe o serviço, seleciona um horário disponível e confirma — tudo em menos de dois minutos.

Por trás disso, o prestador tem um portal completo de gestão:

  • Calendário visual com todos os agendamentos
  • Configuração de horários, pausas e períodos fechados
  • Serviços com preço, duração e taxa de reserva opcional
  • Formulários personalizados que o cliente preenche ao agendar
  • Gestão de clientes com histórico, notas e lista negra
  • Pagamentos via Stripe Connect — a taxa de cancelamento ou depósito vai direto para a conta do prestador
  • Sincronização com Google Calendar
  • Lembretes automáticos por email e WhatsApp

Decisões técnicas

Por que NestJS no backend? A agenda tem regras complexas: antecedência mínima, otimização de slots para evitar "buracos", auto-cancelamento de agendamentos expirados, cobranças automáticas. NestJS com sua arquitetura modular e suporte nativo a filas (BullMQ) deixou esse domínio organizado. Cada feature vive num módulo isolado — alterações em pagamentos não tocam em calendário.

Stripe Connect como trade-off central Poderíamos ter guardado o dinheiro e repassado depois — mais simples tecnicamente. Escolhemos Stripe Connect para que cada prestador tenha sua própria conta e receba diretamente. Isso aumentou a complexidade de onboarding, mas eliminou risco regulatório de "guardar dinheiro de terceiros" e gerou muito mais confiança dos prestadores.

Disponibilidade calculada em tempo real O maior desafio técnico: calcular os slots disponíveis considerando horários de funcionamento, breaks, períodos fechados, agendamentos existentes, tempo extra de cada serviço e otimização de agenda (evitar slots que gerariam buracos improdutivos). Acabei escrevendo um algoritmo próprio que roda no backend a cada request de disponibilidade — simples de testar e fácil de ajustar conforme novos casos de uso aparecem.

O que aprendi: Agendamento parece simples até você começar a lidar com timezones, conflitos de concorrência e edge cases de cancelamento. Modelar bem o domínio antes de escrever código teria economizado semanas.

Outro aprendizado importante foi que os prestadores tinham necessidades que não antecipamos. O que planejávamos como próximo passo frequentemente ficou para depois, porque surgiam demandas mais urgentes dos próprios usuários — coisas que não estavam no roadmap mas que eram bloqueantes para eles no dia a dia. Aprendemos cedo que nossa percepção do que era prioritário raramente coincidiu com a realidade de quem usa o produto.

Resultados

O projeto ainda está em fase inicial — early traction, não lucrativo:

  • 3 prestadores usando ativamente a plataforma
  • +5.000 agendamentos processados
  • R$200/mês de receita recorrente (MRR)

O aprendizado mais valioso foi perceber que o problema de onboarding do prestador (configurar serviços, horários, conectar Stripe) era maior do que o booking em si. A próxima fase é simplificar esse fluxo para reduzir o tempo de ativação.