Communitygithub.com

Varnan-Tech/opendirectory

Indiquez l'URL ou la description de votre produit, et il trouve 5 concurrents mondiaux, récupère leurs pages de tarification réelles, extrait chaque palier et prix, et fournit un rapport complet d'intelligence tarifaire : le modèle de tarification dominant dans votre secteur, un tableau de référence des prix, une analyse des fonctionnalités différenciatrices, une carte de positionnement concurrentiel, et une stratégie de prix concrète recommandée pour votre produit. À utiliser lorsqu'on vous demande de rechercher les prix des concurrents, de trouver des références tarifaires, de décider comment fixer le prix d'un produit, de comprendre les modèles de prix dans un secteur, ou d'élaborer une stratégie de prix.

Qu'est-ce que opendirectory ?

Cet outil est un assistant de recherche concurrentielle et d'intelligence tarifaire conçu pour les développeurs, chefs de produit et fondateurs. Il analyse automatiquement un produit (via son URL ou une description), découvre cinq concurrents directs à l'échelle mondiale, et récupère le contenu textuel de leurs pages de tarification réelles. Le rapport final comprend le modèle de tarification dominant, un tableau de référence tarifaire complet, une analyse des fonctionnalités différenciatrices, une carte de positionnement concurrentiel, et une recommandation de prix concrète. L'outil fonctionne entièrement sans clé API requise, utilisant DuckDuckGo et les bibliothèques Python gratuites (requests, BeautifulSoup, html2text). Des clés API optionnelles (Tavily, Firecrawl) peuvent améliorer la qualité des résultats en activant la recherche avancée et le rendu JavaScript, mais l'analyse de base reste gratuite et fonctionnelle sans elles. Une politique stricte de « zéro hallucination » garantit que chaque prix, nom de palier et fonctionnalité extrait provient directement du contenu récupéré des pages, éliminant toute donnée inventée ou basée sur la connaissance préalable du modèle.

Compatible avec✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/pricing-finder

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Pricing Finder

Indiquez l'URL de votre produit ou sa description. L'outil trouve 5 concurrents, récupère leurs pages de tarification réelles et retourne un rapport complet d'intelligence tarifaire : le modèle dominant dans votre secteur, un tableau de référence des prix, une analyse des fonctionnalités différenciatrices, une carte de positionnement concurrentiel, et une recommandation de prix concrète pour votre produit.

Aucune clé API requise. Fonctionne entièrement avec des dépendances pip gratuites. Des clés API optionnelles améliorent la qualité.


Politique zéro hallucination : Chaque prix, nom de palier et fonctionnalité différenciatrice dans le résultat doit provenir du contenu téléchargé de la page de tarification ou d'un extrait de recherche DuckDuckGo. Cela s'applique à :

  • Prix des concurrents : extraits textuellement du contenu de la page téléchargée uniquement
  • « Contactez le service commercial » : enregistré tel quel, jamais estimé ou remplacé par un nombre
  • Noms des paliers : copiés exactement depuis la page, sans paraphrase
  • Listes de fonctionnalités : extraites du contenu de la page, non déduites de la connaissance du produit
  • Observations de positionnement : dérivées uniquement des données du tableau de référence

Erreurs courantes

L'agent voudra...Pourquoi c'est faux
Remplacer "Contactez le service commercial" par un prix estiméN'estimez jamais les prix des entreprises. Enregistrez-le comme "Contactez le service commercial" exactement.
Utiliser sa connaissance pour les prix des concurrentsChaque prix doit provenir du contenu téléchargé ou d'un extrait de recherche.
Sauter l'étape de confirmation des concurrentsAffichez toujours les concurrents découverts et attendez la confirmation. Des concurrents erronés = des références erronées.
Recommander un prix sans référence aux données du tableauChaque recommandation de prix doit citer un nombre spécifique du tableau de référence.
Marquer une page comme de haute qualité alors que le contenu < 500 caractères< 500 caractères signifie que la page n'a pas été téléchargée — marquez data_quality comme 'low' et utilisez l'extrait de recherche en solution de repli.
Utiliser des tirets cadratins dans le résultatRemplacez tous les tirets cadratins par des traits d'union.

