VIP Taxi Vallarta
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 que garantiza 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
Stack
Next.js, TypeScript, MongoDB
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.
Lo que construimos
- —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.
Resultados
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