Le parcours d'une cliente sur ton lien `sloxo.app/book/` se fait en quelques étapes. Aucun compte à créer, pas d'app à installer.

Étape 1 — Arrive sur ta page publique

La cliente clique sur ton lien (Instagram bio, story, WhatsApp, SMS…). Elle arrive sur ta page `/book/` :

  • Image de couverture (si tu en as une)
  • Avatar + (logo) + Nom business + Métier + 📍 Ville
  • Bio courte (si renseignée)
  • Liste des prestations (par groupe si tu en as plusieurs)
  • Packages (forfaits multi-services) si tu en as
  • Portfolio "Réalisations" (si tu as uploadé des images)
Le téléphone et l'email ne sont pas affichés sur la page publique.

Étape 2 — Choisit une prestation ou un package

Elle clique sur la carte de la prestation qui l'intéresse :

  • Prestation simple → page `/book//`
  • Package → page `/book//package/` (réservation en bloc)
  • Multi-services (si elle veut combiner plusieurs services à la carte) → page `/book//multi`

Étape 3 — Choisit un créneau

Sur la page de réservation, un calendrier affiche les créneaux disponibles selon :

  • Tes horaires hebdomadaires (jours actifs + heures de travail + pause déjeuner)
  • Tes jours off / vacances
  • Tes événements Google Calendar synchronisés (si activé)
  • Les buffers du service (`buffer_before_minutes`, `buffer_after_minutes`)
  • Les flex_minutes (si tu autorises de déborder un peu)
Si rien n'apparaît : voir Pourquoi mes créneaux n'apparaissent pas.

Étape 4 — Saisit ses coordonnées + adresse

Formulaire :

  • Prénom + Nom
  • Email
  • Téléphone
  • Adresse complète via autocomplete Google (rue, ville, code postal — coordonnées GPS récupérées)
  • Notes (optionnel, ex : "sonner à l'interphone Dupont")
L'adresse est validée en temps réel côté serveur (`/api/bookings/create`) :

  • Hors zone (au-delà de ton rayon + tolérance) → refus immédiat
  • Conflit horaire (autre RDV au même créneau) → refus
  • Service inactif ou inexistant → refus

Étape 5 — Confirme

Au clic sur Confirmer :

  • Le RDV est créé en base avec statut `pending`
  • La cliente reçoit un email "Demande envoyée" (template `pending`) avec son lien d'annulation
  • Tu reçois la notification (point rouge sur Réservations + email pro)
  • Tu peux ensuite Accepter ou Refuser depuis ton dashboard.

    Performances et cache

    La page `/book/` est mise en cache 60 secondes (ISR — `revalidate = 60`). Tes modifications de profil/services sont visibles côté cliente dans la minute qui suit.

    L'OpenGraph image (preview Insta/WhatsApp) est générée dynamiquement avec ton nom, métier, ville, avatar et les 4 premiers services.

    Questions fréquentes

    La cliente reçoit-elle confirmation immédiatement ou après que je valide ? Email "Demande envoyée" immédiat (statut pending). Email "RDV confirmé" quand tu acceptes.

    Combien de temps a-t-elle pour finaliser après avoir choisi un créneau ? Pas de timeout strict, mais le créneau peut être pris par quelqu'un d'autre entre temps si elle traîne. La création utilise une vérification anti-overlap au dernier moment.

    Peut-elle réserver pour quelqu'un d'autre ? Oui, en mettant les coordonnées + adresse de la personne. Aucune restriction.

    Le parcours fonctionne-t-il sur tous les appareils ? Oui : mobile, tablette, desktop. Optimisé en priorité pour mobile.

    Mon lien est-il sécurisé ? La création de réservation passe par une route API (`/api/bookings/create`) qui valide tous les champs côté serveur. La page `/book` est en lecture seule pour le visiteur — aucune écriture client direct.