Lire les fichiers de référence avant chaque exécution

cat references/pricing-models.md
cat references/extraction-guide.md
cat references/positioning-guide.md

Étape 1 : Vérification de configuration

echo "TAVILY_API_KEY:    ${TAVILY_API_KEY:+définie (qualité de recherche améliorée)}${TAVILY_API_KEY:-non définie, DuckDuckGo sera utilisé (gratuit)}"
echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+définie (rendu JS amélioré)}${FIRECRAWL_API_KEY:-non définie, requests+BS4 seront utilisées (gratuit)}"
echo ""
python3 -c "from ddgs import DDGS; import requests, bs4, html2text; print('Dépendances OK')" 2>/dev/null \
  || echo "ERREUR : Dépendances manquantes. Exécutez : pip install ddgs requests beautifulsoup4 html2text"

Si les dépendances sont manquantes : Arrêtez-vous immédiatement. Dites à l'utilisateur : « Dépendances Python manquantes. Exécutez cette commande pour les installer : pip install ddgs requests beautifulsoup4 html2text -- tout est gratuit, aucun compte nécessaire. Puis réessayez. »

Si seules les clés API sont manquantes : Continuez. DuckDuckGo et requests+BS4 sont les options gratuites par défaut.

Dériver le slug du produit :

PRODUCT_SLUG=$(python3 -c "
from urllib.parse import urlparse
import sys, re
url = 'URL_ICI'
if url.startswith('http'):
    host = urlparse(url).netloc.replace('www.', '')
    print(host.split('.')[0])
else:
    print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-'))
")
echo "Slug du produit : $PRODUCT_SLUG"

Étape 2 : Analyser l'entrée

Collectez depuis la conversation :

  • product_url : l'URL à télécharger (obligatoire, sauf si l'utilisateur colle directement une description)
  • geography : optionnel -- États-Unis / Europe / Inde / global. Défaut : États-Unis

Si l'utilisateur fournit uniquement une description collée (pas d'URL) : Ignorez les étapes 3 et 4. Allez directement à l'étape 4 (analyse du produit) en utilisant le texte collé comme product_content. Définissez page_source à user_description et notez-le dans data_quality_flags.

Si ni URL ni description : Demandez : « Quelle est l'URL de votre produit ou startup ? Ou collez une courte description : ce qu'il fait, pour qui, et ce qui le rend différent. »


Étape 3 : Télécharger la page produit

Principal : Firecrawl (si FIRECRAWL_API_KEY est définie)

curl -s -X POST https://api.firecrawl.dev/v1/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "URL_ICI", "formats": ["markdown"], "onlyMainContent": true}' \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('data', {}).get('markdown', '') or d.get('markdown', '')
print(f'Téléchargé via Firecrawl : {len(content)} caractères')
open('/tmp/pf-product-raw.md', 'w').write(content)
"

Solution de repli : requests + BS4 (gratuit, toujours disponible)

python3 << 'PYEOF'
import requests, html2text, random

USER_AGENTS = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
]
headers = {"User-Agent": random.choice(USER_AGENTS), "Accept": "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8"}
resp = requests.get("URL_ICI", headers=headers, timeout=20, allow_redirects=True)
converter = html2text.HTML2Text()
converter.ignore_images = True
converter.body_width = 0
content = converter.handle(resp.text)[:8000]
print(f'Téléchargé via requests+BS4 : {len(content)} caractères')
open('/tmp/pf-product-raw.md', 'w').write(content)
PYEOF

Point de contrôle :

python3 -c "
content = open('/tmp/pf-product-raw.md').read()
if len(content) < 200:
    print('ERREUR : moins de 200 caractères téléchargés -- la page est peut-être rendue via JS')
else:
    print(f'Contenu OK : {len(content)} caractères')
"

