Communitygithub.com

Varnan-Tech/opendirectory

Evalúa candidatos de dominios vencidos según un nicho objetivo, los puntúa por relevancia temática, nivel de actividad histórica y limpieza del historial, y genera una lista corta clasificada con explicaciones razonadas y banderas de riesgo.

¿Qué es opendirectory?

Esta habilidad para agentes de IA automatiza la evaluación de oportunidades de dominios vencidos, ayudando a desarrolladores, SEOs y emprendedores a identificar activos digitales infrautilizados. Analiza dominios candidatos frente a un nicho específico (como 'herramientas para desarrolladores' o 'ciberseguridad') mediante métricas de relevancia temática, actividad histórica, calidad del contenido archivado, limpieza del historial e idoneidad para redirección. El proceso comienza verificando las herramientas necesarias (curl y Python) y detecta si se ha configurado una clave API de LLM (Gemini) para puntuación mejorada. Luego recolecta señales de fuentes públicas gratuitas: snapshots de Wayback Machine (historial de capturas y títulos de páginas), consultas RDAP para estado de registro y análisis del nombre del dominio. Si la clave API está configurada, realiza una evaluación contextual de relevancia de nicho usando la API de Gemini. Finalmente, calcula una puntuación de oportunidad compuesta (0-100) y aplica banderas de riesgo según las políticas definidas en los archivos de referencia. La habilidad sigue principios de diseño críticos: siempre proporciona tanto una justificación positiva como una advertencia de riesgo, es conservadora por defecto ante señales contradictorias y tiene una política anti-abuso que prohíbe redirecciones no relacionadas con el nicho original. Está diseñada para plataformas de agentes de IA como Claude Code, Cursor y Codex, y requiere que el usuario proporcione una lista de dominios candidatos o use un conjunto de demostración integrado.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Buscador de Oportunidades de Dominios Vencidos

Evalúa candidatos de dominios vencidos para un nicho específico. Puntúalos según adecuación temática, nivel de actividad histórica, limpieza del historial e idoneidad para redirección. Genera una lista corta conservadora y explicable para revisión humana.


Regla crítica: Cada recomendación debe incluir TANTO una justificación positiva (why_selected) COMO una justificación de precaución (why_risky). Nunca generes una puntuación simple sin explicación.

Regla de conservadurismo por defecto: Cuando las señales son incompletas o contradictorias, reduce el nivel de confianza. No muestres candidatos ambiguos como oportunidades fuertes. Los datos faltantes reducen la confianza, nunca la inflan.

Regla anti-abuso: Nunca fomentes redirecciones no relacionadas, construcción de PBNs o reutilización de dominios donde el tema histórico no coincida con el nicho objetivo. Lee references/guardrails.md para la política anti-abuso completa.


Paso 1: Verificación de Configuración

Verifica el entorno antes de hacer cualquier otra cosa.

Asegúrate de que curl y python3 (o python) estén disponibles:

curl --version > /dev/null 2>&1 && echo "curl: disponible" || echo "curl: FALTA"
python3 --version 2>/dev/null || python --version 2>/dev/null || echo "python: FALTA"

Verifica si hay una clave API de LLM opcional para puntuación mejorada de relevancia de nicho:

echo "LLM_API_KEY: ${LLM_API_KEY:+configurada}"

Si falta curl o python: Detente. Indica al usuario: "Esta habilidad requiere curl y Python 3.10+. Por favor, instálalos e inténtalo de nuevo."

Si LLM_API_KEY no está configurada: Continúa. La habilidad usará solo puntuación basada en reglas (coincidencia de cadenas de dominio, análisis de títulos de Wayback, superposición de palabras clave). Notifica al usuario: "Ejecutando en modo solo basado en reglas. Configura LLM_API_KEY para puntuación mejorada de relevancia de nicho."

Si LLM_API_KEY está configurada: La habilidad usará puntuación mejorada con LLM para el análisis de relevancia temática. Esto proporciona una evaluación contextual más profunda de la adecuación al nicho.

QA: Indica el modo de puntuación (mejorado con LLM o solo basado en reglas) y confirma que las herramientas están disponibles.


Paso 2: Recopilación de Entradas

Recopila las entradas requeridas y opcionales del usuario.

