Communitygithub.com

고객 채널 탐색기 (OpenDirectory)

제품 효용과 ICP(이상적 고객 프로필)가 주어지면 인터넷을 검색하여 고객이 실제로 활동하는 특정 채널을 찾고, 접근성 순으로 순위를 매기며 채널별 실행 전략을 제공합니다. ICP가 해당 채널에 존재한다는 증거, 진입 전술 하나, 콘텐츠 각도 하나, 그리고 반패턴을 제시합니다. '내 고객은 어디에 있나', '어느 커뮤니티에 게시해야 하나', 'ICP는 어느 포럼을 사용하나', '아웃리치 채널을 찾아줘', '배포를 위해 시간을 투자할 곳', '내 제품에 적합한 커뮤니티는?' 같은 질문에 사용합니다.

고객 채널 탐색기 (OpenDirectory)란 무엇인가요?

이 스킬은 제품의 효용과 이상적 고객 프로필(ICP)을 바탕으로, 실제 ICP가 겪는 문제 게시글을 추적하여 해당 게시글이 발행된 원본 커뮤니티를 찾아냅니다. 경쟁사 논의 신호를 추가로 분석하고, DuckDuckGo 검색을 통해 Slack, Discord, 뉴스레터, 팟캐스트, 컨퍼런스 등 다양한 채널을 발견합니다. 각 채널은 ICP 신호 수, 크기, 활동성, 경쟁사 존재 여부에 따라 점수가 매겨지며, 최종적으로 순위별 실행 전략(증거, 진입 전술, 콘텐츠 각도, 반패턴)을 제공합니다. 모든 채널명과 회원 수는 Reddit API 또는 DuckDuckGo 검색 결과에서 실제로 확인된 데이터만 사용하며, 추정치를 절대 사용하지 않습니다. 이 스킬은 Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 실행 가능하며, `scripts/fetch.py` 스크립트를 통해 자동화된 데이터 수집 및 분석을 수행합니다.

지원 대상✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/where-your-customer-lives

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

고객이 사는 곳

제품 효용과 ICP가 주어지면 실제 ICP의 문제 게시글을 추적하여 원본 커뮤니티를 찾습니다. 경쟁사 논의 신호를 추가로 분석합니다. DuckDuckGo를 통해 Slack/Discord/뉴스레터/팟캐스트/컨퍼런스 채널을 발견합니다. ICP 신호 수, 크기, 활동성, 경쟁사 존재 여부로 각 채널에 점수를 매깁니다. 순위별 실행 전략 출력: 증거, 진입 전술, 콘텐츠 각도, 반패턴 -- 채널당 하나씩. 추측 없음. 신호 추적된 채널만 제공합니다.


중요 규칙: 출력의 모든 채널명은 이번 실행의 Reddit API 응답 또는 DuckDuckGo 검색 결과에 반드시 존재해야 합니다. 모든 회원 수는 about.json API 또는 검색 스니펫에서 가져와야 하며, 절대 추정해서는 안 됩니다. 모든 ICP 신호 수는 원시 데이터와 일치해야 합니다. 채널 유형이 0건을 반환하면 0으로 보고하고, 채널을 조작하지 마십시오.


일반적인 실수

에이전트가 하려는 행동왜 잘못된가?
일반적인 채널 추천 ("LinkedIn", "Twitter")모든 채널은 특정 이름, 회원 수, URL이 있어야 합니다. "LinkedIn 그룹: 엔터프라이즈 팀을 위한 DevOps (45K 회원)" -- 단순히 "LinkedIn"이 아닙니다.
모든 ICP에 동일한 채널 사용신호 추적은 ICP 특화적입니다. DevOps ICP와 Finance ICP는 완전히 다른 채널 목록을 생성합니다. ICP마다 스크립트를 새로 실행하십시오.
회원 수나 커뮤니티 이름 조작모든 채널명은 DuckDuckGo 결과 또는 Reddit API에서 가져와야 합니다. 모든 회원 수는 API 또는 검색 스니펫에서 가져와야 합니다. 사용할 수 없으면 "회원 수를 찾을 수 없음"이라고 작성하십시오.
경쟁사 레이어 건너뛰기경쟁사가 논의되는 곳 = ICP가 대안을 평가 중인 곳 = 가장 뜨거운 아웃리치 컨텍스트입니다. 사용자가 요청하지 않았더라도 항상 경쟁사 검색을 실행하십시오.
진입 전술을 제품 홍보로 작성"r/devops에 제품에 대해 게시하세요"는 진입 전술이 아닙니다. 진입 전술은 특정 스레드 유형, 콘텐츠 형식, 커뮤니티 규범을 명명합니다.
Reddit을 유일한 채널 유형으로 취급출력에는 최소 3가지 채널 유형이 포함되어야 합니다. Reddit만 발견된 경우, 중단하기 전에 DuckDuckGo에서 Slack/Discord/뉴스레터/컨퍼런스를 명시적으로 검색하십시오.