Si le contenu < 200 caractères : Dites à l'utilisateur : « La page produit a retourné trop peu de contenu -- le site utilise peut-être un rendu JavaScript. Veuillez coller une courte description : ce que fait votre produit, pour qui, et ce qui le rend différent des concurrents. »


Étape 4 : Analyse du produit (IA)

Affichez le contenu de la page :

python3 -c "
content = open('/tmp/pf-product-raw.md').read()[:5000]
print('=== PAGE PRODUIT (5000 premiers caractères) ===')
print(content)
"

Instructions pour l'IA : Analysez la page produit ci-dessus et extrayez :

  • product_name : le nom du produit ou de l'entreprise
  • one_line_description : ce qu'il fait, pour qui, proposition de valeur principale. Moins de 20 mots. Aucun langage marketing.
  • industry_taxonomy : l1 (haut niveau : outils développeurs / fintech / santé / consommation / etc.), l2 (secteur : devops / paiements / RH / etc.), l3 (niche spécifique : automatisation CI/CD / paiements intégrés / vidéo asynchrone / etc.)
  • differentiators : exactement 2-3 choses spécifiques qui distinguent ce produit. Ils alimentent la recommandation — soyez précis. Les réponses génériques comme « facile à utiliser » ne sont pas acceptables.
  • icp : buyer_persona (intitulé), company_type, company_size
  • geography_bias : États-Unis / Europe / Inde / global
  • page_source : "live_page" ou "user_description"

Écrire dans /tmp/pf-product-analysis.json :

python3 << 'PYEOF'
import json

analysis = {
    # REMPLISSEZ à partir de votre analyse ci-dessus
    "product_name": "",
    "one_line_description": "",
    "industry_taxonomy": {"l1": "", "l2": "", "l3": ""},
    "differentiators": [],
    "icp": {"buyer_persona": "", "company_type": "", "company_size": ""},
    "geography_bias": "États-Unis",
    "page_source": "live_page"
}

json.dump(analysis, open('/tmp/pf-product-analysis.json', 'w'), indent=2)
print('Analyse produit écrite.')
PYEOF

Vérifiez :

