Saltar al contenido
Proyectos

Reservas de canchas deportivas

Reserva en línea para un complejo deportivo, de la interfaz en React a la base de datos en Supabase. El cliente elige su hora, paga y recibe un código, sin llamadas ni confirmaciones manuales.

  • React
  • TypeScript
  • Supabase
Pantalla de reserva con el calendario de canchas, las horas disponibles y el precio por hora.

El problema

El negocio tomaba las reservas por WhatsApp y por teléfono. Eso significa alguien pendiente del móvil en horario de partido, huecos vendidos dos veces y cobros que se quedaban en «te pago al llegar».

Lo que construí

Un flujo cerrado: el cliente ve la disponibilidad real, elige día y hora, inicia sesión, paga con Culqi y recibe un código de seis caracteres para entrar.

La parte que costó fue la consistencia: dos personas que piden la misma hora con segundos de diferencia, un usuario que cierra el navegador a mitad del pago o una respuesta que no llega. La reserva solo se confirma contra el estado que devuelve la pasarela, no contra lo que haya visto el navegador.

La segunda versión

La primera versión fue un monolito en Laravel sobre MySQL. La reescribí en React y TypeScript contra Supabase, y lo que vivía en el servidor de aplicación pasó a la base de datos: el esquema, las políticas de acceso por fila y las funciones que confirman la reserva. El webhook de Culqi llega a una función de borde aparte y concilia lo que la respuesta del cargo no alcanzó a resolver.

Cómo quedó

El negocio dejó de contestar el móvil para vender horas.

Nota sobre los datos

La captura es de una versión de demostración con datos de ejemplo. Los datos reales del negocio no se publican.