Dossier
SMF·ZENCAL
Reçu le
31.07.2026
Instruit le
28.09.2026
Pièces annexées
3
Questions
4

SMF·ZENCAL

Un prompt peut-il remplacer Zencal ?

Planification — booking links and calendar automation

Presque Verdict enregistré le 28.09.2026 · Vérifié le 31.07.2026
Prix
9,50 $US/moisSource: zencal.io · Vérifié le 31 juillet 2026
Par an
114 $US
Temps de fabrication
Une semaine
Catégorie
Planification
Votes
0 vote
OuiPresque (coché)Pas encore

Bordereau de suivi des pièces

Pièce A Le prompt
Pièce B Ce que tu perds
Pièce C Pourquoi certains continuent de payer : calendar integrations and reliability
Pièce Q Questions

Verdict

Les pages de réservation sont bien couvertes dans ce catalogue. La fonctionnalité distinctive de Zencal, ce sont les réservations payantes, et combiner une réservation avec un paiement est vraiment délicat : le créneau doit être bloqué pendant que le visiteur est en checkout, libéré proprement s’il abandonne, et confirmé seulement quand le webhook arrive — avec les trois chemins corrects même quand deux personnes réservent le même créneau en même temps. Cette course est là où une implémentation naïve soit double-réserve soit perd des créneaux payés, et bien le faire prend des jours.

Pièce B — Ce que tu perds

Pièce A — Le prompt

Reçu le31.07.2026
Construis un système de réservation où un type de rendez-vous peut exiger un paiement avant d’être confirmé.

Calendrier : connecte un Google Calendar via OAuth avec des tokens de rafraîchissement chiffrés. Disponibilité à partir des heures de travail moins les événements occupés, avec des marges, un préavis minimum et un horizon de réservation. Toute l’arithmétique en UTC, rendue dans le fuseau horaire du visiteur avec le fuseau nommé à l’écran.

Types de rendez-vous : nom, durée, lieu, marges, questions posées à la réservation, et un prix optionnel avec une devise.

Le flux de réservation payante, qui est l’intérêt de ce projet. Une réservation passe par des états explicites et chaque transition doit être gérée :

1. **Bloqué** — créé quand le visiteur choisit un créneau et procède au checkout, avec une expiration à quelques minutes. Un créneau bloqué est indisponible pour tous les autres. Crée-le dans une transaction avec une contrainte d’unicité sur le type de rendez-vous et l’heure de début, pour que deux visiteurs simultanés ne puissent pas tous les deux le bloquer ; le perdant apprend que le créneau vient de partir et se voit proposer le suivant.
2. **En attente de paiement** — une session Stripe Checkout créée côté serveur contre la réservation bloquée, avec l’identifiant de réservation dans les métadonnées et une clé d’idempotence.
3. **Confirmé** — sur `checkout.session.completed`, vérifié par signature et contrôlé pour un traitement préalable, la réservation est confirmée, l’événement calendrier créé, et les emails de confirmation envoyés. Ne confirme jamais sur la redirection de succès ; le visiteur peut fermer l’onglet et la redirection peut ne jamais se déclencher.
4. **Expiré** — une tâche planifiée libère les blocages passé leur expiration. Avant de libérer, revérifie Stripe pour une session complétée contre cette réservation, parce qu’un webhook peut arriver en retard et libérer un créneau payé est le pire résultat du système.

Gère aussi : un paiement complété pour une réservation déjà expirée et libérée — rembourse automatiquement et envoie au visiteur un email d’explication plutôt que de garder l’argent silencieusement ; et `checkout.session.expired`, qui libère le blocage immédiatement plutôt que d’attendre le minuteur.

Écris un test pour chacun de ces six chemins. C’est toute la raison d’être de cette fiche et c’est là qu’un système maison de réservation-avec-paiement tourne mal.

Remboursements et annulation : une politique d’annulation par type de rendez-vous (une fenêtre dans laquelle un remboursement est automatique), un lien d’annulation signé dans l’email de confirmation ne nécessitant aucun compte, et des remboursements émis via Stripe avec l’événement calendrier supprimé et le créneau rendu à la disponibilité.

Les types de rendez-vous non payants utilisent le même flux de réservation sans les états de paiement, pour qu’il n’y ait qu’un seul chemin de code plutôt que deux.

Construis aussi : des emails de rappel à un intervalle configurable avec l’envoi enregistré pour qu’un redémarrage ne puisse pas envoyer en double, une liste de réservations admin montrant l’état et le statut de paiement, et un journal d’audit de chaque transition d’état.

Hors périmètre : les calendriers Microsoft et Apple, le round-robin d’équipe, les formulaires de routage, l’intégration CRM, et tout déploiement hébergé multi-tenant.

L’ouverture pré-remplit le prompt — il ne reste qu’à appuyer sur entrée.

Pièce B — Ce que tu perds

  • B.1 les comptes calendrier Outlook et Apple
  • B.2 la planification d’équipe avec round-robin et disponibilité partagée
  • B.3 la disponibilité hébergée pour une page qui prend de l’argent
  • B.4 la maturité autour des cas limites de fuseau horaire

Alternatives existantes

Pièce C — Pourquoi certains continuent de payer : calendar integrations and reliability

Parce qu’une page de réservation qui prend un paiement est une boutique, et une boutique qui double-réserve ou facture sans confirmer coûte plus cher en une mauvaise semaine que des années d’abonnement.

Questions

Est-ce que je peux importer ma configuration Zencal ?

Les pages de réservation et types d’événements n’ont pas d’export structuré, donc ils sont recréés — une demi-heure pour une poignée. Les réservations passées s’exportent en CSV pour les archives. Tout ce qui est déjà réservé et payé devrait pouvoir se terminer sur l’ancien système plutôt qu’être migré.

Pourquoi tant d’attention aux états de réservation ?

Parce que chaque échec dans un système de réservation-avec-paiement vit dans les écarts entre eux. Confirmer sur la redirection perd des réservations quand un onglet se ferme ; libérer un blocage sans revérifier Stripe annule des créneaux que des gens ont payés ; ne pas gérer l’événement session-expirée laisse des créneaux bloqués. Chacun est invisible jusqu’à ce que ça arrive à un client.

Combien ça coûte à faire tourner ?

Les frais de transaction de Stripe, un petit VPS avec PostgreSQL à cinq à dix dollars par mois, et un fournisseur d’email transactionnel gratuit à ce volume. En dessous de quelques réservations par mois, l’abonnement est plus simple ; au-dessus, l’arithmétique favorise la construction.

Quelle est la seule chose qui ne survit pas à la reconstruction ?

Ne pas être celui d’astreinte. Une page de réservation qui prend un paiement doit fonctionner à toute heure, et quand ce n’est pas le cas, l’échec, c’est un client qui a payé et n’a pas de rendez-vous. C’est un poids de responsabilité différent d’un lien de planification gratuit.

Récépissé

Tu l’as déjà reconstruit toi-même ?