python3 -c "
import json
a = json.load(open('/tmp/pf-product-analysis.json'))
print('Produit :', a['product_name'])
print('Secteur :', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('Différenciateurs :')
for d in a['differentiators']:
    print(f'  - {d}')
"

Étape 4b : Phase 1 -- Découverte des concurrents

ls scripts/research.py 2>/dev/null && echo "script trouvé" || echo "ERREUR : scripts/research.py introuvable -- impossible de continuer"
python3 scripts/research.py \
  --phase discover \
  --product-analysis /tmp/pf-product-analysis.json \
  --output /tmp/pf-competitors-raw.json

Affichez les résultats pour examen par l'IA :

python3 -c "
import json
data = json.load(open('/tmp/pf-competitors-raw.json'))
print(f'Recherches effectuées : {len(data[\"competitor_searches\"])}')
for s in data['competitor_searches']:
    print(f'\nRequête : {s[\"query\"]}')
    for r in s.get('results', [])[:6]:
        print(f'  - {r[\"title\"]} | {r[\"url\"]')
        print(f'    {r.get(\"snippet\",\"\")[:150]}')
"

Instructions pour l'IA : Lisez les résultats de recherche ci-dessus. Choisissez exactement 5 sociétés concurrentes qui :

  1. Sont nommées dans les titres ou extraits des résultats de recherche
  2. Sont dans la même niche L3 que le produit analysé
  3. Sont des produits logiciels réels (pas des agences, des listes d'articles ou des sites d'avis)
  4. Sont distinctes les unes des autres

Pour chaque concurrent, écrivez : name, url, pricing_url (leur page de tarification -- déduisez-la comme [url]/pricing si elle n'est pas trouvée dans les extraits), description (une phrase de l'extrait), source_url.


Étape 5 : Confirmation des concurrents

python3 << 'PYEOF'
import json

analysis = json.load(open('/tmp/pf-product-analysis.json'))

# REMPLISSEZ : 5 concurrents provenant des résultats de recherche ci-dessus
candidates = [
    # {"name": str, "url": str, "pricing_url": str, "description": str, "source_url": str}
]

print(f"\n5 concurrents trouvés pour {analysis['product_name']} dans {analysis['industry_taxonomy']['l3']} :\n")
for i, c in enumerate(candidates, 1):
    print(f"  {i}. {c['name']} -- {c['description']}")
    print(f"     Produit : {c['url']}")
    print(f"     Tarification : {c['pricing_url']}")

data = json.load(open('/tmp/pf-competitors-raw.json'))
data['competitor_candidates'] = candidates
json.dump(data, open('/tmp/pf-competitors-raw.json', 'w'), indent=2)
PYEOF

Dites à l'utilisateur : « Voici les 5 concurrents dont je vais récupérer les données de tarification. Ajoutez, supprimez ou échangez-en -- ou dites 'ça a l'air bon' pour continuer. »

Attendez la confirmation. Si l'utilisateur modifie la liste, mettez à jour les candidats en conséquence. Ensuite, écrivez la liste confirmée :

python3 << 'PYEOF'
import json

# REMPLISSEZ : liste des concurrents confirmée (après révision par l'utilisateur)
confirmed = [
    # {"name": str, "url": str, "pricing_url": str}
]

json.dump({"confirmed_competitors": confirmed}, open('/tmp/pf-competitors-confirmed.json', 'w'), indent=2)
print(f"{len(confirmed)} concurrents confirmés pour la recherche tarifaire.")
for c in confirmed:
    print(f"  - {c['name']} | tarification : {c['pricing_url']}")
PYEOF

Étape 6 : Phase 2 -- Récupération des pages de tarification

python3 scripts/research.py \
  --phase fetch-pricing \
  --competitors /tmp/pf-competitors-confirmed.json \
  --output /tmp/pf-pricing-raw.json

Ceci récupère la page de tarification de chaque concurrent en utilisant une solution de repli à 3 niveaux :

  1. Téléchargement direct : requests + beautifulsoup4 + html2text
  2. Cache Google : webcache.googleusercontent.com/search?q=cache:[url]
  3. Recherche DuckDuckGo : "[concurrent]" tarification forfaits coût par mois (extrait de repli)

Affichez le résumé des téléchargements :

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
print(f'Concurrents téléchargés : {data[\"competitors_fetched\"]}')
print()
for r in data['results']:
    quality_label = {'high': 'BON', 'medium': 'OK', 'low': 'EXTRAIT SEULEMENT'}.get(r['data_quality'], r['data_quality'])
    print(f'  {r[\"name\"]:20} {r[\"source\"]:15} {r[\"content_length\"]:5} car.  [{quality_label}]')
"

Si un concurrent a data_quality: low : Cela signifie que la page de tarification a été bloquée ou rendue via JS. L'analyse se poursuivra en utilisant les extraits de recherche, mais la confiance pour ce concurrent sera notée comme faible.


Étape 7 : Extraction des tarifs (IA)

Affichez tout le contenu brut des tarifs :

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
for r in data['results']:
    print(f'\n=== {r[\"name\"]} (source : {r[\"source\"]}, qualité : {r[\"data_quality\"]}) ===')
    print(f'URL de tarification : {r[\"pricing_url\"]}')
    print(r['content'][:4000])
    print('---')
"

Instructions pour l'IA : Pour chaque concurrent, extrayez les données tarifaires structurées du contenu ci-dessus. Suivez references/extraction-guide.md pour savoir comment identifier les paliers, les prix, les limites et les appels à l'action.

Règles zéro hallucination :

  1. Extrayez les prix textuellement du contenu uniquement. Si un prix n'est pas dans le contenu, écrivez null.
  2. Enregistrez "Contactez le service commercial" exactement tel quel. Ne le remplacez jamais par un nombre estimé.
  3. data_quality: low signifie que les données proviennent d'extraits de recherche -- extrayez ce qui est présent mais ne comblez pas les lacunes avec la connaissance du modèle.
  4. Pour tout champ non présent dans le contenu : écrivez "non trouvé dans les données de la page".
  5. Prix annuels : enregistrez toujours l'équivalent mensuel avec le total annuel.

Écrire dans /tmp/pf-pricing-extracted.json :

python3 << 'PYEOF'
import json

# REMPLISSEZ : un objet par concurrent, suivant le schéma ci-dessous
extracted = [
    # {
    #   "competitor": str,
    #   "pricing_url": str,
    #   "data_quality": "high" | "medium" | "low",
    #   "pricing_model": "per-seat" | "flat-rate" | "usage-based" | "freemium" | "tiered-flat" | "hybrid",
    #   "billing_cadence": ["monthly"] | ["annual"] | ["monthly", "annual"],
    #   "annual_discount": str,           # ex. "20%" ou "non trouvé dans les données de la page"
    #   "free_tier": true | false,
    #   "free_trial": true | false,
    #   "free_trial_days": int | null,
    #   "tiers": [
    #     {
    #       "name": str,
    #       "price_monthly": float | null,       # null si Contactez le service commercial
    #       "price_annual_monthly": float | null, # équivalent mensuel en facturation annuelle
    #       "price_note": str,                   # "Contactez le service commercial", "Gratuit", ou vide
    #       "seats": str,                        # "par siège", "illimité", "jusqu'à 5", etc.
    #       "key_limits": [str],                 # stockage, appels API, projets, etc.
    #       "key_features": [str]                # 3 à 5 fonctionnalités principales de ce palier
    #     }
    #   ],
    #   "enterprise_tier": true | false,
    #   "enterprise_pricing": str,               # "Contactez le service commercial" ou prix réel
    #   "regional_pricing": str | null           # ex. "Inde : 999 ₹/mois" ou null
    # }
]

json.dump(extracted, open('/tmp/pf-pricing-extracted.json', 'w'), indent=2, ensure_ascii=False)
print('Données tarifaires extraites.')
PYEOF

Vérifiez :

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-extracted.json'))
for c in data:
    print(f'{c[\"competitor\"]:20} {c[\"pricing_model\"]:15} {len(c[\"tiers\"])} paliers | qualité : {c[\"data_quality\"]}')
    for t in c['tiers']:
        pm = t['price_monthly']
        pf = f'{pm} €' if pm else t['price_note']
        print(f'    {t[\"name\"]:20} {pf:>10}')
"

Étape 8 : Analyse des fonctionnalités différenciatrices

Lisez les fichiers de référence :

cat references/pricing-models.md

Affichez les paliers extraits :

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-extracted.json'))
for c in data:
    print(f'=== {c[\"competitor\"]} ===')
    print(f'Modèle : {c[\"pricing_model\"]}')
    for t in c['tiers']:
        print(f'  Palier : {t[\"name\"]}')
        print(f'  Prix mensuel : {t[\"price_monthly\"]}')
        print(f'  Sièges : {t.get(\"seats\", \"\")}')
        print(f'  Limites clés : {t.get(\"key_limits\", [])}')
        print(f'  Fonctionnalités clés : {t.get(\"key_features\", [])}')
        print()
"

Instructions pour l'IA : Pour chaque concurrent, identifiez les fonctionnalités différenciatrices (fonctionnalités qui passent d'un palier payant à un palier supérieur, ou qui bloquent les utilisateurs gratuits). Suivez references/extraction-guide.md pour les règles de classification.

