Communitygithub.com

Varnan-Tech/opendirectory

Étant donné une description de produit, des mots-clés de catégorie ou des noms de concurrents (toute combinaison), recherche les vraies difficultés de votre marché sur Reddit, Hacker News, GitHub Issues, G2 et Google Trends, puis synthétise le tout en un framework de positionnement montrant qui est votre ICP, ce qu'ils disent ouvertement et exactement comment leur parler. À utiliser lorsqu'on vous demande de comprendre un marché, trouver les points douloureux de l'ICP, cartographier les concurrents, élaborer un document de positionnement, trouver des angles de message, ou répondre à qui est mon client et qu'est-ce qui les intéresse vraiment. Déclenchez cette compétence lorsqu'un utilisateur dit « cartographie mon marché », « qui est mon ICP », « quelles sont les difficultés de mon marché », « comprends mon marché », « trouve mon client cible », « quels sont les principaux griefs dans l'espace X », « aide-moi à positionner mon produit » ou « à qui devrais-je vendre ».

Qu'est-ce que opendirectory ?

Cette compétence d'agent IA permet de cartographier un marché à partir d'une description de produit, de mots-clés de catégorie ou de noms de concurrents. Elle collecte des signaux de douleur réels depuis plusieurs sources (Reddit, Hacker News, GitHub Issues, G2 et Google Trends), les note et les agrège en thèmes, puis génère un framework de positionnement complet incluant la définition de l'ICP (client idéal), les thèmes de douleur classés avec des citations textuelles, des signaux de taille de marché et des angles de message tirés du langage réel des utilisateurs. Elle est conçue pour des agents comme Claude Code, Cursor ou Codex, et évite strictement d'inventer des données ou des estimations chiffrées concrètes : chaque citation de douleur doit exister textuellement dans les données collectées, et les estimations de taille de marché sont exprimées comme des signaux directionnels uniquement. En suivant un processus structuré en 8 étapes, elle exécute d'abord un script de collecte de données, puis analyse les signaux, crée des clusters de douleur, profile l'ICP, évalue la taille du marché et génère un rapport de positionnement final avec des contrôles de qualité automatisés pour garantir l'intégrité et l'absence de mots interdits.

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

Demander à votre IA préférée

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

Documentation

Cartographie Ton Marché

Prends une description de produit, des mots-clés de catégorie ou des noms de concurrents. Cherche sur Reddit, HN, GitHub Issues, G2 et Google Trends de vrais signaux de douleur. Note-les et regroupe-les. Construis un framework de positionnement complet : définition de l'ICP, thèmes de douleur classés avec citations textuelles, signaux de taille de marché et angles de message dérivés du langage réel utilisé par les gens.


Règle cruciale : Chaque citation de douleur dans la sortie doit exister textuellement dans les données brutes collectées par le script. Chaque nom de fournisseur dans la carte du marché doit provenir des résultats de scraping G2 ou des résultats de recherche GitHub. La taille du marché doit dire « les signaux suggèrent » — n'estime jamais un montant en dollars à partir de proxies légers. Si une source renvoie 0 résultats, signale 0 — ne complète pas avec des exemples inventés.


Erreurs Courantes

L'agent voudra...Pourquoi c'est faux
Inventer des points douloureux ou des chiffres de taille de marchéChaque citation de douleur doit être textuelle, issue des données brutes. La taille du marché doit citer les signaux trouvés. N'estime jamais la taille « typique » d'un marché.
Noter par nombre de posts au lieu du pain_scoreUn post avec 2 000 upvotes sur les prix est plus fort que 50 posts avec 10 upvotes chacun. Utilise la formule pain_score de references/pain-scoring.md.
Utiliser les mêmes subreddits pour chaque catégorier/politics ajoute du bruit à une recherche devops. Détecte automatiquement les subreddits pertinents à partir de la catégorie et des noms de concurrents avant de chercher.
Envoyer tous les signaux bruts à l'IA sans les noterNote d'abord localement. Envoie seulement les 60 signaux avec le pain_score le plus élevé au clustering IA. Économise des tokens et améliore la qualité du regroupement.
Sauter l'extraction de l'ICP à partir des métadonnées des postsLe subreddit, le flair, la bio de l'auteur (HN) et le type d'organisation GitHub sont des signaux ICP plus riches que le contenu des posts. Capture-les et signale-les toujours.
Confondre le nombre de fournisseurs avec la taille du marché« 47 fournisseurs sur G2 » signifie concurrentiel, pas grand. Présente tous les signaux comme des indicateurs directionnels, pas des chiffres durs.

