Saltar al contenido
← Volver a Proyectos

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

Búsqueda y resultados de hoteles disponibles
Ficha de hotel con mapa interactivo de ubicación
Selección de método de pago
Validación de tarjeta de pago inválida
Vista mobile de la búsqueda
Perfil de usuario

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.

Ver en GitHub