Écrire dans /tmp/pf-feature-gates.json :

python3 << 'PYEOF'
import json

pricing_data = json.load(open('/tmp/pf-pricing-extracted.json'))

# REMPLISSEZ : fonctionnalités différenciatrices par concurrent
feature_gates = {
    # "competitor_name": [
    #   {
    #     "gate": str,           # nom de la fonctionnalité différenciatrice
    #     "introduced_at": str,  # "Free", "Starter", "Pro", "Enterprise", ou "not found"
    #     "category": str        # usage/performance/features/support/customization
    #   }
    # ]
}

json.dump(feature_gates, open('/tmp/pf-feature-gates.json', 'w'), indent=2)
print('Analyse des fonctionnalités différenciatrices écrite.')
PYEOF

Étape 9 : Construction et analyse du tableau de référence

python3 << 'PYEOF'
import json

pricing_data = json.load(open('/tmp/pf-pricing-extracted.json'))
analysis = json.load(open('/tmp/pf-product-analysis.json'))

# REMPLISSEZ : construisez le tableau de référence
# Incluez : le modèle dominant, le tableau des prix, les fonctionnalités différenciatrices et les observations de positionnement
benchmark = {
    "dominant_model": {
        "frequency": {},  # combien de concurrents utilisent chaque modèle
        "most_common": "",
        "identity": ""    # nom du modèle le plus courant
    },
    "price_table": [
        # {
        #   "competitor": str,
        #   "entry_price": float | "Freemium" | "Contactez le service commercial",
        #   "mid_price": float | "Contactez le service commercial",
        #   "enterprise_price": float | "Contactez le service commercial",
        #   "free_tier": bool,
        #   "free_trial": bool
        # }
    ],
    "feature_gates": {},  # copié de l'étape 8
    "positioning_observations": [
        # "Observation fondée sur les données uniquement — ex. : \"Seulement 2 concurrents sur 5 proposent un niveau gratuit avec des limites de stockage.\""
    ]
}