Étape 1 : Vérification de l'Installation

echo "GITHUB_TOKEN: ${GITHUB_TOKEN:-non défini -- la recherche sur GitHub Issues s'exécute à 60 requêtes/heure sans authentification}"
echo "Aucune autre clé API requise."
echo ""
echo "Sources de données utilisées lors de cette exécution :"
echo "  Reddit public JSON  (sans auth, 10 req/min)"
echo "  HN Algolia API      (sans auth, gratuit)"
echo "  GitHub Issues API   (${GITHUB_TOKEN:+authentifié, }60-5000 req/hr)"
echo "  G2 category scrape  (sans auth, analyse HTML)"
echo "  Google Trends       (sans auth, endpoint non officiel)"

Si GITHUB_TOKEN n'est pas défini : continue. La recherche non authentifiée sur GitHub est limitée à 60 req/heure — suffisant pour une exécution standard. Pour une utilisation répétée, ajoute un token sur github.com/settings/tokens (aucun scope nécessaire pour les dépôts publics).


Étape 2 : Analyse de l'Entrée

Collecte à partir de la conversation :

  • category — mot(s) clé(s) décrivant l'espace du marché (par ex. « observabilité développeur », « analytics B2B », « outils devops »)
  • competitors — liste optionnelle de noms de produits concurrents ou de domaines (par ex. « Datadog, New Relic, Grafana »)
  • product_context — optionnel : ce que fait le produit de l'utilisateur (aide à adapter les angles de message)

Si l'utilisateur fournit seulement une description de produit sans mot-clé de catégorie : extrais-en toi-même 2-3 mots-clés de catégorie.

Si l'utilisateur fournit seulement des noms de concurrents sans catégorie : déduis la catégorie en recherchant les concurrents.

Écris l'entrée analysée :

python3 << 'PYEOF'
import json, os

data = {
    "category": "CATEGORY_ICI",
    "competitors": ["CONC_1", "CONC_2"],
    "product_context": "CONTEXTE_PRODUIT_ICI"
}

with open("/tmp/mym-input.json", "w") as f:
    json.dump(data, f, indent=2)
print("Entrée écrite dans /tmp/mym-input.json")
print(f"Catégorie : {data['category']}")
print(f"Concurrents : {', '.join(data['competitors']) if data['competitors'] else 'aucun fourni'}")
PYEOF

Étape 3 : Exécute le Script Autonome de Collecte de Données

Le script gère toute la collecte de données. Vérifie d'abord s'il existe :

ls scripts/fetch.py 2>/dev/null && echo "script disponible" || echo "non trouvé"

S'il est disponible, exécute-le :

GITHUB_TOKEN="${GITHUB_TOKEN:-}" python3 scripts/fetch.py \
    "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(d['category'])")" \
    --competitors "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(','.join(d['competitors']))")" \
    --context "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(d['product_context'])")" \
    --output /tmp/mym-raw.json

