ADR-0039 — Chaque palier payant inclut un nombre de boutiques, sans add-on
L'ADR 0037 a rendu boutiques et membres illimites sur les plans payants, sur la premisse qu'« une boutique connectee qui ne fait rien ne coute presque rien ». Le code dit le contraire. Chaque boutique connectee…
Statut
Accepté · 2026-09-25
Remplace : ADR-0037 (partiellement : la moitie « boutiques illimitees »)
Piliers : billing, growth-web
Contexte
L'ADR 0037 a rendu boutiques et membres illimites sur les plans payants, sur
la premisse qu'« une boutique connectee qui ne fait rien ne coute presque
rien ». Le code dit le contraire. Chaque boutique connectee declenche du
travail de fond qui ne debite aucun credit, donc qui est paye par la
plateforme et invisible pour platform-costs :
- audits hebdomadaires (
weekly-audits) ; - audit et mesure de citations AEO (
aeo-audit,aeo-citation), qui interrogent un modele payant par boutique ; - vitals (
vitals-*), agregats commerce (commerce-*), alertes et rapport hebdomadaire.
Avec des boutiques illimitees, un seul abonnement Pro pouvait porter un nombre arbitraire de boutiques et donc un cout de plateforme sans plafond.
L'add-on « +$9 par boutique » a ete evalue a nouveau (deux passes d'analyse, comportement Stripe verifie dans la documentation officielle). Le construire correctement demande un abonnement Stripe separe, un consentement lie a un devis, une facturation immediate, un reconcile, et une vingtaine de decisions de gouvernance, pour aucun client payant aujourd'hui.
Décision
Tranche le 2026-09-25 :
| Plan | Boutiques incluses | Membres |
|---|---|---|
| Free | 1 | 1 |
| Pro | 3 | illimites |
| Max 5x | 10 | illimites |
| Max 20x | 25 | illimites |
| Custom | negocie (non plafonne dans le code) | illimites |
Au-dela des boutiques incluses : passer au palier superieur, ou Custom. Aucun add-on par boutique n'est vendu. Le reste de l'ADR 0037 tient : les paliers different aussi par les credits, le bonus, la concurrence, les appels MCP, les minutes de scan et les capacites.
Source unique : PLAN_LIMITS dans src/types/billing-plans.ts. La porte
est resolveOrgQuota(orgId, "stores"), appelee par les quatre chemins de
creation (API stores, wizard connect, outil @Atlas, Studio). Un
depassement repond 402 avec le palier qui leve la limite
(planUnlocking).
Conséquences
- Retrogradation au-dessus du quota : non destructive. Aucune boutique n'est supprimee ni desactivee ; seules les nouvelles creations sont refusees, avec le palier qui les rouvre.
- Copie publique : la reference
/docsn'ecrit pas les chiffres, elle renvoie a/pricing, dont les cartes et la matrice les lisent dansPLAN_LIMITS. La doc interne (docs/business-model/plans.md) les ecrit. - Noms : « Max 5x » et « Max 20x » restent des noms, pas des nombres de boutiques.
- Garde :
plans-are-usage-tiers.test.tsetquota.test.tstiennent les chiffres et l'echelle croissante ;billing-every-door.test.tstient la porte sur chaque chemin de creation.
Alternatives écartées
| Option | Pourquoi non, maintenant |
|---|---|
| Garder l'illimite (0037) | Cout de fond par boutique sans plafond ni credit. |
| Restaurer l'add-on $9 d'avant 503fb83e | Sept defauts : facturation annuelle repoussee au renouvellement, portail Stripe incapable de changer un plan multi-produits, synchronisations sans consentement, prix affiche en constante, etc. |
| Add-on $9 sur un abonnement separe | Architecture retenue si l'add-on revient (plan detaille dans l'analyse du 2026-09-25) ; a construire quand un client le demande. |
Signal pour revisiter
Le premier client qui veut plus de boutiques sans changer de palier, ou une
mesure dans platform-costs du cout reel par boutique.