json.dump(benchmark, open('/tmp/pf-benchmark.json', 'w'), indent=2)
print('Tableau de référence construit.')
PYEOF

Étape 10 : Synthèse du rapport

Lisez la carte de positionnement :

cat references/positioning-guide.md

Instructions pour l'IA : Synthétisez un rapport final en français. Le rapport DOIT contenir ces sections exactement dans cet ordre :


1. Modèle de tarification dominant dans ce secteur

Expliquez le modèle le plus courant parmi les 5 concurrents et pourquoi il domine. Citez les données.


2. Tableau de référence des prix

Montrez clairement chaque concurrent, son prix d'entrée, son prix intermédiaire, son prix entreprise, et tout niveau gratuit ou essai gratuit. Utilisez un tableau bien formaté.


3. Analyse des fonctionnalités différenciatrices

Montrez quelles fonctionnalités sont verrouillées derrière des paliers plus élevés et chez quels concurrents. Expliquez les barrières à l'entrée et les opportunités de promotion.


4. Carte de positionnement concurrentiel

Positionnez chaque concurrent sur une matrice 2D de prix (axe Y) vs. fonctionnalités/évolutivité (axe X). Utilisez des notations comme [Haut-Milieu], [Bas-Bas] pour décrire la position. Expliquez clairement où se trouve votre produit sur cette carte.


5. Recommandation de prix stratégique

Recommandez une position de prix (gamme de prix) ET un modèle de tarification (ex. : par siège, forfait fixe, basé sur l'utilisation) pour votre produit. Votre recommandation DOIT :

  1. Citer une ou plusieurs données du tableau de référence (section 2)
  2. Faire référence aux fonctionnalités différenciatrices (section 3)
  3. Tenir compte de votre positionnement sur la carte (section 4)
  4. Proposer un prix mensuel d'entrée en USD, un prix intermédiaire, un prix entreprise, et si un niveau gratuit ou un essai gratuit doit être proposé

Règles de qualité :

  • Chaque nombre dans la recommandation doit renvoyer à une ligne spécifique du tableau de référence
  • Utilisez des guillemets pour marquer les citations directes des données
  • Paraphrasez le langage marketing des concurrents en termes factuels
  • Supprimez tout langage vague ou générique sur la "croissance" ou la "valeur" — soyez précis et entraînable
  • Si des données d'un concurrent sont marquées data_quality: low, notez-le et expliquez pourquoi la confiance est réduite
  • Ne présupposez jamais l'intention de l'utilisateur ; si les données contredisent une hypothèse, dites-le et demandez des éclaircissements

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

Skills associés