El desafío
Un motor de reservas envejecido en Vue 2 + Laravel 7. Los pagos con Stripe funcionaban, pero el flujo de reserva perdía sesiones en móvil, el dashboard del staff requería VPN para acceder, y el resort pagaba 15% de comisión de OTA sobre clientes que habían tecleado `arenasdelmar.com` directamente en su navegador. Seis meses para temporada alta.Nuestra solución
Reconstruir el flujo público de reservas en Livewire 4 por la velocidad (sin tiempo de arranque de SPA), mantener el core de Laravel, reemplazar el admin legacy con Filament, y enrutar cada ruta pública a través de Cloudflare Workers para A/B testear el flujo nuevo contra el viejo sin tocar el código de origen. El cutover fue un cambio de 12 líneas en la config del worker a las 4am de un martes.Los resultados
Reservas directas 52% arriba interanual, seis meses post-migración. El abandono de carrito bajó de 38% a 24% en móvil. El resort mantuvo abiertos los canales de OTA, pero su participación en las reservas cayó de 71% a 49%. Cero downtime durante el cutover.El cutover
La parte difícil de migrar un motor de reservas no es el motor nuevo — es el cutover. Preparamos la reconstrucción durante 12 semanas, con el motor nuevo respondiendo al 5% del tráfico vía una regla de ruta de Cloudflare Worker durante las últimas 3 semanas antes del lanzamiento. Para cuando movimos la regla al 100% a las 4am de un martes, teníamos:
- 3 semanas de tráfico real de producción en el motor nuevo
- 14.000+ reservas de prueba exitosas (algunas reales, algunas QA shadow)
- Un plan de rollback que era un cambio de 12 líneas en la config del worker
El “lanzamiento” fue un no-evento. El equipo miró dashboards por 2 horas, no vio anomalías, y se volvió a dormir.
Qué le advertiríamos al siguiente cliente
No subestimes la integración de email. Los correos de confirmación de reserva son el asesino silencioso de estas migraciones — el resort tenía 22 plantillas de email distintas entre confirmación, modificación, cancelación y solicitudes de dieta, todas renderizadas desde un motor de plantillas legacy que nadie entendía. Portar eso tomó más tiempo que el flujo de reservas en sí. Presupuestá 30% del proyecto para eso.