Programme partenaire (agences et freelances seniors)
Surface publique : /network/partners. Decision fondatrice : ADR 0014. Ce programme ne verse aucune commission. Il n'a donc ni ledger, ni table, ni cron, ni ligne de payout. C'est le fait le plus important de cette page…
Surface publique :
/network/partners. Decision fondatrice : ADR 0014.Ce programme ne verse aucune commission. Il n'a donc ni ledger, ni table, ni cron, ni ligne de payout. C'est le fait le plus important de cette page, et c'est aussi pourquoi elle est courte.
Les chiffres du parrainage ne sont PAS repris ici. Ils vivent dans
affiliate.md, sous la gardepnpm docs:claims, et une page qui les recopierait creerait une seconde source de verite.
Ce que le programme echange
| Ce que le partenaire recoit | Ce qui le porte dans le code |
|---|---|
Une fiche publique dans l'annuaire agencies ou freelancers | agency / freelancer dans listing-types.ts : services, location, hourlyRateCents, avis, offre speciale |
| Les demandes entrantes des marchands sur cette fiche | POST /api/marketplace/leads, intent: hire | contact, Reply-To = le marchand, trace ListingEvent.CONTACT_CLICK |
| Un acces delegue dans l'organisation du client | OrganizationMember (owner / admin / member / viewer) + le namespace studio.*, distinct de agency.* (ADR 0013) |
| L'intelligence pour auditer un prospect avant de pitcher | Store Graph + /intelligence/inspect |
| Ce que le partenaire NE recoit pas | Pourquoi c'est ecrit ici |
|---|---|
| Une part du revenu | Aucun ledger ne la porte, et en creer un rouvre un calcul de liability. Cf. ADR 0014, alternatives ecartees |
| Un palier d'acces anticipe | Aucun feature-flag par partenaire n'existe |
| Un Slack prive | Il n'y a pas de Slack. La communaute est Discord |
| Une certification, un test technique | La revue est humaine : un admin lit les etudes de cas |
| Un creneau co-marketing reservable | Rien ne le planifie. Ca part d'une demande |
Ces cinq lignes sont publiees sur /network/partners, dans une section
« Ce que ce programme n'est pas ». Elles y sont parce qu'elles y ont ete
vendues pendant des mois : une absence ecrite ne se remet pas
silencieusement dans une roadmap.
Le parcours reel, de bout en bout
/network/partners → NetworkApplyForm (program: "agency")
3 champs + brief (min. 20 caracteres)
│
▼
POST /api/network/applications
1. ligne NetworkApplication ← la lead est sauve ICI, d'abord
2. e-mail best-effort vers MARKETPLACE_ADMIN_EMAIL
3. 502 seulement si AUCUN des deux n'a marche
│
▼
/admin/revenue/network-applications
statut : pending → contacted → accepted | declined
│
▼
fiche publiee dans /marketplace/agencies ou /freelancers
Deux choses a savoir sur ce parcours, parce qu'elles ont deja coute :
- L'ordre d'ecriture est deliberé (
growth-web/0211). La ligne part avant l'e-mail. Avant ca, une panne Resend ou unMARKETPLACE_ADMIN_EMAILnon pose (les deux valent""par defaut) laissait tomber une lead commerciale en affichant un ecran de succes. - Rien n'est automatique apres le formulaire. Il n'y a pas de relance, pas de SLA tenu par du code, pas de notification au candidat. La promesse publique est donc « revue manuelle, reponse par e-mail », et pas un delai. La page annoncait « deux semaines » quand la FAQ de la home annoncait « 2-3 jours ouvres » pour le meme formulaire.
La faiblesse assumee : l'annuaire demarre a une fiche
content/marketplace/agencies/ contient un fichier :
boostecom-agency.json, ownedByBoostecom: true. Un candidat qui clique
« Parcourir les agences » nous voit nous.
La FAQ publique le dit, sans chiffre (un compte se perimerait au premier
partenaire accepte). C'est la limite reelle de l'offre : la valeur d'un
annuaire croit avec son remplissage. Les quatre filtres que la page
annoncait autrefois (region, verticale, langue, expertise technique)
n'existent pas non plus, et AGENCY_FIELDS n'en porte aucun.
Suivi : backlog/growth-web/0631.
Ce qui empeche cette page de re-deriver
src/test/affiliate-terms-match-the-ledger.test.ts lit les six catalogues
et refuse tout pourcentage ou toute duree absente de
src/config/affiliate.ts. Le sous-arbre
marketingPages.network.partners n'est pas exempte : il ne peut contenir
aucun pourcentage. Les deux chiffres visibles sur la page sont
interpoles depuis le code, parce qu'ils decrivent le parrainage, pas ce
programme.
Reecrire « 20 % a vie » sur /network/partners fait donc echouer la suite
dans les six langues, ce qui est exactement le garde-fou qui manquait
quand la phrase y est arrivee.