- README.md complet avec stack, routes, architecture DB - MANUS_HANDOFF.md avec état du projet et roadmap - todo.md avec toutes les fonctionnalités - Schema Drizzle de référence dans docs/ Fonctionnalités v1.0.0 : - File d'attente virtuelle temps réel (WebSocket/Socket.io) - QR code anti-triche rotatif par cabinet - Interface patient mobile (position live, alertes) - Écran d'affichage tablette/moniteur - Tableau de bord médecin complet - Analytics + export CSV - Tickets imprimables - Système d'abonnement (essai 30j, blocage) - Multi-cabinets Auteur: William MERI
4.5 KiB
4.5 KiB
MANUS_HANDOFF — QueueMed v1.0.0
Fichier de passation pour la continuité du développement.
Dernière mise à jour : 2026-02-27 — William MERI
État actuel du projet
Version : 1.0.0
Statut : Production-ready (fonctionnalités core complètes, Stripe à activer)
Tests : 8/8 passent, 0 erreurs TypeScript
Checkpoint Manus : a63c623c
Ce qui est implémenté
Backend (server/)
routers.ts— 20+ procédures tRPC : auth, clinics, queue, analyticsdb.ts— Helpers Drizzle pour toutes les tables_core/index.ts— Serveur Express + Socket.io intégré- Middleware
subscriptionProcedure— Bloque les procédures si abonnement expiré - Rotation automatique du QR code (configurable par cabinet)
- Procédure
analytics.exportCsv— Export CSV des événements
Frontend (client/src/)
pages/Home.tsx— Landing page cinématique (hero, features, how-it-works, témoignages, pricing, CTA)pages/Dashboard.tsx— Tableau de bord médecin (KPIs, liste cabinets, actions rapides)pages/DoctorClinics.tsx— Gestion des cabinets (CRUD, QR code, paramètres)pages/QueueManagement.tsx— Gestion file temps réel (appel suivant, absent, retirer, imprimer ticket)pages/Analytics.tsx— Graphiques affluence, export CSV, recommandations IApages/PatientQueue.tsx— Interface patient (position live, temps estimé, alertes)pages/DisplayScreen.tsx— Écran d'affichage tablette (numéro animé, ticker, connexion status)pages/SubscriptionPage.tsx— Page abonnement (plans, essai gratuit, blocage)pages/SubscriptionBlocked.tsx— Page de blocage après expirationpages/PrintTicket.tsx— Ticket imprimable pour patients sans smartphone
Base de données (drizzle/schema.ts)
users, subscriptions, clinics, queueEntries, analyticsEvents
Ce qui reste à faire
Priorité haute
- Intégration Stripe — L'utilisateur doit fournir ses clés Stripe (STRIPE_SECRET_KEY, VITE_STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET). Utiliser
webdev_add_feature stripeune fois les clés configurées dans Settings → Payment. - Notifications SMS — Intégrer Twilio pour alerter les patients par SMS quand leur tour approche (alternative aux notifications push navigateur).
Priorité moyenne
- Page
/subscription/plans— Checkout Stripe réel avec redirection vers portail client. - Webhook Stripe — Route
/api/stripe/webhookpour gérercheckout.session.completed,invoice.paid,customer.subscription.deleted. - Tests supplémentaires — Couvrir les procédures queue.callNext, queue.markAbsent, analytics.get.
Priorité basse
- Mode multi-praticiens — Plusieurs médecins par cabinet (table
clinicMembers). - Rapports PDF — Export PDF hebdomadaire automatique.
- Application mobile — React Native avec les mêmes APIs tRPC.
Informations techniques importantes
Socket.io
Le serveur Socket.io est initialisé dans server/_core/index.ts et exposé globalement via (global as any).__socketIo. Les procédures tRPC l'utilisent via getIo() dans routers.ts.
Rooms Socket.io :
clinic:{clinicId}— Médecin + écran d'affichagepatient:{patientToken}— Patient individueldisplay:{clinicId}— Écran d'affichage uniquement
QR Code anti-triche
Le token QR est stocké dans clinics.qrToken. La rotation est déclenchée par rotateQrToken() dans db.ts. La fréquence est configurable via clinics.qrRotationMinutes (0 = pas de rotation).
Abonnement
- Essai gratuit : 30 jours à partir de la première connexion
- Statuts :
trial→active→expired/canceled - Le middleware
subscriptionProcedurevérifieisSubscriptionActive()avant chaque opération sensible
Design system
- Thème : dark, palette teal (#0d9488) + orange (#f97316)
- Classes utilitaires custom :
.gradient-text,.glass-card,.glow-teal,.text-glow-teal,.queue-number,.animate-ticker - Police display : Inter (Google Fonts)
Commandes utiles
pnpm dev # Démarrer le serveur de développement
pnpm test # Exécuter les tests Vitest
pnpm db:push # Pousser les migrations Drizzle
pnpm build # Build de production
npx tsc --noEmit # Vérifier les types TypeScript
Contacts et ressources
- Auteur : William MERI
- Dépôt GitHub : https://github.com/Tarzzan/queue-med
- Documentation Stripe : https://stripe.com/docs/billing/subscriptions
- Documentation Socket.io : https://socket.io/docs/v4/