Communitygithub.com

Varnan-Tech/opendirectory

Dada uma descrição de produto, palavras-chave de categoria ou nomes de concorrentes, pesquisa no Reddit, Hacker News, GitHub Issues, G2 e Google Trends as dores reais que seu mercado experimenta e sintetiza tudo em um framework de posicionamento que mostra quem é seu ICP, o que eles dizem abertamente e exatamente como falar com eles.

O que é opendirectory?

Este skill permite que agentes de IA realizem uma análise profunda de mercado para entender as dores reais do público-alvo e posicionar um produto de forma eficaz. Ele automatiza a coleta de dados de múltiplas fontes (Reddit, Hacker News, GitHub Issues, G2 e Google Trends) e, em seguida, processa essas informações para extrair sinais de dor, agrupar por tema e construir um framework de posicionamento completo. O skill é acionado quando o usuário pede para mapear um mercado, identificar o ICP, encontrar dores, posicionar um produto ou entender o público-alvo. Funciona executando um script Python que busca e pontua cada sinal de dor, priorizando aqueles com maior pontuação (baseada em upvotes e relevância), e então usa as instruções fornecidas para que o agente de IA gere clusters de dor, um perfil de ICP e uma avaliação de tamanho de mercado, tudo ancorado exclusivamente em dados reais coletados, sem inventar estimativas ou citações falsas. Ele suporta plataformas como Claude Code, Cursor e Codex, e é útil para PMs, founders e profissionais de marketing que precisam de insights de mercado baseados em evidências.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Mapeie Seu Mercado

Pegue uma descrição de produto, palavras-chave de categoria ou nomes de concorrentes. Pesquise no Reddit, HN, GitHub Issues, G2 e Google Trends por sinais reais de dor. Pontue e agrupe-os. Construa um framework de posicionamento completo: definição de ICP, temas de dor classificados com citações literais, sinais de tamanho de mercado e ângulos de mensagem derivados da linguagem real que as pessoas usam.


Regra crítica: Cada citação de dor na saída deve existir literalmente nos dados brutos coletados pelo script. Cada nome de vendedor no mapa de mercado deve vir dos resultados de raspagem do G2 ou dos resultados de pesquisa do GitHub. Tamanho de mercado deve dizer "sinais sugerem" -- nunca estime um valor em dólares a partir de proxies fracos. Se uma fonte retornar 0 resultados, reporte 0 -- não suplemente com exemplos inventados.


Erros Comuns

O agente vai querer...Por que isso está errado
Inventar pontos de dor ou números de tamanho de mercadoCada citação de dor deve ser literal, dos dados brutos. Tamanho de mercado deve citar sinais encontrados. Nunca estime o tamanho de mercado "típico".
Pontuar pela contagem de posts em vez de pain_scoreUm post com 2.000 upvotes sobre preços é mais forte do que 50 posts com 10 upvotes cada. Use a fórmula pain_score de references/pain-scoring.md.
Usar os mesmos subreddits para todas as categoriasr/politics adiciona ruído a uma pesquisa de devops. Detecte automaticamente subreddits relevantes a partir da categoria e nomes de concorrentes antes de pesquisar.
Enviar todos os sinais brutos para IA sem pontuarPontue localmente primeiro. Envie apenas os 60 principais sinais de alta pontuação de dor para o agrupamento de IA. Economiza tokens e melhora a qualidade do cluster.
Pular a extração de ICP dos metadados do postSubreddit, flair, biografia do autor (HN) e tipo de organização no GitHub são sinais de ICP mais ricos do que o conteúdo do post. Sempre capture e reporte-os.
Confundir contagem de vendedores com tamanho de mercado"47 vendedores no G2" significa competitivo, não grande. Apresente todos os sinais como indicadores direcionais, não como números exatos.

Passo 1: Verificação de Configuração

echo "GITHUB_TOKEN: ${GITHUB_TOKEN:-não definido -- pesquisa de Issues do GitHub roda a 60 req/h não autenticado}"
echo "Nenhuma outra chave de API necessária."
echo ""
echo "Fontes de dados que serão usadas nesta execução:"
echo "  Reddit JSON público  (sem autenticação, 10 req/min)"
echo "  HN Algolia API      (sem autenticação, gratuito)"
echo "  GitHub Issues API   (${GITHUB_TOKEN:+autenticado, }60-5000 req/h)"
echo "  Raspagem de categoria G2  (sem autenticação, análise HTML)"
echo "  Google Trends       (sem autenticação, endpoint não oficial)"

