2026-06-20 20:01:40 +02:00
2026-06-20 20:01:40 +02:00
2026-06-20 20:01:40 +02:00
2026-06-20 20:01:40 +02:00
2026-06-18 17:08:26 +02:00
2026-06-18 17:08:26 +02:00
2026-06-18 17:08:26 +02:00
2026-06-20 20:01:40 +02:00
2026-06-20 20:01:40 +02:00

MAY Studio — Landing Page + EasyAppointments

Landing page bonita para MAY Studio (Horta, Barcelona) con reservas gestionadas por EasyAppointments.

El frontend (HTML/JS puro) sigue siendo el de la landing, pero las reservas, clientes y servicios se gestionan completamente con EasyAppointments.

Stack actual

  • Web (estático): Go + proxy reverso a EasyAppointments API
  • Gestión de citas, clientes y servicios: EasyAppointments (PHP + MySQL)
  • Base de datos: MySQL (para EA)
  • Docker Compose: todo junto (web + easyappointments + mysql)

Cómo ejecutar (Desarrollo y Producción)

1. Levantar todo

docker compose up -d --build

2. Primer arranque (importante)

  1. Abre http://localhost:8888
  2. Completa el asistente de instalación de EasyAppointments.
  3. Crea un usuario administrador.
  4. Ve a Providers → crea al menos un proveedor (ej. "May").
  5. Ve a Services → crea tus servicios (puedes usar la lista anterior de servicios como referencia).
  6. Asigna los servicios al proveedor.
  7. Configura el Working Plan del proveedor (horario).
  8. Anota el ID del Provider (normalmente 1) y edita static/index.html → línea const PROVIDER_ID = 1;

3. Variables importantes en compose

Edita docker-compose.yml antes de levantar:

  • EA_API_USERNAME + EA_API_PASSWORD (o mejor: configura API Key en Settings de EA y usa EA_API_KEY)
  • BASE_URL del servicio easyappointments
  • Contraseña de MySQL

Actualizar

git pull
docker compose up -d --build

Notas sobre la integración

  • Los servicios y la disponibilidad los obtiene el frontend directamente de la API de EasyAppointments.
  • Al reservar:
    • Busca o crea automáticamente el cliente usando el email.
    • Crea la cita en EasyAppointments (con todos los servicios seleccionados en las notas).
  • La gestión completa (clientes, servicios, citas, proveedores, etc.) se hace desde http://localhost:8888
  • La API antigua (carpeta api/ + admin.html antigua + services.yml/mail.yml) ha sido eliminada completamente.

Comportamiento multiservicio

El formulario permite seleccionar varios servicios (multi-checkbox).

Cómo funciona actualmente con EasyAppointments:

  • UI: Puedes seleccionar múltiples servicios. Se muestra el resumen con nombres unidos por "+" y la duración total sumada.
  • Comprobación de disponibilidad: Se consulta el endpoint de EA usando el servicio de mayor duración de los seleccionados. Luego se filtra client-side para exigir un bloque contiguo de la duración total (suma de todos).
    • Ejemplo: servicios de 45min + 30min → total 75 min. Solo se ofrecen horas de inicio desde las que quepan 75 min seguidos sin solape.
  • Al crear la reserva:
    • Se crea una sola cita en EasyAppointments.
    • Se usa como serviceId el servicio de mayor duración (para que coincida con la disponibilidad consultada).
    • Se calcula la hora de fin sumando la duración total de todos los servicios seleccionados y se envía explícitamente el campo end. Así EA bloquea el tiempo completo en el calendario de la empleada.
    • Solo una empleada (May) por ahora → el bloque queda reservado y no se puede reservar otra cosa en ese intervalo.
    • En el campo notes se guarda el detalle completo:
      Nombre: ...
      Email: ...
      Teléfono: ...
      Servicios: Corte + Tinte + ...
      Duración total: 120 min
      Mensaje: ...
      

Limitación: EasyAppointments modela una cita = un servicio principal. Los servicios adicionales quedan documentados en las notas del cliente y de la cita. No se crean múltiples registros de cita.

Recomendación: Si usas combinaciones frecuentes, crea "servicios combinados" directamente en EasyAppointments (ej. "Corte + Tinte Señora - 120min").

S
Description
No description provided
Readme
1.7 MiB
Languages
HTML 41.3%
Go 41.2%
CSS 15.5%
Shell 1.7%
Dockerfile 0.3%