Requeridas:

  • target_niche (cadena): El nicho central a evaluar. Ejemplos: "herramientas para desarrolladores", "SaaS de IA", "ciberseguridad", "fintech".

Opcionales (preguntar solo si no se proporcionan):

  • seed_keywords (arreglo): Palabras clave para refinar la coincidencia temática. Si no se proporcionan, extrae automáticamente 3–5 palabras clave del nombre del nicho.
  • candidate_domains (arreglo): Dominios específicos a evaluar. Si no se proporcionan, solicítalos al usuario.
  • discovery_source (cadena): De dónde provienen los candidatos — manual, expireddomains-net, external-feed.
  • min_snapshots (entero): Umbral mínimo de snapshots históricos. Valor por defecto: 10.
  • max_risk_level (cadena): bajo, medio o alto. Controla cuán agresivamente se filtran los candidatos riesgosos. Valor por defecto: medio.
  • intended_use (cadena): reconstruir, redirigir o cualquiera. Valor por defecto: cualquiera.

Si no se proporcionan candidate_domains: Pregunta: "Por favor, proporciona una lista de candidatos de dominios vencidos a evaluar. Puedes:

  1. Pegar nombres de dominio (uno por línea o separados por comas)
  2. Proporcionar la ruta de un archivo de texto con un dominio por línea
  3. Decir 'ejemplo' para ejecutar con un conjunto de demostración integrado para el nicho 'herramientas para desarrolladores'"

Si el usuario dice 'ejemplo': Usa este conjunto de demostración:

devtoolsweekly.com
codeshipnews.io
stackforgeapp.com
quickseorank.net
bestcheaphosting247.com
cloudbuildpro.dev
reactwidgetlib.com
megadealsshop.xyz

Después de recopilar todas las entradas, confirma: "Nicho objetivo: [nicho]. Evaluando [N] dominios candidatos. Modo de puntuación: [modo]. Uso previsto: [uso]."


Paso 3: Normalización de Candidatos

Limpia y valida la lista de candidatos antes de puntuar.

python3 -c "
import sys, re

domains = '''LISTA_DE_CANDIDATOS_AQUI'''.strip().split('\n')
seen = set()
valid = []
invalid = []

for d in domains:
    d = d.strip().lower()
    # Eliminar protocolos y rutas
    d = re.sub(r'^https?://', '', d)
    d = d.split('/')[0]
    d = d.strip('.')

    if not d:
        continue

    # Validación básica de TLD
    if '.' not in d or len(d) < 4:
        invalid.append(d)
        continue

    # Deduplicar
    if d in seen:
        continue
    seen.add(d)
    valid.append(d)

print(f'Candidatos válidos: {len(valid)}')
print(f'Eliminados (inválidos/duplicados): {len(invalid)}')
for v in valid:
    print(f'  ✓ {v}')
for i in invalid:
    print(f'  ✗ {i} (formato inválido)')
"

Reemplaza LISTA_DE_CANDIDATOS_AQUI con la lista real de dominios del Paso 2.

Indica: "[N] candidatos válidos después de la normalización. [M] eliminados (inválidos/duplicados)."

Si quedan 0 candidatos válidos, detente e indica al usuario: "No se encontraron candidatos de dominio válidos. Por favor, proporciona nombres de dominio en el formato 'ejemplo.com'."


Paso 4: Recopilación de Señales

Para cada candidato válido, recopila señales de fuentes públicas gratuitas. Ejecuta estas verificaciones secuencialmente por dominio.

4a: API Wayback CDX — Snapshots del Historial

Consulta la Wayback Machine para todos los snapshots históricos. Usamos limit=100000 y los parámetros from/to se omiten intencionalmente para que CDX devuelva snapshots de toda la vida del dominio. Los resultados se ordenan ascendentemente por marca de tiempo (más antiguos primero) por lo que first_capture y last_capture son precisos:

curl -s "https://web.archive.org/cdx/search/cdx?url=DOMINIO_AQUI&output=json&fl=timestamp,statuscode&collapse=timestamp:6&limit=100000" \
  | python3 -c "
import sys, json