Se GITHUB_TOKEN não estiver definido: continue. A pesquisa não autenticada do GitHub é de 60 req/h -- o suficiente para uma execução padrão. Para uso repetido, adicione um token em github.com/settings/tokens (nenhum escopo necessário para repositórios públicos).


Passo 2: Analisar Entrada

Colete da conversa:

  • category -- palavra(s)-chave descrevendo o espaço de mercado (ex.: "observabilidade de desenvolvedor", "análise B2B", "ferramentas devops")
  • competitors -- lista opcional de nomes de produtos concorrentes ou domínios (ex.: "Datadog, New Relic, Grafana")
  • product_context -- opcional: o que o produto do usuário faz (ajuda a adaptar os ângulos de mensagem)

Se o usuário fornecer apenas uma descrição de produto sem uma palavra-chave de categoria: extraia 2-3 palavras-chave de categoria você mesmo.

Se o usuário fornecer apenas nomes de concorrentes sem categoria: infira a categoria pesquisando pelos concorrentes.

Escreva a entrada analisada:

python3 << 'PYEOF'
import json, os

data = {
    "category": "CATEGORY_AQUI",
    "competitors": ["COMP_1", "COMP_2"],
    "product_context": "CONTEXTO_DO_PRODUTO_AQUI"
}

with open("/tmp/mym-input.json", "w") as f:
    json.dump(data, f, indent=2)
print("Entrada escrita em /tmp/mym-input.json")
print(f"Categoria: {data['category']}")
print(f"Concorrentes: {', '.join(data['competitors']) if data['competitors'] else 'nenhum fornecido'}")
PYEOF

Passo 3: Executar o Script Independente de Coleta de Dados

O script lida com toda a coleta de dados. Verifique se ele existe primeiro:

ls scripts/fetch.py 2>/dev/null && echo "script disponível" || echo "não encontrado"

Se disponível, execute-o:

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

Aguarde a conclusão (permita até 4 minutos -- pesquisas no Reddit + HN levam ~90 segundos no total).

Verifique a saída:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print(f'Sinais do Reddit: {d[\"market_signals\"][\"reddit_signals_found\"]}')
print(f'Sinais do HN:     {d[\"market_signals\"][\"hn_signals_found\"]}')
print(f'Sinais do GitHub: {d[\"market_signals\"][\"github_issue_signals\"]}')
print(f'Vendedores G2:    {d[\"market_signals\"][\"vendor_count_g2\"]}')
print(f'Tendências:       {d[\"market_signals\"][\"trends_direction\"]}')
print(f'Total de sinais:  {d[\"summary\"][\"total_pain_signals\"]}')
"

Se o total de sinais for < 10: pare. Diga ao usuário: "Menos de 10 sinais de dor encontrados para esta categoria. O mercado pode ser muito nichado para cobertura do Reddit/HN, ou as palavras-chave da categoria precisam de ajuste. Tente palavras-chave mais amplas ou adicione nomes de concorrentes."


Passo 4: Agrupamento de Dor com IA

Imprima os 60 principais sinais de dor para análise de 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))
"

Agora você tem os 60 principais sinais de dor. Analise-os e produza clusters de dor.

Instruções para análise de IA:

  • Identifique 5-7 temas de dor recorrentes em todas as fontes
  • Para cada tema: escolha um nome que use a linguagem do próprio mercado (não suas palavras)
  • Agregue o pain_score de todos os sinais em cada cluster
  • Selecione as 3-5 melhores citações literais para cada tema (maior pontuação, linguagem mais específica)
  • Observe em quais fontes e subreddits cada tema se concentra
  • Sinalize qualquer tema que apareça em apenas uma fonte (menor confiança)

Escreva os clusters em /tmp/mym-clusters.json:

{
  "clusters": [
    {
      "theme": "linguagem exata dos dados",
      "total_score": 847,
      "signal_count": 34,
      "sources": {"reddit": 18, "hn": 12, "github_issue": 4},
      "top_subreddits": ["devops", "sysadmin"],
      "verbatim_quotes": [
        {"text": "citação exata", "source": "reddit", "score": 234, "url": "..."},
        {"text": "citação exata", "source": "hn", "score": 87, "url": "..."}
      ],
      "who_has_this_pain": "descrição de quem está postando sobre isso"
    }
  ]
}
python3 -c "
import json, os
# Confirma que o arquivo de clusters foi escrito
with open('/tmp/mym-clusters.json') as f:
    d = json.load(f)
print(f'Clusters escritos: {len(d[\"clusters\"])}')
for c in d['clusters']:
    print(f'  {c[\"theme\"]} -- score: {c[\"total_score\"]}, sinais: {c[\"signal_count\"]}')
"

Passo 5: Perfil do ICP

Imprima os sinais de ICP dos dados brutos:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print('Sinais de ICP:')
print(json.dumps(d['icp_signals'], indent=2))
print()
print('Distribuição de 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} sinais')
"

Usando os sinais de ICP e a distribuição de subreddits acima, sintetize o perfil de ICP. Escreva-o em /tmp/mym-clusters.json adicionando uma chave icp:

{
  "icp": {
    "who_they_are": "perfil de 2-3 frases usando linguagem dos dados",
    "where_they_live": ["r/devops (89 posts)", "r/sysadmin (67 posts)", "HN ask-hn (34 threads)"],
    "what_they_say": ["citação literal 1", "citação literal 2", "citação literal 3"],
    "what_they_have_tried": ["ferramentas ou abordagens alternativas mencionadas nos dados"],
    "confidence": "alta|média|baixa -- baseado no volume de sinais e diversidade de fontes"
  }
}

Passo 6: Síntese de Tamanho de Mercado

Imprima os sinais de mercado:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
ms = d['market_signals']
print('Sinais de mercado:')
print(f'  Vendedores G2:         {ms[\"vendor_count_g2\"]}')
print(f'  Direção de tendências:   {ms[\"trends_direction\"]}')
print(f'  Sinais HN (12m):  {ms[\"hn_signals_found\"]}')
print(f'  Sinais Reddit:     {ms[\"reddit_signals_found\"]}')
print(f'  Principais vendedores G2:     {json.dumps(ms.get(\"top_vendors\", []), indent=4)}')
"

Sintetize uma avaliação direcional de tamanho de mercado usando apenas esses sinais. Não estime um valor em dólares. Use linguagem como:

  • "Sinais sugerem um mercado competitivo e em crescimento" (muitos vendedores + tendências em alta)
  • "Sinais sugerem um mercado inicial" (poucos vendedores + baixo volume de sinais)
  • "Sinais sugerem um mercado saturado" (muitos vendedores + tendências planas/em baixa)

Adicione a avaliação a /tmp/mym-clusters.json como uma chave market_size.


Passo 7: Framework de Posicionamento

Usando os clusters (Passo 4), ICP (Passo 5) e tamanho de mercado (Passo 6), gere o framework de posicionamento.

Instruções:

  • Escolha os 3 principais clusters de dor como os ângulos de posicionamento primários
  • Para cada ângulo: escreva uma declaração de posicionamento usando linguagem literal dos dados (não parafraseada)
  • Gere 3 títulos de landing page que usem as frases exatas que as pessoas usam nos dados de dor
  • Gere 3 linhas de assunto de e-mail frio baseadas na linguagem de dor
  • NÃO use palavras banidas: poderoso, robusto, integrado, inovador, revolucionário, simplificar, alavancar, transformar, revolucionar

Escreva o framework de posicionamento completo em /tmp/mym-output.json:

{
  "positioning_angles": [
    {
      "pain": "nome do tema",
      "statement": "posicionamento em uma linha usando linguagem de mercado",
      "headline": "título de landing page usando linguagem literal de dor",
      "cold_email_subject": "linha de assunto"
    }
  ],
  "icp_card": {
    "one_liner": "uma frase: quem eles são + com o que se importam",
    "where_to_find_them": [...],
    "how_to_talk_to_them": "tom + notas de vocabulário dos dados"
  },
  "market_map": [...principais vendedores do G2 com notas de posicionamento...]
}