Attends la fin (autorise jusqu'à 4 minutes — les recherches Reddit + HN prennent environ 90 secondes au total).

Vérifie la sortie :

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print(f'Signaux Reddit : {d[\"market_signals\"][\"reddit_signals_found\"]}')
print(f'Signaux HN :     {d[\"market_signals\"][\"hn_signals_found\"]}')
print(f'Signaux GitHub : {d[\"market_signals\"][\"github_issue_signals\"]}')
print(f'Fournisseurs G2 :     {d[\"market_signals\"][\"vendor_count_g2\"]}')
print(f'Tendances :         {d[\"market_signals\"][\"trends_direction\"]}')
print(f'Signaux totaux :  {d[\"summary\"][\"total_pain_signals\"]}')
"

Si les signaux totaux < 10 : arrête. Dis à l'utilisateur : « Moins de 10 signaux de douleur trouvés pour cette catégorie. Le marché est peut-être trop niche pour une couverture Reddit/HN, ou les mots-clés de catégorie doivent être ajustés. Essaie des mots-clés plus larges ou ajoute des noms de concurrents. »


Étape 4 : Regroupement IA des Douleurs

Imprime les 60 meilleurs signaux de douleur pour l'analyse IA :

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
top60 = sorted(d['raw_pains'], key=lambda x: x['pain_score'], reverse=True)[:60]
print(json.dumps(top60, indent=2))
"

Tu as maintenant les 60 meilleurs signaux de douleur. Analyse-les et produis des groupes de douleurs.

Instructions pour l'analyse IA :

  • Identifie 5-7 thèmes de douleur récurrents à travers toutes les sources
  • Pour chaque thème : choisis un nom qui utilise le langage du marché (pas tes propres mots)
  • Agrège le pain_score de tous les signaux dans chaque groupe
  • Sélectionne les 3-5 meilleures citations textuelles pour chaque thème (score le plus élevé, langage le plus spécifique)
  • Note dans quelles sources et subreddits chaque thème se concentre
  • Signale tout thème qui n'apparaît que dans une seule source (confiance moindre)

Écris les groupes dans /tmp/mym-clusters.json :

{
  "clusters": [
    {
      "theme": "langage exact issu des données",
      "total_score": 847,
      "signal_count": 34,
      "sources": {"reddit": 18, "hn": 12, "github_issue": 4},
      "top_subreddits": ["devops", "sysadmin"],
      "verbatim_quotes": [
        {"text": "citation exacte", "source": "reddit", "score": 234, "url": "..."},
        {"text": "citation exacte", "source": "hn", "score": 87, "url": "..."}
      ],
      "who_has_this_pain": "description de qui publie à ce sujet"
    }
  ]
}
python3 -c "
import json, os
# Confirme que le fichier de clusters a été écrit
with open('/tmp/mym-clusters.json') as f:
    d = json.load(f)
print(f'Groupes écrits : {len(d[\"clusters\"])}')
for c in d['clusters']:
    print(f'  {c[\"theme\"]} -- score : {c[\"total_score\"]}, signaux : {c[\"signal_count\"]}')
"

Étape 5 : Profilage ICP

Imprime les signaux ICP provenant des données brutes :

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print('Signaux ICP :')
print(json.dumps(d['icp_signals'], indent=2))
print()
print('Distribution des subreddits :')
sub_counts = {}
for p in d['raw_pains']:
    s = p.get('subreddit', '')
    if s:
        sub_counts[s] = sub_counts.get(s, 0) + 1
for sub, count in sorted(sub_counts.items(), key=lambda x: -x[1])[:10]:
    print(f'  r/{sub} : {count} signaux')
"

En utilisant les signaux ICP et la distribution des subreddits ci-dessus, synthétise le profil ICP. Écris-le dans /tmp/mym-clusters.json en ajoutant une clé icp :

{
  "icp": {
    "who_they_are": "Profil de 2-3 phrases utilisant le langage des données",
    "where_they_live": ["r/devops (89 posts)", "r/sysadmin (67 posts)", "HN ask-hn (34 fils)"],
    "what_they_say": ["citation textuelle 1", "citation textuelle 2", "citation textuelle 3"],
    "what_they_have_tried": ["outils ou approches alternatives mentionnés dans les données"],
    "confidence": "high|medium|low -- basé sur le volume de signaux et la diversité des sources"
  }
}

Étape 6 : Synthèse de la Taille du Marché

Imprime les signaux du marché :

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
ms = d['market_signals']
print('Signaux du marché :')
print(f'  Fournisseurs G2 :         {ms[\"vendor_count_g2\"]}')
print(f'  Direction des tendances :   {ms[\"trends_direction\"]}')
print(f'  Signaux HN (12 mois) :  {ms[\"hn_signals_found\"]}')
print(f'  Signaux Reddit :     {ms[\"reddit_signals_found\"]}')
print(f'  Top fournisseurs G2 :     {json.dumps(ms.get(\"top_vendors\", []), indent=4)}')
"

Synthétise une évaluation directionnelle de la taille du marché en utilisant uniquement ces signaux. N'estime pas un montant en dollars. Utilise un langage comme :

  • « Les signaux suggèrent un marché concurrentiel et en croissance » (nombreux fournisseurs + tendances à la hausse)
  • « Les signaux suggèrent un marché émergent » (peu de fournisseurs + faible volume de signaux)
  • « Les signaux suggèrent un marché saturé » (nombreux fournisseurs + tendances plates ou à la baisse)

Ajoute l'évaluation à /tmp/mym-clusters.json comme une clé market_size.


Étape 7 : Framework de Positionnement

En utilisant les groupes (Étape 4), l'ICP (Étape 5) et la taille du marché (Étape 6), génère le framework de positionnement.

Instructions :

  • Choisis les 3 principaux groupes de douleur comme angles de positionnement primaires
  • Pour chaque angle : écris une déclaration de positionnement en utilisant le langage textuel des données (pas paraphrasé)
  • Génère 3 titres de page d'accueil qui utilisent les phrases exactes que les gens utilisent dans les données de douleur
  • Génère 3 lignes d'objet d'email froid basées sur le langage de la douleur
  • N'utilise PAS de mots interdits : puissant, robuste, transparent, innovant, révolutionnaire, rationaliser, exploiter, transformer, révolutionner

Écris le framework de positionnement complet dans /tmp/mym-output.json :

{
  "positioning_angles": [
    {
      "pain": "nom du thème",
      "statement": "positionnement en une ligne utilisant le langage du marché",
      "headline": "titre de page d'accueil utilisant le langage de douleur textuel",
      "cold_email_subject": "ligne d'objet"
    }
  ],
  "icp_card": {
    "one_liner": "une phrase : qui ils sont + ce qui les intéresse",
    "where_to_find_them": [...],
    "how_to_talk_to_them": "notes sur le ton et le vocabulaire issues des données"
  },
  "market_map": [...top fournisseurs de G2 avec notes de positionnement...]
}

Étape 8 : Auto-Qualité et Sauvegarde de la Sortie

Exécute les contrôles d'auto-qualité :

python3 -c "
import json

# Charge toutes les sorties
with open('/tmp/mym-raw.json') as f:
    raw = json.load(f)
with open('/tmp/mym-clusters.json') as f:
    clusters = json.load(f)
with open('/tmp/mym-output.json') as f:
    output = json.load(f)

raw_texts = set()
for p in raw['raw_pains']:
    raw_texts.add(p.get('title', ''))
    raw_texts.add(p.get('body_excerpt', ''))

# Contrôle 1 : Pas de tirets cadratins
import json as j
full_text = j.dumps(output)
if '—' in full_text:
    print('ÉCHEC : tiret cadratin trouvé dans la sortie')
else:
    print('RÉUSSI : pas de tirets cadratins')

# Contrôle 2 : Pas de mots interdits
banned = ['puissant', 'robuste', 'transparent', 'innovant', 'révolutionnaire',
          'rationaliser', 'exploiter', 'transformer', 'révolutionner']
found = [w for w in banned if w.lower() in full_text.lower()]
if found:
    print(f'ÉCHEC : mots interdits trouvés : {found}')
else:
    print('RÉUSSI : pas de mots interdits')

# Contrôle 3 : Vérification du langage de taille de marché
if 'billion' in full_text.lower() or 'trillion' in full_text.lower() or 'worth \$' in full_text.lower():
    print('ÉCHEC : estimation dure de taille de marché trouvée -- utilise un langage directionnel uniquement')
else:
    print('RÉUSSI : pas d\'estimations dures de taille de marché')

# Contrôle 4 : Correspondance des comptes de signaux
total = raw['summary']['total_pain_signals']
print(f'RÉUSSI : {total} signaux de douleur totaux dans les données brutes')

print('Auto-qualité terminée.')
"

Corrige tout échec avant de sauvegarder.

Sauvegarde le rapport final :

python3 << 'PYEOF'
import json, re
from datetime import datetime

with open('/tmp/mym-input.json') as f:
    inp = json.load(f)
with open('/tmp/mym-raw.json') as f:
    raw = json.load(f)
with open('/tmp/mym-clusters.json') as f:
    clusters = json.load(f)
with open('/tmp/mym-output.json') as f:
    output = json.load(f)

slug = re.sub(r'[^a-z0-9]+', '-', inp['category'].lower()).strip('-')
date = datetime.now().strftime('%Y-%m-%d')
outpath_md = f"docs/market-maps/{slug}-{date}.md"
outpath_json = f"docs/market-maps/{slug}-{date}.json"

# Construire le rapport markdown
ms = raw['market_signals']
icp = clusters.get('icp', {})
market_assessment = clusters.get('market_size', {})
angles = output.get('positioning_angles', [])
icp_card = output.get('icp_card', {})
market_map = output.get('market_map', [])

lines = [
    f"# Carte du Marché : {inp['category'].title()}",
    f"Date : {date} | Signaux analysés : {raw['summary']['total_pain_signals']} | Sources : Reddit ({ms['reddit_signals_found']}) + HN ({ms['hn_signals_found']}) + GitHub Issues ({ms['github_issue_signals']})",
    "",
    "---",
    "",
    "## Signaux de Taille du Marché",
    f"Fournisseurs sur G2 : {ms['vendor_count_g2']} | Google Trends : {ms['trends_direction'].upper()} | Stade du marché : {market_assessment.get('stage', 'voir signaux ci-dessous')}",
    "",
    market_assessment.get('summary', ''),
    "",
    "---",
    "",
    "## Votre ICP",
    "",
    f"**Qui ils sont :** {icp.get('who_they_are', '')}",
    "",
    f"**Où ils se trouvent :** {', '.join(icp.get('where_they_live', []))}",
    "",
    "**Ce qu'ils disent :**",
]
for q in icp.get('what_they_say', []):
    lines.append(f'> "{q}"')
lines += ["", "---", "", "## Principales Douleurs (classées par force du signal)", ""]

for i, c in enumerate(clusters.get('clusters', []), 1):
    lines.append(f"### Douleur {i} : {c['theme']} [score : {c['total_score']}]")
    sources = c.get('sources', {})
    source_str = " + ".join(f"{src} ({cnt})" for src, cnt in sources.items())
    lines.append(f"{c['signal_count']} signaux | Sources : {source_str}")
    lines.append(f"Qui a cette douleur : {c.get('who_has_this_pain', '')}")
    lines.append("")
    lines.append("Textuel :")
    for q in c.get('verbatim_quotes', [])[:4]:
        lines.append(f"- \"{q['text']}\" (de {q['source']}, score {q['score']})")
    lines.append("")

lines += ["---", "", "## Angles de Positionnement", ""]
for a in angles:
    lines.append(f"### Douleur ciblée : {a['pain']}")
    lines.append(f"**Déclaration :** {a['statement']}")
    lines.append(f"**Titre page d'accueil :** {a['headline']}")
    lines.append(f"**Ligne d'objet email froid :** {a['cold_email_subject']}")
    lines.append("")

lines += ["---", "", "## Carte des Concurrents", ""]
lines.append("| Fournisseur | Note de positionnement |")
lines.append("|---|---|")
for v in market_map:
    name = v.get('name', v.get('vendor', ''))
    note = v.get('positioning_note', v.get('note', ''))
    lines.append(f"| {name} | {note} |")

report_md = '\n'.join(lines)

os.makedirs(os.path.dirname(outpath_md), exist_ok=True)
with open(outpath_md, 'w') as f:
    f.write(report_md)

with open(outpath_json, 'w') as f:
    json.dump(output, f, indent=2, ensure_ascii=False)

print(f"Rapport sauvegardé dans : {outpath_md}")
print(f"Données JSON sauvegardées dans : {outpath_json}")
PYEOF

Terminé.

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