Problema
Lowgolf Travel es una agencia de viajes de golf: vende salidas a Escocia, Irlanda, Turquía o Portugal donde un mismo grupo mezcla alojamiento, tee times, vuelos, traslados, coches y seguros, cada uno con su proveedor, su tarifa y su fecha límite. Toda esa operación vivía sobre un CRM montado a base de plugins en WordPress, con un modelo de datos que no representaba lo que de verdad se vende —un viaje con varios viajeros, decenas de servicios y pagos escalonados— y con la información de negocio repartida entre correos y hojas de cálculo. La consecuencia práctica: nadie podía responder de un vistazo a la única pregunta que importa el lunes por la mañana, «¿qué salida de esta semana va a descarrilar?».
Solución
Reescribí el CRM entero desde cero en Laravel 13 (PHP 8.3, Blade + Tailwind v4, Alpine.js, MariaDB, Redis y Reverb para tiempo real, todo en Docker), y migré los datos del WordPress con un ETL propio que seudonimiza los datos personales de los registros históricos.
El sistema cubre el ciclo comercial completo: bandeja de leads con cualificación y conversión, oportunidades con embudo, kanban y ficha de trabajo, servicios con editor por tipo y solicitud de disponibilidad al proveedor en dos idiomas, y presupuestos versionados que el cliente abre por un enlace público —sin login— y acepta pagando el depósito con Stripe. Aceptar es lo único que corona una versión: a partir de ahí el plan de cobros se recalcula solo, se desbloquea el itinerario y la oportunidad avanza de etapa.
La parte de dinero es un módulo de administración de verdad: plan de cobros calculado a partir de reglas de negocio, pagos a proveedor con sus condiciones y créditos a favor, facturación con numeración correlativa y PDF, balance de margen presupuestado contra real y cash flow por temporada con detalle diario exportable. Encima va una torre de control operativa con semáforos y listas de lo que falta cerrar, un motor de automatizaciones con disparadores y condiciones, buzón compartido de Microsoft 365 que engancha los correos a su viaje, notificaciones en vivo, roles con permisos finos por módulo y acción, 2FA, modo mantenimiento y un constructor de módulos personalizados que genera un CRUD completo sin tocar código.
Resultado
El CRM está en producción desde junio de 2026 en crmlowgolftravel.com, con Stripe en modo real, correo transaccional, copias de seguridad cifradas dos veces al día y un entorno de preproducción que se refresca a diario desde producción para probar antes de tocar nada. Detrás hay 2.086 tests Pest, PHPStan nivel 5 limpio, Pint y CI en GitHub Actions en cada push, además de una auditoría de accesibilidad sin violaciones axe y sin desbordes horizontales en móvil.
Para la agencia, el cambio real no es tecnológico: la operación entera —quién debe qué, qué servicio sigue sin confirmar y qué grupo sale en cinco días— cabe ahora en una sola pantalla.