Que fait directory-launch-kit ?
Objectif : l'utilisateur reçoit une liste courte et honnête d'annuaires adaptés à son produit, des copies prêtes à coller pour chaque formulaire, des images aux bonnes dimensions et un suivi, et c'est lui qui effectue toutes les soumissions et tous les paiements. Cette compétence ne crée jamais de comptes, ne soumet pas de formulaires, ne paie pas, ne vote pas et ne publie pas à la place de l'utilisateur.
Étape 1 — Lire le produit, ne pas l'inventer
Collecter, à partir du dépôt et du site en ligne (ne demander que ce qui manque) :
| Champ | Où le trouver |
|---|---|
nom, url (live https://, propre domaine) | métadonnées du site, package.json, README |
| slogan (≤ 60 caractères) et description (≤ 500) | la page d'accueil hero et la meta description |
| tarifs | la page de tarifs, exactement comme écrite |
| ia / open_source / developer_tool / agent_skills | ce qu'est réellement le produit |
| concurrents | demander à l'utilisateur (SaaSHub en a besoin) |
| commentaire_du_createur | les propres mots de l'utilisateur : les rédiger avec lui, ne jamais les publier à sa place |
| logo + 2 à 5 vraies captures d'écran | public/, ou capturer le site en ligne (Étape 3) |
Écrire le tout dans product.json en utilisant assets/product.example.json comme modèle. Les règles de copie se trouvent dans references/copy-guide.md. Ne jamais ajouter de chiffres, témoignages, comptes d'utilisateurs ou affirmations "#1" que l'utilisateur ne peut pas prouver ; les annuaires les rejettent et les lecteurs cessent de faire confiance à la page.
Étape 2 — Revérifier les données des annuaires
python3 scripts/check_directories.py # OK / CHANGED / BLOCKED / DOWN par annuaire
references/directories.json enregistre pour chaque annuaire son URL de soumission, le coût observé, les règles et la date de lecture. Avant de citer un prix, ouvrir la page de cet annuaire (navigateur si BLOCKED ou CHANGED) et dire la date de lecture. Mettre à jour le JSON en cas de changement.
Étape 3 — Vraies captures d'écran
Utiliser des captures d'écran du vrai produit, pas des maquettes. Si le site est en ligne, le capturer :
npx playwright screenshot --viewport-size=1440,900 https://example.com capture-1.png
npx playwright screenshot --viewport-size=1440,900 https://example.com/tarifs capture-2.png
(ou tout navigateur en 1440×900). Montrer le produit en action : l'écran principal, un résultat, les tarifs. Tailles par plateforme : references/assets.md.
Étape 4 — Construire le kit
python3 scripts/make_kit.py --product product.json --out launch-kit
Écrit :
launch-kit/copy.md: une section par annuaire : URL de soumission, coût observé et date, règles, chaque champ du formulaire avecn/limite, le commentaire du créateur. Les champs dépassant la limite sont signalésOVER LIMITet le script se termine avec le code 1 : raccourcir le texte dansproduct.jsonavec l'utilisateur et relancer. Il ne tronque jamais.launch-kit/tracker.csv: id, annuaire, submit_url, cost_observed, checked, backlink_required, status, submitted_on, listing_url, link_rel, notes. Une nouvelle exécution conserve les statuts déjà enregistrés.launch-kit/images/:ph-thumbnail-240.png,logo-512.png,og-1200x630.png,gallery-N-1270x760.png,screenshot-N-1920x1080.png, letterboxé (jamais recadré), chacun < 3 Mo.
Les annuaires auxquels le produit ne correspond pas sont ignorés avec la raison (annuaires IA uniquement pour les produits non-IA, OpenAlternative pour les logiciels fermés, DevHunt pour les outils non-développeurs, marketplaces de compétences d'agents sauf si agent_skills: true). Show HN reçoit un avertissement si essayer le produit nécessite une inscription.
Étape 5 — Ordonner les soumissions (pas de dates, juste un ordre)
- Annuaires gratuits avec longues files d'attente d'abord (Fazier gratuit, Dang.ai gratuit, SaaSHub, Launching Next, Uneed gratuit) : leurs files d'attente s'écoulent pendant que vous finalisez le reste.
- Communautés où l'utilisateur doit être présent pour répondre (Show HN, Indie Hackers, Reddit, V2EX) : une à la fois, seulement lorsque l'utilisateur peut répondre aux commentaires pendant les heures suivantes.
- Product Hunt : d'abord un brouillon, lancer quand l'utilisateur peut y consacrer toute la journée.
- Mises à niveau payantes uniquement si l'utilisateur décide que le prix en vaut la peine ; les lister avec le prix observé et la date et laisser l'utilisateur choisir. Ne jamais payer ni entrer de carte bancaire.
Annuaires qui exigent un backlink (marqués dans copy.md) : dire exactement à l'utilisateur quel badge/lien l'annuaire veut et où il apparaîtra sur son site, et ne l'ajouter que s'il est d'accord.
Étape 6 — Suivre ce qui est en ligne
Après que l'utilisateur a soumis, il colle chaque URL de fiche dans tracker.csv. Ensuite :
python3 scripts/check_listing.py --tracker launch-kit/tracker.csv --domain example.com --write
Marque les lignes live (avec follow / nofollow), no-link ou error.
Règles
- Ne jamais soumettre, s'inscrire, payer, voter, commenter ou publier pour l'utilisateur. Rédiger un brouillon ; c'est lui qui agit.
- BetaList propose une API officielle pour agent qui ne fait que rédiger des brouillons (betalist.com/agent) : vous pouvez créer le brouillon uniquement si l'utilisateur le demande, puis lui remettre le lien de réclamation ; il examine, paie et publie.
- SaaSHub demande explicitement aux agents IA de laisser l'humain soumettre : ne pas automatiser.
- Pas de cercles de votes, pas de messages "veuillez voter", pas de faux comptes. Product Hunt et HN les pénalisent.
- Citer les prix uniquement comme "observé le à ".
Fichiers
scripts/make_kit.py: product.json → copy.md, tracker.csv, images/scripts/check_directories.py: revérification en direct de chaque page d'annuaire et prix enregistréscripts/check_listing.py: confirmer que les fiches pointent vers vous, follow vs nofollowscripts/test_kit.py: auto-test (hors ligne)references/directories.json: les données (26 annuaires, vérifié le 2026-11-03)references/directories.md: les mêmes sous forme de tableau lisiblereferences/copy-guide.md: slogans, descriptions, titres Show HN, commentaire du créateurreferences/assets.md: tailles d'images par plateforme et comment les capturer
Fait quand
-
product.jsonne contient que des faits provenant du produit et des propres mots de l'utilisateur -
check_directories.pya été exécuté et les lignes CHANGED/BLOCKED ont été lues manuellement -
make_kit.pyse termine avec le code 0 (aucun champ OVER LIMIT) et les images ont été ouvertes et semblent correctes - L'utilisateur dispose de
copy.md,tracker.csvetimages/, et connaît l'ordre de soumission