1단계: 설정 확인

echo "GITHUB_TOKEN: ${GITHUB_TOKEN:-설정되지 않음 -- 경쟁사 레이어가 미인증 시 60 req/hr로 실행됨}"
echo ""
echo "이번 실행에서 사용할 데이터 소스:"
echo "  Reddit public JSON   (인증 불필요, 신호 추적)"
echo "  Reddit about.json    (인증 불필요, 서브레딧 메타데이터)"
echo "  HN Algolia API       (인증 불필요, 신호 추적)"
echo "  DuckDuckGo HTML      (인증 불필요, 채널 발견)"
echo "  GitHub API           (${GITHUB_TOKEN:+인증됨, }경쟁사 강화 선택 사항)"

GITHUB_TOKEN이 설정되지 않은 경우: 계속 진행하십시오. 모든 핵심 채널 발견 기능은 토큰 없이 작동합니다.


2단계: ICP 분석

대화에서 다음을 수집합니다:

  • product -- 제품이 하는 일 (한 문장)
  • icp_role -- ICP가 누구인지 (예: "기술 공동 창업자", "시리즈 A의 DevOps 엔지니어")
  • icp_pain -- 그들의 주요 문제 (예: "고객 확보", "알림 피로")
  • category -- 시장 카테고리 키워드 (예: "스타트업 GTM 영업", "데브옵스 모니터링")
  • competitors -- 선택 사항인 경쟁사 이름 (예: "Clay, Apollo, HubSpot")

ICP 계단식 접근법:

  1. 사용자의 프롬프트에 product + icp_role + icp_pain이 포함된 경우: 직접 추출하여 진행합니다.
  2. 프롬프트가 부족한 경우 (카테고리 또는 제품명만 있는 경우): docs/icp.md에서 저장된 ICP 프로필을 확인합니다. 프롬프트 세부 정보와 병합합니다.
  3. 여전히 부족한 경우 (icp_role 또는 icp_pain 누락): 다음 3가지 질문을 한 번에 하나씩 합니다:
    • "귀하의 제품이 하는 일을 한 문장으로 말씀해 주시겠습니까?"
    • "이상적인 고객은 누구입니까? (역할, 회사 유형, 팀 규모)"
    • "귀하의 제품을 찾기 전 그들의 주요 문제는 무엇입니까?"
  4. 최종 ICP를 docs/icp.md에 저장하여 다른 스킬이 재사용할 수 있도록 합니다.

docs/icp.md에 이 제품이 아직 포함되지 않은 경우 ICP 파일을 저장합니다:

python3 << 'PYEOF'
import json, os

icp = {
    "product": "PRODUCT_HERE",
    "icp_role": "ICP_ROLE_HERE",
    "icp_pain": "ICP_PAIN_HERE",
    "competitors": ["COMP_1", "COMP_2"],
    "category": "CATEGORY_HERE"
}

os.makedirs("docs", exist_ok=True)
with open("/tmp/wcl-input.json", "w") as f:
    json.dump(icp, f, indent=2)

