Bizleen
En ligne · bizleen.comLe site public d'un établissement : une carte de visite numérique qui devient un mini-site en neuf langues, avec neuf gabarits métier, un catalogue, des horaires et une prise de réservation, sans rien installer. Bizleen est relié à Bizleen Orbit (app.bizleen.com), l'espace de travail connecté de l'équipe : un seul produit, deux dépôts. Le site public vend, l'espace connecté exécute.
Pourquoi j'ai construit ça
Bizleen est né le 23 mai 2026 comme une carte de visite en PWA : une page publique, un identifiant, un QR, une vCard. Je voulais une carte qui se partage d'un scan, sans application à installer. Une fois la carte en main, je l'ai ouverte aux métiers : neuf gabarits, un catalogue, des horaires, une réservation, neuf langues, et le mini-site est devenu le site public de l'établissement. À partir du 18 août 2026, je l'ai raccordé à Bizleen Orbit, l'espace de travail connecté de l'équipe. La raison était commerciale avant d'être technique : le site savait afficher une grille de prestations tarifées, mais il ne savait pas dire si le créneau de mardi 15 heures était libre, et cette information vit dans l'outil qui tient déjà le planning. Un seul produit, deux dépôts : le site public vend, l'espace connecté exécute.
Décisions techniques structurantes
Neuf gabarits métier et 17 sous-secteurs décrivent ce qu'un restaurant, une boutique ou un cabinet peut afficher : catalogue, horaires, galerie, boutons d'action. La table d'offre dit ce que le compte a payé. La page publique ne lit que le croisement des deux, donc un métier de plus se déclare dans le registre au lieu de s'écrire dans une page. Ce registre lève au chargement si un gabarit est déclaré sans ses libellés et sa miniature.
Neuf langues réellement servies sur chaque carte (français, anglais, espagnol, allemand, italien, portugais, néerlandais, chinois, thaï), avec redirection vers la canonique. Le groupe hreflang et le plan de site sortent du même constructeur : ils ne peuvent pas diverger. Les données structurées sont spécialisées par métier et refusent de déclarer une note agrégée non vérifiable. Les vignettes de partage sont composées à la volée dans le Worker. Chaque décision est documentée avec sa mesure et protégée par un test de non-régression.
Un Worker a un budget de taille, et le SDK Stripe seul en aurait consommé environ 600 Ko. L'encodeur et le client REST sont écrits dans le dépôt : Checkout, portail client, contrôle du tarif avant la vente, webhook vérifié sans dépendance, avec comparaison à temps constant et déduplication persistante. Le même webhook appelle le provisionnement de l'espace connecté, une chaîne en cours de mise en service.
Le challenge non-trivial
Bizleen et Bizleen Orbit gardent chacun leur base. Le pont tient en quatre pièces. Un appairage par établissement : Orbit émet un secret et n'en garde que l'empreinte, Bizleen le conserve chiffré, un seul appairage vivant à la fois, une révocation est datée et jamais supprimée. Un contrat de service à onze méthodes, interne au compte Cloudflare et sans surface HTTP publique : instantané de catalogue, disponibilité, pose et libération de retenue, confirmation, déplacement, annulation. Un pont de catalogue : Bizleen publie ce qu'il vend, Orbit n'en garde qu'une projection en lecture seule, et une prestation retirée reste lisible dans les rendez-vous déjà pris. Un provisionnement appelé depuis le webhook Stripe. Côté Bizleen, cela représente 8 modules de liaison, 4 750 lignes et 24 fichiers de test dédiés, avec 23 documents d'échange versionnés entre les deux dépôts. Le pont est construit et testé des deux côtés ; sa mise en service commerciale est en cours.
Leçon retenue
Deux produits ne fusionnent pas en partageant une base : ils se relient par un contrat écrit, versionné et testé des deux côtés, avec un sens clair pour chaque flux. Et un site ne dit « en ligne » que ce qui a été exercé en production ; le reste s'écrit « en cours de mise en service ».
Fonctionnalités
Restaurant, boutique, artisan, praticien, libéral, créatif, beauté, hôtellerie, générique, avec 17 sous-secteurs. Le gabarit dit ce que le métier possède, l'offre dit ce qui a été payé, et la page publique ne lit que le croisement des deux.
14 allergènes canoniques traduits dans les neuf langues, paliers de prix, variantes photographiées, accords mets et vins.
Brouillon, publication, restauration et contrôle avant bascule, sur quatre tables : une carte se retravaille sans toucher à celle qui est en ligne.
Canonique et robots explicites, hreflang et plan de site issus du même constructeur (la divergence est impossible par construction), données structurées schema.org spécialisées par métier : horaires, géolocalisation, catalogue, FAQ, événements.
Plusieurs cartes par compte, jusqu'à 20 collaborateurs, éditeurs invités par jeton expirant.
QR en SVG rendu côté serveur, vCard 4.0 et 2.1, PWA installable par carte, trois modèles de signature de courriel.
Six routes, anti-abus à quatre compteurs, refus traduits dans les neuf langues.
Checkout, portail client, webhook signé et idempotent, contrôle du tarif avant la vente. L'encodeur et le client REST sont écrits dans le dépôt : environ 600 Ko évités dans le Worker.