Réservation, fidélité et gestion pour instituts et salons
  • TypeScript 98.9%
  • CSS 0.8%
  • JavaScript 0.3%
Find a file
Claude 54654bfb39 fix: corriger parsing réponse API tickets manager
- POST: le manager retourne { ticket: { reference, accessKey } },
  pas { reference, accessKey } directement
- GET detail: les messages sont dans ticket.messages, pas à côté
- Séparer les erreurs réseau vs erreurs locales pour éviter
  les doublons de tickets côté manager

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-23 23:00:30 +02:00
prisma feat: système de tickets support intégré au back-office 2026-07-23 22:53:08 +02:00
scripts Amorçage automatique au démarrage : instance prête sans étape manuelle 2026-07-19 14:01:04 +02:00
src fix: corriger parsing réponse API tickets manager 2026-07-23 23:00:30 +02:00
tests security: isoler les instances beauty 2026-07-19 15:54:39 +02:00
.env.example feat: système de tickets support intégré au back-office 2026-07-23 22:53:08 +02:00
.gitattributes Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
.gitignore Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
DEPLOY.md security: isoler les instances beauty 2026-07-19 15:54:39 +02:00
DEPLOYMENT.md Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
eslint.config.mjs fix: fiabiliser les controles de production 2026-07-19 14:23:54 +02:00
next.config.mjs monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
package-lock.json monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
package.json monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
postcss.config.mjs Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
PRODUCT.md Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
README.md Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00
sentry.client.config.ts monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
sentry.edge.config.ts monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
sentry.server.config.ts monitoring: Sentry SDK + logger structuré JSON 2026-07-22 14:51:49 +02:00
tailwind.config.ts fix: fiabiliser les controles de production 2026-07-19 14:23:54 +02:00
tsconfig.json Application Kivora Beauty : réservation, fidélité, avis, RGPD (3 interfaces) 2026-07-19 13:39:50 +02:00

Kivora Beauty

Solution SaaS de réservation en ligne pour instituts de beauté, salons de coiffure, barbiers, spas, ongleries et professionnels indépendants.

Chaque déploiement héberge un établissement (modèle Kivora : 1 client = 1 base SQLite), provisionné et piloté depuis le manager Kivora.

Stack

  • Next.js 16 (App Router, React 19) et TypeScript
  • Prisma 5 + SQLite (DATABASE_URL = file:/opt/clients/<slug>/dev.db)
  • Tailwind CSS 3
  • Sessions par cookie HttpOnly, révocables, stockées hachées en base
  • Mots de passe hachés avec scrypt (module crypto, sans dépendance)
  • Emails via SMTP / Resend (nodemailer)

Les « enums » du domaine sont des String en base, dont les valeurs autorisées sont garanties par les unions TypeScript de src/lib/types.ts.

Les trois interfaces

Interface Routes Rôle
Publique /, /reserver, /rdv/[token] Présentation, réservation en ligne (mobile-first), gestion sans mot de passe par lien email
Espace client /compte Rendez-vous, fidélité, récompenses, avis, coordonnées, consentements, export/suppression RGPD
Back-office pro /pro, /pro/agenda, /pro/clients, /pro/avis, /pro/statistiques Tableau de bord, agenda, cycle de vie des rendez-vous, modération des avis, statistiques

Rôles

OWNER (accès total) · MANAGER (agenda, équipe, clients, stats, config) · EMPLOYEE (son planning) · client final (ses propres informations). Les clients finaux sont gratuits et illimités.

Cycle de vie d'un rendez-vous

En attente → Confirmé → Arrivé → En cours → Terminé (+ Annulé, Absence). Les transitions autorisées sont définies dans APPOINTMENT_TRANSITIONS.

La clôture en Terminé déclenche, de manière idempotente (completeAppointment) : attribution des points de fidélité, mise à disposition des statistiques, éligibilité à la demande d'avis, et calcul du solde restant. Les points ne sont attribués qu'après une prestation terminée.

Logique métier testée

  • src/lib/slots.ts — moteur de calcul des créneaux (horaires, pauses, buffers, collisions, « sans préférence » multi-prestataires). Pur, sans I/O.
  • src/lib/availability.ts — passe de la base au moteur (fuseau horaire via date-fns-tz).
  • src/lib/booking.ts — création / modification / annulation avec garde anti-double-réservation transactionnelle et respect des règles d'annulation.
  • src/lib/lifecycle.ts — transitions de statut et clôture idempotente.
  • src/lib/loyalty.ts, src/lib/analytics.ts — fidélité et statistiques.
npm test   # 17 tests (moteur de créneaux, fidélité, transitions, clôture idempotente)

Démarrage local

cp .env.example .env
npm install
npm run prisma:migrate       # crée la base et applique les migrations
npm run db:seed              # données de démonstration (Institut Lumière)
npm run dev

Comptes de démonstration :

  • Pro : proprietaire@institut-demo.fr / Demo1234! (le seed lit BOOTSTRAP_*)
  • Client : sophie@example.fr / Client1234!

Intégration au manager Kivora

Le manager provisionne chaque instance en écrivant /opt/clients/<slug>/.env (voir manager/lib/deploy.ts). Beauty consomme ces variables via src/lib/env.ts et amorce l'établissement + le compte propriétaire de façon idempotente au déploiement :

npm run prisma:deploy && npm run bootstrap

bootstrap (script scripts/bootstrap.ts) ne crée jamais de doublon et n'écrase aucune donnée existante.

Variables clés injectées : DATABASE_URL, SESSION_SECRET, BOOTSTRAP_ADMIN_EMAIL, BOOTSTRAP_ADMIN_NAME, BOOTSTRAP_PASSWORD, BUSINESS_*, NEXT_PUBLIC_KIVORA_CATEGORY=beauty, KIVORA_DEPLOYMENT_MODE (DEMO pendant l'essai), KIVORA_MANAGER_TOKEN (API interne signée), PORT.

Voir DEPLOYMENT.md pour les détails et l'ajout de la catégorie beauty côté manager.

Sécurité & RGPD

  • Validation systématique côté serveur, limitation de débit sur les routes sensibles.
  • Sessions révocables (déconnexion, changement d'identifiants, propagation manager).
  • Journal d'audit des actions sensibles (src/lib/audit.ts).
  • Export et suppression (anonymisation) des données client, historique des consentements.
  • Aucun mot de passe n'est jamais renvoyé par email après sa création initiale.