Académico
Imperial Bliss
Plataforma de reservas para una cadena hotelera con gestión por roles y dos chatbots de IA — uno para recepción, otro para clientes.
El problema
Gestionar una cadena hotelera necesita experiencias muy distintas según quién la usa: un cliente buscando y reservando habitaciones, un recepcionista gestionando el día a día, y un administrador con visión global. El proyecto añade además soporte conversacional con IA para ambos lados (recepción y cliente), en vez de limitarse a formularios tradicionales.
Galería
Cómo se hizo
- PHP (MVC, PDO)
- MySQL/MariaDB
- n8n + Ollama (chatbots IA)
- Docker
- OAuth (Google/Facebook)
- SOAP (Catastro)
- — Construí la parte de cliente — búsqueda y reserva de hoteles, mapas interactivos de ubicación, perfil de usuario, tarjetas de pago — separada por completo del panel de trabajador/admin dentro de la arquitectura MVC, para que cada rol tenga su propio flujo sin mezclar lógica ni permisos.
- — Las credenciales de cliente se guardan con hash, nunca en texto plano — con datos de pago y reservas reales de por medio, no era negociable aunque fuera un proyecto académico.
- — Los dos chatbots corren como workflows de n8n independientes (uno orientado a operativa de recepción, otro a búsqueda conversacional de disponibilidad), cada uno con su propio proxy PHP — así un fallo en uno no afecta al otro.
- — El sistema de disponibilidad comprueba habitación por habitación y hotel por hotel, cruzando fechas y horas de entrada/salida para evitar que dos reservas se solapen en la misma habitación — y ese estado tiene que mantenerse sincronizado con el resto de la app (paneles, chatbots) en todo momento. Fue la parte que más tiempo me llevó de todo el proyecto.
Retos y aprendizajes
El mayor reto fue la lógica de disponibilidad de las reservas: hay que tener en cuenta todas las habitaciones de todos los hoteles, para días y horas distintos en cada petición, sin que dos reservas puedan pisarse la misma habitación — y que ese cálculo se mantenga sincronizado con el resto de la aplicación en tiempo real. Fue la pieza que exigió más cuidado de todo el proyecto, y de la que más aprendí sobre diseñar datos y validaciones para evitar condiciones de carrera.