Como criar uma app de reservas: horários, disponibilidade, lembretes e sinais
Para criar uma app de reservas precisa de quatro coisas a funcionar em conjunto: uma lista do que pode ser reservado (serviços, salas, equipa), regras para quando cada coisa está disponível, um fluxo de reserva que só oferece horários realmente livres, e uma vista privada onde o negócio gere o que entrou. Um criador de apps com IA pode produzir uma primeira versão funcional a partir de uma descrição curta em minutos; o trabalho real é decidir as regras — duração das marcações, intervalos, cancelamentos, fusos horários — e testar que reservas duplicadas são impossíveis.
Comece por decidir o que significa “uma reserva” para si
As apps de reservas parecem-se à superfície, mas diferem muito por dentro. Responda primeiro a estas perguntas:
- O que é reservado? Um serviço (um corte de cabelo), uma pessoa (um explicador), um recurso (uma sala de reuniões, um campo, uma carrinha), ou um lugar numa sessão (uma aula de yoga com 12 lugares).
- Quanto tempo demora? Fixo por serviço, ou escolhido pelo cliente?
- Quem o presta? Uma pessoa, vários funcionários com horários próprios, ou ninguém (uma sala)?
- O que acontece depois de reservar? Confirmação imediata, ou um pedido que o proprietário aprova?
- Há dinheiro envolvido? Gratuito, pagamento no próprio dia, sinal antecipado ou pagamento total antecipado?
“Pedir uma hora, o proprietário confirma por email” é muito mais simples de construir do que “reserva instantânea contra três agendas de funcionários com sinais”. Ambas são válidas — escolha a que realmente precisa para a primeira versão.
O que a app precisa
Dados
| Tabela | Campos principais |
|---|---|
| Serviços | Nome, duração, preço, intervalo após o serviço, ativo sim/não |
| Funcionários ou recursos | Nome, quais os serviços que oferecem |
| Disponibilidade | Horário de trabalho semanal por funcionário, mais exceções (feriados, encerramentos pontuais) |
| Reservas | Serviço, funcionário, hora de início, hora de fim, dados do cliente, estado (pendente, confirmada, cancelada), estado do pagamento |
| Clientes | Nome, email, telefone, notas — opcional no início; podem ficar na própria reserva |
Guardar a hora de fim em cada reserva, e não apenas a de início, torna as verificações de sobreposição muito mais simples.
Páginas
- Pública: lista de serviços, seletor de horários, formulário de reserva, página de confirmação e uma ligação para cancelar ou remarcar.
- Privada (proprietário ou funcionários): agenda de hoje, reservas futuras, uma forma de bloquear tempo de folga e definições de serviços e horários.
Permissões
Os clientes só devem ver horários livres ou ocupados — nunca os nomes de outros clientes. Os funcionários podem ver apenas a sua própria agenda; o proprietário vê tudo. Escreva isto, porque define se precisa de inícios de sessão e de perfis. O nosso guia sobre como acrescentar início de sessão à sua app aborda as opções.
As partes difíceis, e como as tratar
Reservas duplicadas
O erro clássico: duas pessoas carregam a página, ambas veem as 10:00 livres e ambas reservam. A solução é verificar de novo no servidor quando a reserva é guardada e recusá-la se algo se sobrepuser agora. Peça isto explicitamente:
Ao guardar uma reserva, verifique novamente no servidor que nenhuma reserva confirmada ou pendente do mesmo funcionário se sobrepõe ao horário pedido (incluindo o intervalo). Se existir, recuse-a e mostre “Esse horário acabou de ser ocupado — escolha outro.”
Depois teste com duas janelas do navegador.
Fusos horários
Guarde sempre cada hora em UTC e converta-a para apresentação. Decida de que fuso horário é a página de reservas — normalmente o do negócio para serviços presenciais, e o do cliente para chamadas online — e indique-o na página. Teste uma reserva que atravesse uma mudança de hora (horário de verão).
Intervalos, antecedência e limites
Regras comuns que vale a pena decidir desde o início: um intervalo entre marcações, antecedência mínima (“sem reservas com menos de 2 horas de antecedência”), com quanto tempo de antecedência se pode reservar, e um limite diário. Cada uma é uma frase num pedido; deixá-las de fora significa que a IA escolhe predefinições por si.
Cancelamentos e faltas
Dê a cada confirmação uma ligação de cancelamento com um token único para que os clientes não precisem de conta. Decida a janela de cancelamento e se os sinais são reembolsáveis, e mostre essa política antes do pagamento.
Lembretes
Os emails ou SMS de lembrete precisam de algo que corra de forma agendada (“a cada 15 minutos, envie lembretes para reservas que começam nas próximas 24 horas”). Verifique como o seu criador e o alojamento tratam tarefas agendadas. Se não o fizerem, use um agendador externo que chame um endereço da sua app, ou envie o email de confirmação com um convite de calendário em anexo para que o calendário do próprio cliente o lembre. Veja como enviar emails a partir da sua app para o lado do fornecedor de email.
Sinais e pagamentos
O padrão habitual com o Stripe:
- O cliente escolhe um horário; a app cria uma reserva pendente que retém o horário durante pouco tempo (por exemplo, 15 minutos).
- A app envia-o para o Stripe Checkout para pagar o sinal.
- O Stripe notifica a sua app através de um webhook quando o pagamento é bem-sucedido; a reserva passa a confirmada.
- Se o pagamento não acontecer a tempo, a reserva pendente expira e o horário volta a ficar livre.
A tarifa padrão do Stripe é uma percentagem mais uma taxa fixa por cada pagamento bem-sucedido com cartão, sem mensalidade (a partir de setembro de 2026); as taxas variam por país, por isso consulte a página de preços do Stripe para o seu. Use o modo de teste e cartões de teste até tudo funcionar. O nosso guia para adicionar pagamentos segue passo a passo.
Um primeiro pedido que funciona
Crie uma app de reservas para a Northside Barbers. Serviços: Corte de cabelo (30 min, $25), Aparar a barba (15 min, $12), Corte + barba (45 min, $32). Dois barbeiros, Sam e Ali, cada um a trabalhar de terça a sábado das 9:00 às 18:00. Os clientes escolhem um serviço, depois um barbeiro ou “qualquer barbeiro”, e veem apenas os horários de início livres de 15 minutos nos próximos 14 dias, e introduzem nome, telefone e email. Guarde as reservas numa base de dados, com um intervalo de 10 minutos após cada marcação, e verifique novamente a disponibilidade ao guardar para evitar reservas duplicadas. Mostre uma página de confirmação com uma ligação de cancelamento. O proprietário tem uma página privada com as reservas de hoje e futuras, pode cancelar uma reserva e bloquear tempo. As horas são no fuso horário local da loja. Design limpo, pensado primeiro para telemóvel.
Nomeia os serviços, a equipa, os horários, as regras e a vista do proprietário — tudo o que a IA, de outro modo, adivinharia.
Passos de construção
- Primeiro, o fluxo de reserva principal. Serviços → horário → formulário → reserva guardada → confirmação. Nada mais até isto funcionar num telemóvel.
- Vista do proprietário. Lista de hoje, lista de futuras, cancelar, bloquear tempo.
- Proteja as páginas do proprietário. Acrescente início de sessão antes de entrarem dados reais.
- Regras. Intervalos, período de antecedência, horizonte de reservas, feriados.
- Email. Confirmação com convite de calendário e ligação de cancelamento.
- Sinais, se precisar, primeiro no modo de teste do Stripe.
- Teste os casos limite. Duas janelas a reservar o mesmo horário, uma reserva que atravesse a meia-noite, uma data de mudança de hora, uma reserva cancelada que liberta o seu horário.
- Publique e depois faça vós uma reserva real antes de partilhar a ligação.
Erros comuns
- Verificar a disponibilidade apenas no navegador. Parece correto e continua a permitir reservas duplicadas.
- Guardar horas locais sem fuso horário. Funciona até os relógios mudarem.
- Mostrar os nomes dos clientes no calendário público. Mostre apenas livre ou ocupado.
- Construir a gestão de funcionários, pontos de fidelidade e SMS no primeiro dia. Lance o fluxo principal e depois acrescente o que os clientes realmente pedem.
- Não haver forma de o proprietário bloquear tempo. O primeiro dia de doença vai criar faltas.
Quando o Calendly (ou semelhante) é a melhor escolha
Se é uma pessoa a partilhar a sua disponibilidade para chamadas, uma ferramenta de agendamento é difícil de bater. A partir de setembro de 2026, o plano gratuito do Calendly cobre um tipo de evento, uma ligação a um calendário e agendamento individual com uma página de reservas personalizável, e os planos pagos acrescentam mais tipos de evento e funcionalidades de equipa. Ferramentas como esta ligam-se ao seu calendário existente logo de início, o que uma app feita à medida tem de ser construída para fazer.
Crie a sua própria quando precisar de regras que estas ferramentas não suportam, de vários recursos reserváveis, da sua marca em todo o lado, de reservas ligadas a outros dados (clientes, encomendas, subscrições), ou se está a construir um produto de reservas para vender a outros.
Criar com a Mythex
Na Mythex descreve a app de reservas no chat, ela é construída numa pré-visualização em tempo real, e é acrescentada uma base de dados Postgres quando as reservas precisam de ser guardadas. O caso de uso de página de reservas na documentação sugere começar com um formulário de pedido e uma lista de administração, e depois acrescentar o resto. Seja claro sobre o que já vem incluído e o que liga por si: a Mythex não tem sincronização de calendário, lembretes por SMS nem um produto de sinais incluídos. O email passa pelo seu próprio fornecedor, os sinais pelas suas chaves Stripe guardadas como segredos do projeto (receita do Stripe), e as regras de reservas duplicadas e de fusos horários são coisas que especifica e testa, como acima.
O comando /test faz com que o agente percorra o fluxo de reserva na pré-visualização e relate o que falha. Para um ponto de partida, experimente os modelos de website de barbearia com reservas ou agendador de reuniões, ou veja todos os modelos de apps.
Perguntas
Que funcionalidades precisa uma app de reservas?
No mínimo: uma lista de serviços com durações, uma forma de mostrar apenas os horários livres, um formulário de reserva, uma confirmação e uma página privada onde o negócio vê e gere as reservas. Os lembretes, os sinais e os calendários de equipa vêm a seguir.
Como evito reservas duplicadas?
Verifique a disponibilidade no servidor no momento em que a reserva é guardada, e não apenas quando a página carrega, e recuse a reserva se o horário tiver sido ocupado entretanto. Teste tentando reservar o mesmo horário a partir de duas janelas do navegador.
Uma app de reservas feita à medida pode receber sinais?
Sim. A abordagem habitual é enviar o cliente para uma página de pagamento do Stripe Checkout para o sinal e só confirmar a reserva quando o pagamento for bem-sucedido. Precisa da sua própria conta Stripe e das respetivas chaves.
Devo criar uma app de reservas ou usar o Calendly?
Se apenas uma pessoa precisa de partilhar a sua disponibilidade e nada no fluxo é invulgar, uma ferramenta de agendamento como o Calendly é mais rápida e mais barata de manter. Crie a sua própria quando precisar de regras próprias, de vários recursos, da sua marca em todo o lado, ou de reservas ligadas a outros dados que guarda.