# docs/icp.md 업데이트
icp_md_path = "docs/icp.md"
new_block = f"""## {icp['product']}
- **ICP 역할:** {icp['icp_role']}
- **ICP 문제:** {icp['icp_pain']}
- **경쟁사:** {', '.join(icp['competitors']) if icp['competitors'] else '없음'}
- **카테고리:** {icp['category']}
"""
existing = open(icp_md_path).read() if os.path.exists(icp_md_path) else ""
if icp['product'] not in existing:
    with open(icp_md_path, "a") as f:
        f.write(new_block)
    print(f"ICP가 {icp_md_path}에 저장되었습니다")
else:
    print(f"ICP가 이미 {icp_md_path}에 있습니다")

print(f"제품: {icp['product']}")
print(f"ICP 역할: {icp['icp_role']}")
print(f"ICP 문제: {icp['icp_pain']}")
print(f"경쟁사: {', '.join(icp['competitors']) if icp['competitors'] else '없음'}")
PYEOF

3단계: 독립형 데이터 수집 스크립트 실행

스크립트가 있는지 확인합니다:

ls scripts/fetch.py 2>/dev/null && echo "스크립트 사용 가능" || echo "찾을 수 없음"

채널 발견 실행:

GITHUB_TOKEN="${GITHUB_TOKEN:-}" python3 scripts/fetch.py \
    "$(python3 -c "import json; d=json.load(open('/tmp/wcl-input.json')); print(d['category'])")" \
    --icp-role "$(python3 -c "import json; d=json.load(open('/tmp/wcl-input.json')); print(d['icp_role'])")" \
    --icp-pain "$(python3 -c "import json; d=json.load(open('/tmp/wcl-input.json')); print(d['icp_pain'])")" \
    --product "$(python3 -c "import json; d=json.load(open('/tmp/wcl-input.json')); print(d['product'])")" \
    --competitors "$(python3 -c "import json; d=json.load(open('/tmp/wcl-input.json')); print(','.join(d['competitors']))")" \
    --output /tmp/wcl-raw.json

완료될 때까지 기다립니다 (최대 5분 허용 -- Reddit + DuckDuckGo 검색에 약 120초 소요).

출력을 확인합니다:

python3 -c "
import json
with open('/tmp/wcl-raw.json') as f:
    d = json.load(f)
print(f'Reddit 게시글 발견: {d[\"reddit_posts_found\"]}')
print(f'HN 신호 발견:   {d[\"hn_signals_found\"]}')
print(f'발견된 채널: {d[\"summary\"][\"total_channels\"]}')
print(f'최우선 순위:        {len(d[\"summary\"][\"top_priority\"])}')
print(f'유형별:             {d[\"summary\"][\"by_type\"]}')
print(f'경쟁사 레이어 실행: {d[\"summary\"][\"competitor_layer_ran\"]}')
"

total_channels < 3인 경우: 사용자에게 "3개 미만의 채널이 발견되었습니다. ICP 설명이 Reddit/DDG 범위에 비해 너무 좁을 수 있습니다. 더 넓은 카테고리 키워드를 시도하거나 경쟁사 이름을 추가하여 경쟁사 레이어를 활성화하십시오."라고 알립니다. 그런 다음 중단하기 전에 더 넓은 카테고리 키워드로 한 번 재시도합니다.


4단계: 채널 요약 출력

원시 데이터를 로드하고 순위별 요약 테이블을 출력합니다:

python3 -c "
import json
with open('/tmp/wcl-raw.json') as f:
    d = json.load(f)