try:
    data = json.load(sys.stdin)
    if len(data) <= 1:
        print(json.dumps({'domain': 'DOMINIO_AQUI', 'snapshots': 0, 'first_capture': None, 'last_capture': None, 'status_codes': {}, 'years_active': 0}))
    else:
        rows = data[1:]  # saltar fila de encabezado
        timestamps = [r[0] for r in rows]  # ya ascendentes (más antiguos primero)
        statuses = [r[1] for r in rows]
        status_counts = {}
        for s in statuses:
            status_counts[s] = status_counts.get(s, 0) + 1
        first_year = int(timestamps[0][:4])
        last_year = int(timestamps[-1][:4])
        print(json.dumps({
            'domain': 'DOMINIO_AQUI',
            'snapshots': len(rows),
            'first_capture': timestamps[0],
            'last_capture': timestamps[-1],
            'status_codes': status_counts,
            'years_active': last_year - first_year + 1
        }))
except:
    print(json.dumps({'domain': 'DOMINIO_AQUI', 'snapshots': 0, 'error': 'wayback_api_failed'}))
"

Límite de tasa: Espera 2 segundos entre llamadas a la API de Wayback para ser cortés con el servicio.

4b: Muestreo de Contenido de Wayback — Títulos de Páginas Históricas

Para candidatos con > 0 snapshots, obtén el snapshot más reciente para extraer el título de la página (usado para la puntuación de relevancia temática):

curl -s -L "https://web.archive.org/web/MARCA_DE_TIEMPO_MAS_RECIENTE/http://DOMINIO_AQUI" \
  | python3 -c "
import sys, re
html = sys.stdin.read()[:50000]
title_match = re.search(r'<title[^>]*>(.*?)</title>', html, re.IGNORECASE | re.DOTALL)
title = title_match.group(1).strip() if title_match else 'no se encontró título'
# Extraer meta description también
meta_match = re.search(r'<meta[^>]*name=[\"']description[\"'][^>]*content=[\"'](.*?)[\"']', html, re.IGNORECASE)
desc = meta_match.group(1).strip() if meta_match else 'no se encontró descripción'
print(f'Título: {title}')
print(f'Descripción: {desc}')
"

Reemplaza MARCA_DE_TIEMPO_MAS_RECIENTE con la marca de tiempo más reciente del Paso 4a.

4c: Consulta RDAP — Estado de Registro

Usa el estándar RDAP basado en HTTP multiplataforma (reemplaza WHOIS dependiente del SO). Un HTTP 404 de RDAP significa que el dominio no está registrado (es decir, está genuinamente disponible o no rastreado) — eso es distinto de un fallo de red. Maneja ambos casos explícitamente:

python3 -c "
import urllib.request, urllib.error, json

domain = 'DOMINIO_AQUI'
try:
    req = urllib.request.Request(
        f'https://rdap.org/domain/{domain}',
        headers={'User-Agent': 'Mozilla/5.0'}
    )
    with urllib.request.urlopen(req, timeout=10) as response:
        data = json.loads(response.read().decode())

    registrar = 'desconocido'
    created = 'desconocido'

    for entity in data.get('entities', []):
        if 'registrar' in entity.get('roles', []):
            try:
                registrar = entity.get('vcardArray', [[]])[1][0][3]
            except Exception:
                pass

    for event in data.get('events', []):
        if event.get('eventAction') == 'registration':
            created = event.get('eventDate', 'desconocido')

    print(json.dumps({
        'domain': domain,
        'status': 'registered',
        'registrar': registrar,
        'created': created
    }))
except urllib.error.HTTPError as e:
    if e.code == 404:
        # El dominio no tiene objeto RDAP — probablemente no registrado o no cubierto por RDAP
        print(json.dumps({'domain': domain, 'status': 'unregistered_or_no_rdap_object'}))
    else:
        print(json.dumps({'domain': domain, 'error': f'rdap_http_error_{e.code}'}))
except Exception:
    print(json.dumps({'domain': domain, 'error': 'rdap_lookup_failed'}))
"

4d: Análisis de Cadena de Dominio — Coincidencia de Palabras Clave

Puntúa la superposición de palabras clave entre el nombre del dominio y el nicho objetivo / palabras clave semilla:

python3 -c "
import re, json

domain = 'DOMINIO_AQUI'
niche = 'NICHO_AQUI'
seeds = SEMILLAS_JSON_AQUI  # ej., ['devops', 'ci/cd', 'editor de código']

# Extraer palabras del dominio
domain_base = domain.rsplit('.', 1)[0]  # eliminar TLD
domain_words = re.split(r'[-_.]', domain_base.lower())

# Verificar palabras del nicho
niche_words = niche.lower().split()
all_keywords = set(niche_words + [s.lower() for s in seeds])

matches = [w for w in domain_words if any(kw in w or w in kw for kw in all_keywords)]
match_ratio = len(matches) / max(len(domain_words), 1)

print(json.dumps({
    'domain': domain,
    'domain_words': domain_words,
    'keyword_matches': matches,
    'match_ratio': round(match_ratio, 2)
}))
"

4e: Evaluación de Relevancia de Nicho con LLM Gemini (si LLM_API_KEY está configurada)

Si la clave API de LLM está configurada, procesa por lotes todos los candidatos con sus señales recopiladas y solicita una evaluación contextual de relevancia de nicho.

Nota: El formato de solicitud/respuesta a continuación usa la API de Gemini (formato generateContent). No es compatible con endpoints estilo OpenAI sin modificación. Si usas un proveedor diferente, debes adaptar el cuerpo JSON y el análisis de la respuesta.

cat > /tmp/domain-relevance-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "Eres un analista de investigación SEO. Para cada candidato de dominio vencido proporcionado, evalúa su relevancia temática para el nicho objetivo especificado. Considera el nombre del dominio, el título de la página histórica y la meta descripción. Para cada dominio, genera un objeto JSON con: domain (cadena), relevance_score (entero 1-10), relevance_rationale (una oración explicando la puntuación), redirect_plausibility (entero 1-10), redirect_rationale (una oración). Genera solo un arreglo JSON. Sin comentarios antes o después."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "SEÑALES_DEL_DOMINIO_Y_CONTEXTO_DEL_NICHO_AQUI"
    }]
  }],
  "generationConfig": {
    "temperature": 0.2,
    "maxOutputTokens": 2048
  }
}
ENDJSON

