VIP Transportation

Nosotros construimos viptransportation.mx de punta a punta: el sitio de reservaciones de transporte privado de lujo en Puerto Vallarta que hoy corre en producción con PayPal en vivo. Tomamos un negocio que se operaba por WhatsApp y lo convertimos en un flujo de 6 pasos bilingüe sobre Next.js, PayloadCMS y MongoDB, donde el cliente cotiza y paga con certeza y el operador controla todo desde un solo admin. El corazón es lo que no se ve: un motor de precios que resuelve ruta, vehículo, viaje redondo, recargo nocturno, peajes foráneos, promociones e IVA condicionado a CFDI en USD y MXN a la vez, y un patrón de pago draft-antes-de-cobrar respaldado por reconciliación automática para que ningún cobro de PayPal quede sin reserva. La prueba está en la escala: 11 colecciones de dominio, 20 endpoints, 3 formas de pago coexistiendo, y despliegue sin downtime que pone cada cambio en producción en segundos.

Categoría
Transporte
Estado
En operación

El problema

El transporte privado de aeropuerto en Vallarta se vendía por WhatsApp y llamadas: tarifas improvisadas, cero confirmación formal y pagos que el operador perseguía a mano. El turista internacional no sabía cuánto iba a pagar ni en qué moneda, y el operador no sabía si el cobro había entrado. El dolor real no estaba en mover gente del aeropuerto al hotel; estaba en el hueco entre la cotización y el cobro confirmado, donde se perdían reservas y dinero.

La solución

  • Flujo de reservación de 6 pasos bilingüe (es/en) para dos productos: traslado de aeropuerto y chofer privado por horas, con indicador de progreso y validación paso a paso.
  • Motor de precios dinámico que combina ruta o zona, vehículo, viaje redondo (descuento 5%), recargo nocturno (+20% de 11pm a 5am), peaje de autopista para rutas foráneas, complementos, códigos promocionales e IVA del 16% solo cuando se pide CFDI; calcula en USD y MXN simultáneamente.
  • Integración PayPal Orders v2 en vivo con patrón draft-antes-de-cobrar: la reserva se persiste como borrador ANTES de abrir PayPal, así ningún cobro queda sin registro al que ligarlo.
  • Tres formas de pago coexistiendo: PayPal, transferencia bancaria (SPEI) con carga de comprobante, y pago a la llegada — con reglas de negocio que fuerzan 100% por adelantado en rutas foráneas.
  • Reconciliación automática vía cron que revisa los pagos PayPal pendientes y decide finalizar, cancelar o esperar, cerrando el hueco cuando un webhook falla.
  • CMS Payload con 11 colecciones (Flota, Rutas, Zonas, Complementos, Reservas, Destinos, Testimonios, FAQs, Páginas, Media, Usuarios) — el operador cambia precios y catálogo desde /admin sin redeploy.
  • Selección de destino con mapa interactivo (MapTiler) que guarda coordenadas lat/lng del pin elegido en la reserva.
  • Correos transaccionales propios por SMTP (confirmación al cliente, notificación al operador, recibo de transferencia) renderizados con React Email, más generación de PDF de la reserva.
  • Sitio multilingüe con páginas dedicadas (traslados de aeropuerto, chofer privado, flota, contacto, términos, privacidad) servidas por locale con next-intl.
  • Despliegue sin downtime con webhook propio: un push a main queda en producción en segundos, con rollback inmediato.

Cómo lo hicimos

Empezamos por el hueco entre la cotización y el cobro. Antes de diseñar pantallas escribimos las reglas de precio que el operador aplicaba de memoria (ruta o zona, tipo de vehículo, viaje redondo, horario nocturno, peajes en rutas foráneas, complementos y promociones) y las convertimos en un motor que calcula en dólares y en pesos a la vez, con IVA sólo cuando el cliente pide factura.

Sobre ese motor construimos la reservación en seis pasos, en español e inglés, para los dos productos del negocio. El pago va con PayPal en vivo y sigue el patrón de guardar la reserva como borrador antes de cobrar: si el aviso de pago se pierde, una conciliación automática encuentra el cobro y cierra la reserva. Conviven tres formas de pago, con reglas que piden pago anticipado en rutas foráneas.

El operador administra flota, rutas, zonas, precios, reservas y contenido desde un panel, sin tocar código; la confirmación por correo y el PDF de la reserva salen solos. Cada cambio llega a producción en segundos, sin corte.

El resultado

  • 11 colecciones de dominio en Payload (Flota, Rutas, Zonas, Complementos, Reservas, Destinos, Testimonios, FAQs, Páginas, Media, Usuarios)
  • 20 endpoints de API (reservas, pagos, reconciliación, PDF, recibo, pricing, contacto)
  • Flujo de reservación de 6 pasos con 2 productos
  • 6 estados de reserva (paypal_pending, pending, confirmed, paid, completed, cancelled)
  • 2 idiomas completos (es/en) con páginas por locale
  • Deploy a producción en segundos por push a main (sin downtime)
  • Producción en vivo en viptransportation.mx con PayPal LIVE

Preguntas frecuentes

¿Sirve para otro negocio que cotiza y cobra por WhatsApp?
Sí: hospedaje, tours, servicios a domicilio o clases. El flujo y el motor de precios se adaptan a tu catálogo y el WhatsApp se conserva para atender.
¿Por qué guardar la reserva antes de cobrar?
Porque así ningún cobro queda sin su reserva: si el pago entra y el aviso se pierde, la conciliación lo encuentra y lo cierra.
¿Se puede cobrar en pesos y en dólares?
Sí. El precio se calcula en las dos monedas al mismo tiempo y el cliente elige cómo pagar.
¿Cuánto tarda un sistema así?
Se construye por etapas; la primera (reserva y cobro de un producto) suele operar en semanas. El calendario exacto va en la propuesta.

Stack técnico

  • Next.js
  • TypeScript
  • MongoDB
  • CMS headless
  • Pagos en línea

Necesitas algo similar