channels = d['channels_discovered']
print(f'발견된 채널: {len(channels)}')
print()
print(f'{'#':<4} {'채널':<35} {'유형':<14} {'회원 수':<12} {'ICP 신호':<13} {'점수':<8} 등급')
print('-' * 100)
for i, ch in enumerate(channels[:15], 1):
    members = ch.get('members', 0)
    m_str = f'{members//1000}K' if members >= 1000 else str(members) if members else '?'
    print(f'{i:<4} {ch[\"name\"]:<35} {ch[\"type\"]:<14} {m_str:<12} {ch.get(\"icp_signal_count\",0):<13} {ch.get(\"channel_score\",0):<8} {ch.get(\"tier\",\"\")}')
"

가장 높은 점수의 채널에서 상위 3개 증거 게시글을 출력합니다:

python3 -c "
import json
with open('/tmp/wcl-raw.json') as f:
    d = json.load(f)
channels = d['channels_discovered']
if channels:
    top = channels[0]
    print(f'최상위 채널: {top[\"name\"]}')
    print(f'증거 게시글:')
    for ep in top.get('evidence_posts', [])[:3]:
        print(f'  [{ep.get(\"score\",0):.0f}] {ep.get(\"title\",\"\")}')
        print(f'       {ep.get(\"url\",\"\")}')
"

5단계: AI 채널 강화

이제 원시 채널 데이터가 있습니다. 최우선 순위 및 높음 등급의 각 채널에 대해 실행 전략 항목을 생성합니다.

모든 채널 로드:

python3 -c "
import json
with open('/tmp/wcl-raw.json') as f:
    d = json.load(f)
top_channels = [ch for ch in d['channels_discovered'] if ch.get('tier') in ('top-priority', 'high')]
print(json.dumps(top_channels, indent=2))
"

위 각 채널에 대해 다음을 생성합니다:

who_is_here: 이 채널에 존재하는 특정 ICP 유형을 설명하는 2문장. 증거 게시글, 서브레딧 설명, ICP 프로필에서 도출합니다. "귀하의 타겟 고객"이라고 쓰지 마십시오 -- 구체적으로 작성하십시오. 예: "전담 SRE 팀 없이 인프라 스택을 소유한 50-500명 규모 회사의 DevOps 엔지니어. 그들은 온콜 번아웃, Kubernetes 확장, 클라우드 네이티브와 자체 호스팅 관찰 가능성 중 선택에 대해 게시합니다."

entry_tactic: 구체적이고 실행 가능한 하나의 진입 방법. 스레드 유형, 게시 형식, 커뮤니티 규범을 명명합니다. "커뮤니티에 참여하세요"가 아닙니다. 예: "매주 월요일 automoderator가 게시하는 '무엇을 작업 중이신가요?' 스레드를 찾으십시오. 해결한 기술적 문제를 3문장으로 답변하십시오 -- 무엇이 깨졌는지, 무엇을 시도했는지, 무엇이 효과가 있었는지. 제품 언급 금지. 독립형 콘텐츠를 게시하기 전에 먼저 평판을 쌓으십시오."

content_angle: 증거 게시글 제목과 점수에서 도출된, 이 특정 채널에서 가장 높은 참여를 얻는 콘텐츠 형식. 예: "기술 사후 분석이 제품 발표를 5:1로 능가합니다. 형식: '200K 사용자를 X에서 Y로 마이그레이션했습니다 -- 무엇이 깨졌고 그 이유는 무엇입니까?' 구체적인 숫자 + 실패 사례 = 가장 많은 추천."

anti_patterns: 이 커뮤니티에서 게시글이 삭제되거나 평판이 파괴되는 2-3가지 특정 행동. 서브레딧 규칙(설명에 있는 경우)과 증거 게시글 패턴에서 도출합니다. 예: ["프로모션이 아닌 스레드에 제품 링크 게시 -- 몇 시간 내에 모더레이터가 제거함", "구체적인 맥락 없이 '어떤 도구를 사용하시나요?'라고 묻기 -- 시장 조사 수확으로 플래그 지정됨"]

강화된 실행 전략을 /tmp/wcl-channels.json에 작성합니다:

{
  "playbook": [
    {
      "channel": "r/devops",
      "evidence": "여기서 34개의 ICP 신호 추적됨, 평균 문제 점수 180",
      "who_is_here": "...",
      "entry_tactic": "...",
      "content_angle": "...",
      "anti_patterns": ["...", "..."]
    }
  ]
}
python3 -c "
import json
with open('/tmp/wcl-channels.json') as f:
    d = json.load(f)
print(f'실행 전략 항목: {len(d[\"playbook\"])}')
for p in d['playbook']:
    print(f'  {p[\"channel\"]}')
"

6단계: 전체 순위 출력 생성

완전한 순위별 실행 전략을 /tmp/wcl-output.json에 작성합니다:

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

with open('/tmp/wcl-input.json') as f:
    inp = json.load(f)
with open('/tmp/wcl-raw.json') as f:
    raw = json.load(f)
with open('/tmp/wcl-channels.json') as f:
    enriched = json.load(f)

playbook_by_channel = {p['channel']: p for p in enriched['playbook']}
channels = raw['channels_discovered']

output = {
    "date": raw['date'],
    "product": inp['product'],
    "icp_role": inp['icp_role'],
    "icp_pain": inp['icp_pain'],
    "competitors": inp.get('competitors', []),
    "total_channels": raw['summary']['total_channels'],
    "channels": []
}

for ch in channels:
    name = ch['name']
    playbook = playbook_by_channel.get(name, {})
    output['channels'].append({
        "rank": channels.index(ch) + 1,
        "name": name,
        "type": ch['type'],
        "url": ch['url'],
        "members": ch.get('members', 0),
        "active_users": ch.get('active_users', 0),
        "icp_signal_count": ch.get('icp_signal_count', 0),
        "competitor_mentions": ch.get('competitor_mentions', 0),
        "channel_score": ch.get('channel_score', 0),
        "tier": ch.get('tier', ''),
        "entry_type": ch.get('entry_type', 'open'),
        "evidence_posts": ch.get('evidence_posts', []),
        "who_is_here": playbook.get('who_is_here', ''),
        "entry_tactic": playbook.get('entry_tactic', ''),
        "content_angle": playbook.get('content_angle', ''),
        "anti_patterns": playbook.get('anti_patterns', []),
    })

with open('/tmp/wcl-output.json', 'w') as f:
    json.dump(output, f, indent=2)

print(f"출력이 /tmp/wcl-output.json에 작성되었습니다")
print(f"전체 채널: {len(output['channels'])}")
PYEOF

7단계: 자체 QA

python3 -c "
import json

with open('/tmp/wcl-raw.json') as f:
    raw = json.load(f)
with open('/tmp/wcl-output.json') as f:
    output = json.load(f)

full_text = json.dumps(output)
raw_channel_names = {ch['name'].lower() for ch in raw['channels_discovered']}
passes = 0
fails = 0

# 검사 1: em 대시 없음
if chr(8212) in full_text:
    print('실패: 출력에 em 대시 발견 -- 하이픈으로 대체하십시오')
    fails += 1
else:
    print('통과: em 대시 없음')
    passes += 1

# 검사 2: 금지어 없음
banned = ['powerful', 'robust', 'seamless', 'innovative', 'game-changing',
          'streamline', 'leverage', 'transform', 'revolutionize']
found = [w for w in banned if w.lower() in full_text.lower()]
if found:
    print(f'실패: 금지어 발견: {found}')
    fails += 1
else:
    print('통과: 금지어 없음')
    passes += 1

# 검사 3: 최소 3개 채널 유형
types = {ch['type'] for ch in output['channels']}
if len(types) < 3:
    print(f'실패: 출력에 {len(types)}개 채널 유형만 있음: {types}')
    fails += 1
else:
    print(f'통과: {len(types)}개 채널 유형: {types}')
    passes += 1

# 검사 4: 모든 채널명이 원시 데이터에 존재
for ch in output['channels']:
    if ch['name'].lower() not in raw_channel_names:
        print(f'실패: 원시 데이터에 없는 채널: {ch[\"name\"]}')
        fails += 1

if fails == 0:
    print('통과: 모든 채널명이 원시 데이터에서 확인됨')
    passes += 1

# 검사 5: 일반적인 진입 전술 없음
generic_phrases = ['engage with the community', 'post about your product', 'share your content']
for ch in output['channels']:
    tactic = ch.get('entry_tactic', '').lower()
    for phrase in generic_phrases:
        if phrase in tactic:
            print(f'실패: 일반적인 진입 전술 발견: {ch[\"name\"]} - {phrase}')
            fails += 1

if fails == 0:
    print('통과: 일반적인 진입 전술 없음')
    passes += 1

print(f'\n{passes} 통과, {fails} 실패')
"

결과를 표시합니다:

cat /tmp/wcl-output.json

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.

관련 스킬