Reemplaza SEÑALES_DEL_DOMINIO_Y_CONTEXTO_DEL_NICHO_AQUI con:

  • El nicho objetivo y las palabras clave semilla
  • Para cada candidato: nombre del dominio, título histórico, descripción, datos de coincidencia de palabras clave

Envía la solicitud a la API de Gemini:

curl -s -X POST \
  "${LLM_API_ENDPOINT:-https://generativelanguage.googleapis.com/v1beta}/models/${LLM_MODEL:-gemini-2.0-flash}:generateContent?key=$LLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/domain-relevance-request.json \
  | python3 -c "
import sys, json
try:
    d = json.load(sys.stdin)
    text = d['candidates'][0]['content']['parts'][0]['text']
    print(text)
except (KeyError, IndexError, json.JSONDecodeError) as e:
    print(json.dumps({'error': 'llm_response_parse_failed', 'detail': str(e)}))
"

Si la llamada al LLM o el análisis de la respuesta falla, registra el error y continúa con la puntuación solo basada en reglas. No detengas el flujo de trabajo.

Después de toda la recopilación de señales, indica: "Recopilación de señales completa para [N] candidatos. [M] aciertos de Wayback, [K] consultas RDAP exitosas."


Paso 5: Puntuación y Clasificación

Lee references/scoring-model.md para el marco de puntuación completo.

Para cada candidato, calcula puntuaciones en las 6 dimensiones:

  1. Relevancia Temática (0–30): Combina la relación de coincidencia de palabras clave del dominio, el análisis de título/descripción histórica y la puntuación de relevancia del LLM (si está disponible). Sin LLM: usa relación de coincidencia de palabras clave × 15 + superposición de palabras clave del título × 15. Con LLM: usa relevance_score del LLM × 3.

  2. Nivel de Actividad Histórica (0–25): Basado en la diversidad y frecuencia de snapshots de Wayback. Más snapshots capturados consistentemente a lo largo de múltiples años indica mayor actividad sostenida y legitimidad inferida.

  3. Calidad del Contenido Histórico (0–15): Derivado del análisis del título de la página histórica y la meta descripción, verificando frases naturales versus relleno de palabras clave. Sin LLM: puntuación base de 8/15 ajustada por densidad de coincidencias exactas.

  4. Limpieza del Historial (0–15): Basado en la cantidad de snapshots de Wayback, años activos, consistencia del código de estado y ausencia de indicadores de página de estacionamiento.

  5. Idoneidad para Redirección (0–10): Basado en la continuidad temática entre el contenido histórico y el nicho objetivo. Usa la puntuación de redirect_plausibility del LLM si está disponible; de lo contrario, usa la relación de superposición de palabras clave.

  6. Completitud de Señales (0–5): Cuenta cuántas fuentes de datos devolvieron datos utilizables (Wayback, RDAP, análisis de dominio, LLM si está configurado).