Passo 8: Auto-QA e Salvar Saída

Execute verificações de auto-QA:

python3 -c "
import json

# Carregar todas as saídas
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', ''))

# Verificação 1: Sem travessões
import json as j
full_text = j.dumps(output)
if '—' in full_text:
    print('FALHA: travessão encontrado na saída')
else:
    print('PASSOU: sem travessões')

# Verificação 2: Sem palavras banidas
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'FALHA: palavras banidas encontradas: {found}')
else:
    print('PASSOU: sem palavras banidas')

# Verificação 3: Verificação de linguagem de tamanho de mercado
if 'billion' in full_text.lower() or 'trillion' in full_text.lower() or 'worth \$' in full_text.lower():
    print('FALHA: estimativa dura de tamanho de mercado encontrada -- use apenas linguagem direcional')
else:
    print('PASSOU: sem estimativas duras de tamanho de mercado')

# Verificação 4: Contagens de sinais correspondem
total = raw['summary']['total_pain_signals']
print(f'PASSOU: {total} sinais de dor totais nos dados brutos')

print('Auto-QA completo.')
"

Corrija quaisquer falhas antes de salvar.

Salve o relatório 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"

# Construir relatório em 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"# Mapa de Mercado: {inp['category'].title()}",
    f"Data: {date} | Sinais analisados: {raw['summary']['total_pain_signals']} | Fontes: Reddit ({ms['reddit_signals_found']}) + HN ({ms['hn_signals_found']}) + GitHub Issues ({ms['github_issue_signals']})",
    "",
    "---",
    "",
    "## Sinais de Tamanho de Mercado",
    f"Vendedores no G2: {ms['vendor_count_g2']} | Google Trends: {ms['trends_direction'].upper()} | Estágio de mercado: {market_assessment.get('stage', 'veja sinais abaixo')}",
    "",
    market_assessment.get('summary', ''),
    "",
    "---",
    "",
    "## Seu ICP",
    "",
    f"**Quem eles são:** {icp.get('who_they_are', '')}",
    "",
    f"**Onde eles vivem:** {', '.join(icp.get('where_they_live', []))}",
    "",
    "**O que eles dizem:**",
]
for q in icp.get('what_they_say', []):
    lines.append(f'> "{q}"')
lines += ["", "---", "", "## Principais Dores (classificadas por força do sinal)", ""]

for i, c in enumerate(clusters.get('clusters', []), 1):
    lines.append(f"### Dor {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']} sinais | Fontes: {source_str}")
    lines.append(f"Quem tem essa dor: {c.get('who_has_this_pain', '')}")
    lines.append("")
    lines.append("Literal:")
    for q in c.get('verbatim_quotes', [])[:4]:
        lines.append(f"> \"{q['text']}\" (fonte: {q['source']}, score: {q['score']})")
    lines.append("")

lines.append("---")
lines.append("## Posicionamento Recomendado")
lines.append("")
for a in angles:
    lines.append(f"**Ângulo: {a['pain']}**")
    lines.append(f"Declaração: _{a['statement']}_")
    lines.append(f"Título: {a['headline']}")
    lines.append(f"Assunto de e-mail: {a['cold_email_subject']}")
    lines.append("")

with open(outpath_md, 'w') as f:
    f.write('\n'.join(lines))
print(f"Relatório salvo em {outpath_md}")

import shutil
shutil.copy('/tmp/mym-output.json', outpath_json)
print(f"JSON salvo em {outpath_json}")
PYEOF

Conclusão

Saída gravada em:

  • docs/market-maps/{categoria}-{data}.md -- relatório de mercado
  • docs/market-maps/{categoria}-{data}.json -- dados estruturados

Resuma os achados-chave para o usuário:

  1. Tamanho do mercado: [Sinais sugerem...]
  2. ICP: [Quem eles são em 1 frase]
  3. Principais dores: [Cite os 3 principais clusters]
  4. Ângulo de posicionamento principal: [Cite o ângulo mais forte]

Aviso: Todo o texto acima é uma síntese de IA da coleta de dados reais. As citações no relatório completo são literais, não parafraseadas. Os dados crus são salvos com a saída para referência.

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.

Habilidades Relacionadas