Le problème
Un cabinet dentaire commande ses fournitures chez plusieurs distributeurs, et une même référence peut varier de plusieurs dizaines d'euros d'une enseigne à l'autre. Pour trouver le bon prix, il faut ouvrir six sites, chercher la même fraise ou le même composite partout et tenir un tableur à jour.
La solution
DentalCheck relève chaque jour les catalogues publics de six fournisseurs (Mega Dental, GACD, Dental Click, Dental Privé, Discount Dentaire, Dental Good Deal) et les réunit par référence fabricant : une ligne par produit, tous les prix en face.
Le praticien cherche une fois, par nom, référence ou code EAN, et voit immédiatement l'écart entre le plus cher et le moins cher. Chaque prix est daté et conservé sur 90 relevés pour suivre son évolution. Le panier répartit ensuite chaque ligne vers le fournisseur le moins cher et affiche l'économie réalisée.
Le pipeline de données
La collecte est assurée par des scrapers Python qui interrogent directement les catalogues en HTTP et extraient les fiches avec des expressions régulières compilées, sans charger de navigateur : c'est rapide et peu coûteux. Playwright n'est sollicité qu'en dernier recours, pour passer un challenge Cloudflare.
Un moteur de rapprochement fusionne les doublons par référence fabricant (MPN), puis les visuels sont synchronisés vers Cloudinary en parallèle. Depuis le panneau d'administration, je pilote les scrapers et suis leurs logs en direct grâce aux Server-Sent Events.
Un vrai produit SaaS
L'inscription se fait par email ou avec Google, avec un essai de 14 jours sans carte bancaire. L'offre Pro à 20 € HT par mois est gérée par Stripe et débloque les listes de favoris, les notes par produit, le panier réparti et le signalement d'anomalie. Un espace d'administration permet de gérer les comptes et de corriger le catalogue en masse.
Stack technique
- Next.js 16 & React 19Interface, routes API et pages pré-rendues (App Router)
- MongoDB AtlasCatalogue, historique des prix, comptes et favoris
- PythonScrapers des catalogues (Requests, lxml, regex compilées), rapprochement par référence fabricant
- StripeAbonnements, essai gratuit et portail client
- Better AuthConnexion email ou Google, rôles essai / pro / admin
- CloudinaryImages produits servies par CDN, synchronisées en multi-thread
- NodemailerEmails transactionnels
- VercelHébergement et cache des pages statiques
SEO, performance & accessibilité
- Pages publiques pré-rendues par Next.js et servies depuis le cache de Vercel : affichage quasi instantané
- Title, meta description et balises Open Graph soignées pour Google et le partage sur les réseaux
- Langue déclarée, structure de titres claire et URLs lisibles
- Aucun traceur publicitaire ni outil d'audience tiers : des pages plus légères et un site conforme au RGPD
- Panneau « confort de lecture » : thème clair, sombre ou contrasté, taille du texte jusqu'à 150 %, espacement, police adaptée à la dyslexie, liens soulignés, animations réduites et focus renforcé
- Navigation mobile en barre basse, pensée pour une utilisation au cabinet



