Waqtiوقتي

Casablanca · Rabat · Marrakech

Le temps, tel qu’il
se vit au Maroc.

Réservation en ligne, acomptes et rappels WhatsApp pour les salons, les cabinets, les kinés et le lavage auto. Un agenda qui sait déjà que le vendredi a un trou à midi et que le Ramadan décale l’heure du pays.

Sans carte bancaire. Le catalogue de votre métier est déjà rempli.

Vendredi 13 mars

Salon Atlas · Salma

Ramadan · UTC+0
09:00Libre
10:00Coloration — Nadia B.90 min · acompte 120 DH encaissé
11:30Tampon 15 minle salon reste ouvert
12:30Pause prière du vendrediاستراحة صلاة الجمعة · jusqu’à 14:30
14:30Libre
15:00Hammam & gommage — Yasmine60 min
16:15Libre

Rien de tout ça n’est saisi à la main : le vendredi vient d’un modèle de fermeture, l’heure du Ramadan du fuseau, le tampon de la prestation.

Un moteur, plusieurs métiers

Le salon et le cabinet tournent sur le même code.

La différence entre un coiffeur et un kinésithérapeute, chez nous, tient dans un fichier de configuration : le catalogue, les questions posées au client, le délai d’annulation, et ce contre quoi le créneau est réservé. Choisissez le vôtre — ce qui s’affiche est exactement ce que vous aurez le premier jour.

Mode d’allocation

Réservé sur une personne

Deux rendez-vous ne peuvent pas partager le même coiffeur à la même heure.

Le client s’appelle
Client · زبون
Le prestataire s’appelle
Coiffeur · حلاق
Annulation libre jusqu’à
2 h avant
Plusieurs prestations d’affilée
Oui
Séries récurrentes
Non
Forfaits prépayés
Non

Catalogue livré le premier jour

Cheveuxالشعر

  • Coupe homme30 min + 570 DH
  • Coupe femme45 min + 10150 DH
  • Coloration90 min + 15400 DH30% d’acompte
  • Brushing30 min + 5100 DH

Esthétiqueالتجميل

  • Manucure45 min + 5120 DH
  • Hammam & gommage60 min + 15200 DH50% d’acompte

Ce qu’on demande à la réservation

  • Demande particulière

Ajouter un métier, c’est ajouter un objet dans un fichier de configuration. Aucune migration de base, aucune branche if (vertical === …) dans le code métier.

L’heure marocaine

Onze mois à UTC+1, un mois à UTC+0.

Le Maroc recule d’une heure pendant le Ramadan, puis avance à nouveau. La plupart des agendas stockent un horaire d’ouverture comme un instant — et décalent silencieusement d’une heure pendant quatre semaines. Vos clients arrivent alors une heure trop tôt.

Le problème

« Ouvert à 9 h » n’est pas un instant

Une règle récurrente enregistrée comme date absolue se décale au changement de fuseau. Le 1er du Ramadan, tout votre planning glisse.

Notre choix

Minutes depuis minuit + jour de semaine

Les horaires d’ouverture sont stockés en heure locale relative ; le fuseau est résolu à chaque instant, pas une fois pour toutes. Les rendez-vous, eux, sont des timestamptz.

La preuve

Testé contre la vraie base tzdata

La suite vérifie qu’un jour de transition fait bien 23 ou 25 heures, et qu’un créneau du Ramadan tombe à la bonne minute. 68 tests, sans base de données.

12:30 → 14:30

Pause prière, chaque vendredi, en un clic

+2 h

Décalage Ramadan appliqué à la journée entière

Jours fériés

Calendrier marocain fourni, fermetures ponctuelles incluses

Deux clients, un créneau

Le double-booking est refusé par la base, pas par le code.

Deux personnes confirment le créneau de 10 h dans la même seconde. Les deux passent la vérification, parce qu’aucune des deux transactions ne voit encore la ligne de l’autre. Une vérification applicative perd toujours cette course — alors on ne la lui confie pas.

packages/db/prisma/constraints.sql

ALTER TABLE "Appointment" ADD CONSTRAINT no_staff_overlap
  EXCLUDE USING gist (
    "tenantId" WITH =,
    "staffId"  WITH =,
    tstzrange("blockStartAt", "blockEndAt", '[)') WITH &&
  );

Le second COMMIT échoue en 23P01 et l’API répond 409. Le client voit « ce créneau vient d’être pris », pas une confirmation qui n’existe pas.

Bornes ouvertes à droite

Le rendez-vous de 10:30 suit celui de 10:00

L’intervalle est fermé à gauche, ouvert à droite : deux rendez-vous qui se touchent ne se chevauchent pas. C’est comme ça qu’un salon chargé tourne réellement.

Cloisonnement

Une requête qui oublie son WHERE ne renvoie rien

Chaque table porte son tenantId et une politique RLS Postgres. L’API se connecte avec un rôle non-superutilisateur — sinon RLS serait contourné — et /api/ready le vérifie en continu.

Vérifié au déploiement

La preuve tourne avant la mise en production

Isolation des tenants et refus du double-booking sont testés contre une vraie base ; si l’un des deux tombe, le déploiement s’arrête.

Là où sont vos clients

WhatsApp, l’arabe, et le dirham.

Vos clients ne téléchargeront pas une application. Ils ouvrent un lien, choisissent en arabe ou en français, et reçoivent leur rappel là où ils lisent déjà leurs messages.

Rappels

WhatsApp d’abord, SMS et e-mail en repli

Confirmation, rappel la veille, annulation, demande d’avis. Si le message WhatsApp ne part pas, le canal suivant prend le relais.

Bilingue

Arabe RTL et français, pas une traduction plaquée

La page de réservation se retourne entièrement en arabe, avec une taille et une interlignes ajustées pour les diacritiques.

Acomptes

30 % à la réservation, le reste sur place

Le pourcentage se règle par prestation : rien pour une coupe, la moitié pour un hammam, la totalité pour une téléconsultation. Carte ou espèces.

Un numéro, un client

06 12 34 56 78 = +212612345678

Le numéro de téléphone est l’identité du client. Les cinq façons de l’écrire au Maroc convergent vers une seule fiche.

Tarifs

En dirhams, hors TVA, sans engagement.

30 jours d’essai gratuit : 3 membres d’équipe, 100 réservations et 100 conversations WhatsApp. Aucune carte demandée.

Soloفردي

149 DH/ mois

  • 2 membres d’équipe
  • 1 établissement
  • 300 réservations / mois
  • 500 conversations WhatsApp / mois
  • Paiement en ligne et acomptes
Commencer

Salonصالون

Le plus choisi

349 DH/ mois

  • 8 membres d’équipe
  • 2 établissements
  • Réservations illimitées
  • 2.000 conversations WhatsApp / mois
  • Paiement en ligne et acomptes
  • Page de réservation à vos couleurs
  • Statistiques et export
Commencer

Chaîneسلسلة

899 DH/ mois

  • 40 membres d’équipe
  • 20 établissements
  • Réservations illimitées
  • 10.000 conversations WhatsApp / mois
  • Paiement en ligne et acomptes
  • Page de réservation à vos couleurs
  • Statistiques et export
Commencer

Le chiffrement des données de santé et la piste d’audit sont inclus dans toutes les offres, y compris l’essai — un cabinet ne devrait pas avoir à payer un supplément pour protéger ses patients.

وقتي

Votre temps, rendu à votre métier.

Trente jours pour voir si l’agenda tient debout un vendredi chargé. Ensuite seulement, on parle d’abonnement.