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.
Para algo así en tu empresa
Stack técnico
- Next.js
- TypeScript
- MongoDB
- CMS headless
- Pagos en línea