Calcula:

  • opportunity_score = suma de todas las puntuaciones de dimensión (0–100)
  • confidence = basado en cuántas dimensiones tienen datos sólidos (ver scoring-model.md)
  • recommended_action = basado en puntuación + confianza + banderas de riesgo (ver Paso 6)

Paso 6: Marcado de Riesgo y Filtrado

Lee references/risk-flags.md para las definiciones completas de banderas.

Aplica banderas de riesgo a cada candidato:

VerificaciónBanda Aplicada
Superposición de tema histórico < 30% con el nichotopic_mismatch
Menos de 5 snapshots en Waybacklow_history_activity
Estado del dominio: registrado (no vencido/no disponible)still_registered
Alta proporción de errores HTTP 4xx/5xx en el historialhttp_error_history
Nombre del dominio sugiere exact match de baja calidad (ej., compra-barato-ahora.com)low_quality_domain_pattern
Contenido histórico parece genérico o de estacionamientoparked_or_generic_content
Fecha de creación del RDAP es muy recienterecent_registration
Indicaciones de que el dominio se usó para spam o malwareabuse_history_suspected
Puntuación de relevancia del LLM baja`low_llm_relevance
Sin datos históricos en absolutono_historical_data

Paso 7: Salida de la Lista Corta

Genera una tabla de salida que contenga estos campos para cada candidato:

DominioPuntuación de OportunidadConfianzaAcción RecomendadaBanderas de RiesgoPor qué fue seleccionadoPor qué es riesgoso
ejemplo.com78mediaconsiderar_para_reconstruirtopic_mismatchFuerte coincidencia de palabras clave en el nombre del dominio; título histórico relevante para el nicho de herramientas para desarrolladores.El historial de contenido muestra solo un 40% de superposición con el nicho; posible redirección solo parcialmente relevante.

Campos de Acción Recomendada:

  • fuerte_oportunidad — puntuación alta, baja riesgo, proceder
  • considerar_para_reconstruir — puntuación media-alta, riesgo medio, adecuado para reconstrucción del sitio
  • considerar_para_redirigir — puntuación media, riesgo bajo-medio, adecuado para redirección 301
  • riesgoso_descartar — puntuación baja o alto riesgo, no recomendado
  • datos_insuficientes — muy poca información para decidir

Explicación de Confianza:

  • alta: Señales fuertes de múltiples fuentes (Wayback, RDAP, LLM)
  • media: Datos moderados de 1-2 fuentes
  • baja: Datos mínimos o contradictorios

Después de la tabla de salida, proporciona un breve resumen narrativo destacando los mejores candidatos y riesgos notables.

Siempre termina con: "Esta lista corta es para revisión humana. Verifica cualquier hallazgo confidente antes de tomar decisiones de inversión."


Referencias (solo lectura)

Todos los archivos de referencia se encuentran en ./references/ en el repositorio raíz:

  • scoring-model.md — marco de puntuación completo
  • risk-flags.md — definiciones de todas las banderas de riesgo
  • guardrails.md — política anti-abuso y pautas de uso ético
  • playbook-scenarios.md — escenarios de ejemplo con salidas esperadas

Lee estos antes de ejecutar la puntuación final para una comprensión completa de las reglas.


Modo de Depuración

Si se establece DEBUG=true, imprime todas las señales crudas para cada candidato y los puntajes intermedios de dimensión antes de la salida final de la lista corta. Usa este modo solo para solucionar problemas o comprender puntuaciones inesperadas:

DEBUG=true ./run-opendirectory --niche "herramientas para desarrolladores" --example

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

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

Creates professionally designed B2B SaaS e-books in HTML + CSS, exported as print-ready PDF. 3–10 pages, 9 style presets, 11 page layout types. Trigger when user says "create an ebook", "design a lead magnet", "make a PDF guide", "build a gated content piece", "write a B2B ebook", "design a white paper", "create a nurture asset", or "make a PDF report".

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 relacionados