Marlon's profile picture
en

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.

Thumbnail
Home
Home Gallery
Booking Mobile
Booking
Gallery Page
Dashboard
Admin Panel
Client Coupons
Client Reservations
Reviews Page
Payment Flow
Mobile View
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.

Gostou do projeto?

Vamos conversar sobre sua ideia.

Entrar em contato