Plataforma de reservas para chácara com pagamento antecipado obrigatório, cancelamento automático por prazo, precificação dinâmica, sistema de cupons configurável e integração com Asaas.
01
Visão Geral
Recanto do Trovador é uma plataforma de reservas para uma chácara em Imbituva, Paraná. Os proprietários precisavam de um sistema que automatizasse a confirmação de pagamentos, impedisse conflitos de datas e oferecesse aos clientes visibilidade real sobre o processo — sem depender de troca de mensagens para cada etapa.
O sistema exige um pagamento antecipado de 20% para confirmar a reserva. Se o pagamento não ocorre dentro do prazo, a reserva é cancelada automaticamente e a data volta a ficar disponível. A plataforma oferece política de cancelamento configurável — o administrador define se o valor pago é reembolsado ou convertido em cupom de desconto — e precificação dinâmica que diferencia dias comuns, finais de semana e períodos especiais. O sistema de cupons permite emitir códigos com regras de uso, limite de reutilização e restrição por usuário.
A plataforma foi construída com Next.js, TypeScript e PostgreSQL via Supabase, com Drizzle ORM para modelagem do banco. O painel administrativo usa shadcn/ui e centraliza reservas, tarifas, cupons, visitas e documentos. Pagamentos via Asaas, com suporte a Pix e cartão de crédito. Animações com Motion.js e controle de URL state com nuqs.
02
Desafio
O coração do sistema é um fluxo de pagamento condicional: a reserva só é confirmada após o pagamento de 20% do valor dentro de um prazo definido. Se o pagamento não ocorre, a data precisa voltar ao calendário automaticamente — sem intervenção manual, mesmo que o usuário abandone a sessão no meio do processo. Garantir que dois clientes não reservassem a mesma data simultaneamente exigiu controle transacional no banco, tornando o bloqueio de datas atômico.
A política de cancelamento precisava ser inteiramente configurável: o administrador define se o valor pago é reembolsado integralmente, parcialmente ou convertido em cupom. O sistema de cupons, por sua vez, precisava suportar códigos reutilizáveis ou de uso único, restritos a usuários específicos ou abertos, originados tanto de promoções quanto de cancelamentos — cada origem com suas próprias regras. Manter essa lógica flexível sem torná-la ingovernável no painel foi um ponto de atenção constante.
Além do fluxo de pagamento, outros três desafios se somaram: implementar autenticação sem senha via magic link para reduzir atrito no processo de reserva; criar um sistema de precificação dinâmica que aplicasse tarifas diferentes para dias comuns, fins de semana e eventos especiais sem hardcode; e garantir que toda a experiência fosse acessível e funcional em smartphones, já que a grande maioria dos usuários reservaria pelo celular.
03
Solução
Estruturei o fluxo de reserva em estados explícitos no banco — pending, awaiting_payment, confirmed, cancelled — com cron jobs na Vercel para expirar reservas não pagas dentro do prazo. Transações atômicas no banco garantem que a mesma data não seja reservada por dois clientes simultaneamente, mesmo sob carga concorrente.
A autenticação por magic link foi implementada com código temporário enviado por e-mail e validado em etapa posterior — sem senha permanente e sem fricção desnecessária. A política de cancelamento e todas as regras de cupom ficaram configuráveis pelo painel administrativo, desacoplando as regras de negócio do código. O administrador ajusta prazos, valores, restrições e exceções sem precisar de alterações no front-end.
O sistema de preços foi modelado com tarifas por tipo de dia, gerenciadas diretamente no painel. A integração com o Asaas cobre Pix e cartão, com verificações automáticas de status de pagamento. O projeto foi desenvolvido com abordagem mobile-first, garantindo que o fluxo completo de reserva — busca de datas, pagamento e acompanhamento — funcionasse sem comprometimentos em telas pequenas.












