Pular para o conteúdo
Menu

Site + reservas / Turismo

Site, reservas e desempenho para um aluguel de campers em Málaga

Site com disponibilidade em tempo real, pagamento online e roteiros pela Andaluzia em nove idiomas, otimizado depois de uma auditoria de desempenho no celular que encontrou onde os segundos se perdiam.

Contexto
Aluguel de campers · Málaga · 9 idiomas
Tipo de projeto
Site + reservas / Turismo
Serviço relacionado
Ver o serviço de web design

Ficha técnica

Projeto

sundaycampers.es

Tipo
Site + reservas
Stack
Next.js · Supabase · Stripe
Canal
Web, 9 idiomas
Status
Em produção
Ficha do projeto. Não é uma captura da aplicação.
Idiomas
9
Interface e conteúdo localizados
Páginas de roteiro
48
Seis roteiros pela Andaluzia em oito idiomas
Contêineres de analítica
1
Antes eram dois em paralelo

01 / Problema

Um aluguel de campers vende principalmente para turistas estrangeiros que comparam pelo celular, às vezes do exterior e com pressa. Precisa mostrar disponibilidade real, cobrar sem intermediários e aparecer em vários idiomas. E a auditoria no celular de agosto de 2026 mostrou que a imagem principal levava quase cinco segundos para aparecer na tela, não pelo peso, mas por esperas evitáveis.

02 / Contexto

Contexto

A auditoria dividiu o problema em partes mensuráveis. A espera até a imagem principal começar a carregar respondia por 65% do atraso, porque o elemento não existia até a página ser hidratada. A isso se somavam dois contêineres de analítica em paralelo, um redirecionamento da raiz para o espanhol que custava cerca de 700 ms e imagens carregadas de domínios de terceiros.

Ver o serviço de web design

03 / Solução

Como resolvemos

O site foi construído com Next.js sobre Supabase e Stripe. A disponibilidade é lida de uma view diária por veículo e sincronizada com calendários externos via iCal. O preço é recalculado no servidor antes de criar o pagamento, e o próprio banco de dados impede que duas reservas se sobreponham. Depois da auditoria, as causas encontradas foram corrigidas no código, uma por uma.

Fluxo

  1. 01

    Restrição de exclusão no Postgres para que duas reservas não possam se sobrepor

  2. 02

    Preço recalculado no servidor, sem confiar no total enviado pelo navegador

  3. 03

    Checkout com chave de idempotência e webhook com assinatura verificada

  4. 04

    Hero renderizado no servidor com prioridade alta em vez de esperar a hidratação

  5. 05

    Hreflang por idioma com x-default e sitemap com data de modificação real

Eixos do trabalho

Reservas que não se sobrepõem

O overbooking é evitado no banco de dados, não na interface. Mesmo que dois pagamentos cheguem ao mesmo tempo, o Postgres rejeita o segundo.

  • Intervalos de datas com restrição de exclusão
  • Sincronização iCal idempotente com outros canais
  • Reservas pendentes de pagamento reaproveitadas, não duplicadas

Desempenho tratado pelas causas

Cada correção responde a um achado medido na auditoria, não a uma lista genérica de boas práticas.

  • Um só contêiner de analítica em vez de dois
  • Reescrita na raiz em vez de redirecionamento 307
  • Polyfills antigos removidos com uma lista de navegadores atualizada

Internacional de verdade

O público chega em muitos idiomas, então os roteiros, os veículos e as páginas de destino têm versão própria e hreflang recíproco.

  • Nove idiomas na interface
  • Dados estruturados de empresa de aluguel, roteiros e perguntas frequentes

04 / Escopo

O que faz

  • Mostra a disponibilidade de cada camper com os dias bloqueados no calendário
  • Calcula o preço com extras e cobra com Stripe Checkout
  • Sincroniza reservas de outros canais via iCal
  • Publica roteiros pela Andaluzia e páginas de veículos em vários idiomas
  • Oferece contato direto pelo WhatsApp em cada veículo

05 / Resultados

O que mudou

A imagem principal agora é renderizada no servidor com prioridade alta, resta um único contêiner de analítica carregado de forma adiada, a raiz é resolvida com uma reescrita em vez de um redirecionamento e todas as imagens são servidas pelo próprio domínio. Falta medir de novo com a mesma metodologia para publicar os números de depois; quando estiverem prontos, aparecerão aqui com a data.

Segurança e confidencialidade

  • Segurança em nível de linha nas tabelas do Supabase.
  • O webhook do Stripe verifica a assinatura de cada evento antes de confirmar uma reserva.
  • As imagens de terceiros foram substituídas por imagens próprias hospedadas no domínio.

06 / Perguntas

Perguntas frequentes

Por que os números de desempenho ainda não foram publicados?

Porque só publicamos números medidos com método e data. As correções estão no código; a nova medição com o PageSpeed Insights, com a mediana de várias execuções, será publicada nesta ficha quando estiver feita.

Por que o problema não era o peso da imagem?

O download da imagem levava cerca de 126 ms. O tempo ia embora na espera: quase 1,8 segundo até começar a carregá-la, porque o elemento não existia no HTML inicial, e mais 0,8 segundo até poder exibi-la.

Seu próximo projeto

Quer um case assim para o seu negócio?

Vamos falar do seu projeto