User
- email · phone · locale
- colonnes Stripe (Cashier)
- onboarding_completed_at
- 1—n Pet
- 1—n Appointment
- 1—1 Veterinary
Plateforme SaaS vétérinaire de prise de rendez-vous pour cliniques et propriétaires d’animaux.
Prendre rendez-vous chez un vétérinaire se fait encore souvent par téléphone, aux heures d’ouverture, sans rappel ni historique. Les cliniques gèrent leurs agendas, leurs absences et leurs dossiers dans des outils séparés, et trouver un vétérinaire de garde la nuit ou le week-end relève de la chance.
Digitaliser la prise de rendez-vous vétérinaire tout en gardant une expérience simple pour les propriétaires d'animaux.
Vetzy est un monorepo de sept applications Laravel, chacune dans son sous-module Git avec sa base MySQL : l’application de rendez-vous pour les propriétaires et les cliniques, l’administration commune, une API REST centrale, le blog, un site d’emploi vétérinaire, la carte des gardes et l’espace des assistants vétérinaires. Le code commun vit dans 17 packages internes ; aucune transaction ne traverse deux bases, les écritures entre applications passent par HTTP ou par une table d’attente.
En ligne sur vetzy.eu, en français, anglais et néerlandais. La carte des gardes couvre la Belgique, la France, la Suisse et le Luxembourg. Un déploiement n’a lieu que si quatre workflows ont réussi sur le même commit, puis chaque application est vérifiée en production.
Fondateur et développeur lead
Utilisateurs
Application
Services externes
Le propriétaire cherche un vétérinaire ou une clinique par spécialité, lieu, urgence ou langue ; Scout interroge Meilisearch, avec une requête SQL en repli.
Dans la fenêtre de réservation Livewire, il choisit l’animal, le motif et le créneau ; les conflits et les absences du vétérinaire sont vérifiés.
Le rendez-vous est enregistré et apparaît dans l’espace du propriétaire comme dans l’agenda de la clinique.
Des jobs Redis envoient les rappels par e-mail ou SMS selon les préférences ; chaque envoi est journalisé.
L’assistant vétérinaire se connecte par SSO à son espace et enregistre l’arrivée du patient et les notes d’accueil.
Une annulation hors délai peut déclencher un paiement Stripe Checkout, suivi jusqu’à son expiration.
Les entités principales, leurs champs clés et leurs relations.
Par spécialité, urgence, langue et services, avec élargissement aux alentours.
Pour les vétérinaires et les cliniques, avec absences, remplaçants et taux d’occupation.
Consultations, vaccins, traitements et documents.
Vaccins, médicaments, anniversaires et enquêtes de satisfaction.
Quatre pays, URL par pays et par langue.
Offres, alertes, abonnements Stripe et rapprochement par IA.
ProblèmeApache tombait cinq minutes à chaque fois : des processus restaient bloqués sur des connexions TLS laissées ouvertes après un bannissement fail2ban.
SolutionScript de durcissement Apache et PHP-FPM, et un runbook d’incident.
ProblèmeDes rappels partaient avec la clé brute en objet au lieu du texte traduit.
SolutionUn quatrième audit i18n vérifie en CI que chaque clé appelée existe.
ProblèmeLes workflows ne démarraient plus.
SolutionBascule sur des runners auto-hébergés, choisis par une variable.
ProblèmeEn production, la politique de sécurité bloquait la bibliothèque de carte.
SolutionBibliothèque servie depuis un CDN autorisé, et la CSP testée.
ProblèmeLa suite s’exécutait sur la base de développement.
SolutionBase de test imposée dans la configuration PHPUnit.
Relevé dans le code source et l’historique Git du projet le 8 octobre 2026. Aucun chiffre d’usage ou de revenu n’est publié.
Disponible pour missions PHP / Laravel / WordPress / Silverstripe en Belgique et remote EU.