Communitygithub.com

Varnan-Tech/opendirectory

Erzeugt einen energiegeladenen Sizzle-Reel- oder Hype-Video (MP4) aus Marken-Assets und Kernbotschaften. Schneller Montage-Stil mit dynamischen Schnitten, fetten Texteinblendungen und optionaler Musik.

Was ist opendirectory?

Diese Fähigkeit erstellt einen professionellen Sizzle Reel (auch Hype-Video genannt) aus Marken-Assets und Kernbotschaften. Das Video besteht aus vier Abschnitten: Cold Open (Spannungsaufbau ohne Markennennung), Build (schnelle Abfolge der Kernbotschaften), Peak (Höhepunkt mit der stärksten Botschaft) und Land (Markenname + Slogan + CTA). Es gibt vier Ton-Voreinstellungen (energetisch, filmisch, emotional, professionell), und bei Musik wird der Schnitt automatisch auf den Beat synchronisiert. Die Fähigkeit läuft komplett lokal und kostenlos – keine Abhängigkeiten von KI-Video-APIs wie Runway oder Pika. Der technische Unterbau heißt HyperFrames und kombiniert GSAP-Animationen, einen Headless-Chromium-Browser und FFmpeg zur MP4-Erzeugung. Voraussetzung sind Node.js ≥22 und FFmpeg. Der Workflow ist strikt: erst Schlüsselbotschaften festlegen, dann HyperFrames installieren, HTML-Komposition mit präzisen Timings schreiben, und abschließend rendern. Wichtige Regeln sind: keine `Math.random()` (deterministisch), alle Animations-Elemente brauchen `class="clip"` und präzise `data-start`/`data-duration`-Attribute, und die Marke darf erst in der Land-Sektion erscheinen.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vid-sizzle-reel

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

vid-sizzle-reel

Erzeugt einen energiegeladenen Sizzle Reel oder ein Hype-Video aus Marken-Assets und Kernbotschaften. Pipeline: HyperFrames HTML-Komposition (GSAP-Timelines) → Headless Chromium → FFmpeg H.264 MP4. Kein Runway. Kein Pika. Keine KI-Video-APIs. Keine Laufzeitkosten außer Node.js + FFmpeg.

Abgrenzung zu vid-product-launch:

  • vid-product-launch erzählt eine narrative Geschichte – eine aufbauende Enthüllung, fünf Abschnitte, Spannungsbogen.
  • vid-sizzle-reel erzeugt Energie und Begeisterung – schnelle Schnitte, Musik-zentriert, keine einzelne Storyline.

Kritische Regeln (vor jeder Erstellung lesen)

  1. Schreibe die Kernbotschaften selbst – oder bitte den Benutzer, sie zu schreiben. Das sind die genauen Phrasen, die auf dem Bildschirm erscheinen. „Die KI wird das schon irgendwie regeln” produziert Füllmaterial. 3-5 prägnante Zeilen sind der gesamte Inhalt eines Sizzle Reels.

  2. Der Markenname erscheint NUR in der Land-Sektion. Cold Open und Build erzeugen Spannung, ohne die Marke zu nennen. Die Land-Sektion ist der Höhepunkt.

  3. Deklariere das Rhythmusmuster in einem Kommentar am Anfang des Skripts, bevor du HTML schreibst. Format: // RHYTHM: flash-sequence | Cold[0-5s]: stat | Build[5-40s]: msg(1.5s)|flash|... | Peak[40-55s]: ... | Land[55-60s]: logo+CTA. Jede Timing-Entscheidung wird daran gemessen.

  4. Erstelle zuerst den Endzustand des Layouts in CSS – noch kein GSAP. Positioniere jedes Element in seinem sichtbarsten Moment im statischen CSS. Füge dann GSAP-Entrances mit gsap.from() und Exits mit gsap.to() hinzu. Positioniere niemals im animierten Startzustand.

  5. class="clip" auf jedem zeitgesteuerten Element. Von HyperFrames benötigt. Ohne dies ist das Element für den Player unsichtbar.

  6. data-start, data-duration, data-track-index auf jedem Clip. Keine Ausnahmen. Clips auf demselben Track dürfen sich nicht überlappen – verwende verschiedene Track-Indizes.

  7. Kein Math.random(). HyperFrames benötigt deterministische Kompositionen. Verwende einen seed-basierten PRNG (mulberry32) für alle Pseudo-Zufallswerte.

  8. Alle GSAP-Timelines starten mit { paused: true } und registrieren sich unter window.__timelines["comp-id"]. Der HyperFrames-Player steuert die Wiedergabe – rufe niemals tl.play() auf.

  9. Verwende niemals position: absolute auf .scene-content-Containern. Nutze width:100%; height:100%; padding:Npx; display:flex. Behalte position:absolute ausschließlich für dekorative Elemente vor.

  10. Musik: Separat <audio>-Element mit data-track-index. Das Video muss muted playsinline sein. Platziere Audio niemals in einem <video>-Element.

  11. Lies references/cut-patterns.md UND references/tone-presets.md, bevor du HTML generierst.

  12. Gib HTML niemals im Chat aus. Speichere es in einer Datei. Zeige nur die Zusammenfassung.


Schritt 1: Aufnahme

Erforderlich:

  • key_messages – 3-5 prägnante Zeilen, die auf dem Bildschirm erscheinen (der Benutzer muss diese schreiben)

Optionale Parameter und Standardwerte:

ParameterStandardBeschreibung
brand_assetskeineLogo-URL/-Pfad, Markenfarben (Hex), wichtige Screenshots
toneenergeticenergetic / cinematic / emotional / professional
musickeineDateipfad oder BPM/Genre-String (z. B. "128bpm electronic")
duration6030 / 60 / 90 Sekunden
aspect_ratio9:169:16 (1080x1920) / 16:9 (1920x1080)
cut_styleautofast (1-2s) / cinematic (3-5s) – auto leitet vom Ton ab
end_cardautoLogo + Slogan + CTA-URL für Land-Sektion

cut_style-Auto-Standards: energetic → fast; professional → fast (2s); cinematic → cinematic; emotional → mixed

Wenn key_messages fehlt, frage genau so:

„Um den Sizzle Reel zu generieren, brauche ich deine Kernbotschaften – die genauen Phrasen, die auf dem Bildschirm erscheinen. Gib mir 3-5 prägnante Zeilen. Das ist das Wichtigste, was du für dieses Video schreibst.

Beispiele: ‚Genutzt von 500+ Wachstumsteams‘ / ‚Von Tagen zu Minuten‘ / ‚Funktioniert mit Claude, Codex, Gemini‘

Ebenfalls hilfreich: Ton (energetic/cinematic/emotional/professional), Dauer (30/60/90s), Markenfarben oder Logo-URL."

Wenn key_messages vorhanden sind → gehe sofort zu Schritt 2.


Schritt 2: HyperFrames installieren

HyperFrames-Fähigkeiten installieren (nur beim ersten Mal – überspringen, falls bereits installiert):

npx skills add heygen-com/hyperframes

Umgebung überprüfen:

node --version   # muss >= 22 sein
ffmpeg --version  # muss vorhanden sein

Projekt vorbereiten:

npx hyperframes init sizzle-[slug] --example kinetic-type --non-interactive
cd sizzle-[slug]

Slug: Kebab-Case aus dem Markennamen von end_card oder der ersten key_message, max. 25 Zeichen.


Schritt 3: Interne Architektur (wird dem Benutzer nie gezeigt)

1. Schnittpunkt-Timing aus duration + cut_style ableiten:

Sektion30s60s90s
Cold Open0-5s0-5s0-8s
Build5-25s5-40s8-65s
Peak25-28s40-55s65-80s
Land28-30s55-60s80-90s

Wandle jede Grenze in Millisekunden um. Berechne die Dauer pro Szene aus cut_style:

  • fast: 1,2s-1,8s pro Nachricht (Standard 1,5s)
  • cinematic: 3,5s-5,0s pro Nachricht (Standard 4,0s)
  • mixed: 2,0s-4,0s, variierend nach Sektionsenergie

2. key_messages auf Szenen abbilden:

  • Cold Open (1 Szene): eine Impact-Statistik oder Frage – KEIN Markenname, baut Spannung auf
  • Build: eine Szene pro key_message
  • Peak: Wiederhole die stärkste Nachricht in doppelter Größe oder kombiniere 2 Nachrichten in schnellem Wechsel
  • Land: Markenname + Slogan + CTA-URL

3. Beat-Sync erkennen, falls Musik bereitgestellt:

npx hyperframes tts --analyze-beats [Musikdatei]

Falls nicht verfügbar, aus BPM berechnen: beat_ms = 60000 / BPM. Schnitte auf jeden 2. Beat ausrichten.

4. Ton-Voreinstellung auswählen – lies references/tone-presets.md für CSS-Tokens.

5. Rhythmusmuster deklarieren – schreibe Kommentar am Anfang des Skripts:

// RHYTHM: flash-sequence
// Cold Open [0-5000ms]: stat
// Build [5000-40000ms]: msg-1(1500ms)|flash|msg-2(1500ms)|flash|msg-3(1500ms)|flash|msg-4(1500ms)|flash|build-accum(10000ms)
// Peak [40000-55000ms]: msg-strongest(1200ms)|flash|msg-2nd(1200ms)|flash|HOLD(5600ms)
// Land [55000-60000ms]: logo+tagline+cta

6. Pixelabmessungen bestimmen:

  • 9:16 → B=1080, H=1920 (Standard – Instagram Reels, TikTok, YouTube Shorts)
  • 16:9 → B=1920, H=1080

Schritt 4: HyperFrames HTML-Komposition

Lies references/cut-patterns.md und die HyperFrames-Fähigkeit (/hyperframes), bevor du Code schreibst.

Erforderliches HTML-Grundgerüst:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
[font CDN link from tone preset]
<style>
:root {
  [alle CSS-Tokens aus der Ton-Voreinstellung]
}

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
</style>
</head>
<body>
<div
  data-composition-id="sizzle-[slug]"
  data-width="[W]"
  data-height="[H]"
  style="position:relative;width:[W]px;height:[H]px;overflow:hidden;background:var(--bg)"
>

  [if cut-flash: true]
  <div id="cut-flash"
    style="position:absolute;inset:0;background:var(--cut-flash-bg);opacity:0;pointer-events:none;z-index:200"></div>
  [end if]

  [if film-grain: true]
  <canvas id="grain-overlay"
    width="240" height="135"
    style="position:absolute;inset:0;width:[W]px;height:[H]px;pointer-events:none;opacity:0.022;mix-blend-mode:overlay;z-index:50"></canvas>
  [end if]

  [if vignette: true]
  <div id="vignette-overlay"
    style="position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 35%,rgba(0,0,0,0.65) 100%);pointer-events:none;z-index:51"></div>
  [end if]

  <!-- Szenen – ein div pro Szene -->
  <div id="scene-cold"
    class="clip"
    data-start="0"
    data-duration="5"
    data-track-index="0"
    style="position:absolute;inset:0;opacity:0"
  >
    <div class="scene-content" style="width:100%;height:100%;padding:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box">
      [Cold Open Inhalt – eine Statistik oder Impact-Phrase, kein Markenname]
    </div>
  </div>

  [ein div pro Build-Szene, data-start inkrementiert um Schnittdauer]
  [Peak Szene(n)]
  [Land Szene – Markenname + Slogan + CTA]

  [if music bereitgestellt]
  <audio id="music"
    class="clip"
    data-start="0"
    data-duration="[Gesamtdauer]"
    data-track-index="10"
    data-volume="0.85"
    src="[Musikpfad]"
  ></audio>
  [end if]

  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
  <script>
  // ── RHYTHMUS-DEKLARATION ──────────────────────────────────────────────────────
  // RHYTHM: [flash-sequence | cinematic-hold | beat-sync | mixed]
  // Cold Open [0-Nms]: ...
  // Build [N-Nms]: ...
  // Peak [N-Nms]: ...
  // Land [N-Nms]: ...

  // ── SEEDED PRNG (nur für Korn – keine anderen Zufallswerte) ───────────────────
  function mulberry32(seed) {
    return function() {
      seed |= 0; seed = seed + 0x6D2B79F5 | 0;
      let t = Math.imul(seed ^ seed >>> 15, 1 | seed);
      t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
      return ((t ^ t >>> 14) >>> 0) / 4294967296;
    };
  }

  [if film-grain: true]
  // ── FILMKORN (nur filmisch/emotional) ───────────────────────────────────
  const grainCanvas = document.getElementById('grain-overlay');
  const grainCtx = grainCanvas ? grainCanvas.getContext('2d') : null;
  // Korn aktualisiert durch GSAP-Ticker (kein Frame-Einfang – HyperFrames übernimmt das)
  [end if]

  // ── GSAP TIMELINE ───────────────────────────────────────────────────────────
  const tl = gsap.timeline({ paused: true });

  // ── COLD OPEN ───────────────────────────────────────────────────────────────
  [Cold Open Entrance- und Exit-Tweens – siehe cut-patterns.md für genaues Muster]

  // ── BUILD-SEKTION ───────────────────────────────────────────────────────────
  [Pro-Nachricht-Tweens – flash-sequence oder cinematic-hold aus cut-patterns.md]

  // ── PEAK-SEKTION ─────────────────────────────────────────────────────────────
  [Peak-Tweens – gleiches Muster wie Build, aber engeres Timing]

  // ── LAND-SEKTION ─────────────────────────────────────────────────────────────
  [Land-Entrances – Logo, Slogan, CTA. Kein Exit – hält bis zum Ende]

  // ── TIMELINE-REGISTRIERUNG ────────────────────────────────────────────────────
  window.__timelines = window.__timelines || {};
  window.__timelines["sizzle-[slug]"] = tl;
  </script>
</div>
</body>
</html>

Regeln zur Designqualität:

  • Cold Open Statistik: ≥160px Schriftgröße für 16:9, ≥100px für 9:16
  • Kernbotschaften: ≥80px Schriftgröße – auf einen Blick lesbar
  • Markenname in Land-Sektion: ≥120px für 16:9
  • Alle Farben aus Variablen der Voreinstellung – keine freien Hex-Codes außer var(--accent)-Literal-Hex innerhalb von Canvas fillStyle
  • scene-content verwendet immer padding + flex – niemals position:absolute auf dem Inhaltscontainer
  • class="clip" auf jedem Element mit data-start

Schritt 5: Selbst-QA (behebe jeden Fehler vor Schritt 6)

Inhalt:

  • key_messages – jede Phrase erscheint genau einmal, keine Duplikate
  • Markenname erscheint NUR in der Land-Sektion (nicht Cold Open, nicht Build, nicht Peak)
  • Cold Open enthält KEINEN Markennamen und KEINEN Produktnamen – nur Statistik oder Impact-Phrase
  • Land-Sektion hat: Markenname + Slogan + CTA-URL (mindestens drei Elemente)
  • end_card CTA-URL auf dem letzten Frame vorhanden

HyperFrames-Vertrag:

  • class="clip" auf jedem Element mit data-start
  • data-start, data-duration, data-track-index auf jedem Clip
  • data-composition-id auf dem Root-Kompositions-div
  • window.__timelines["sizzle-[slug]"] = tl registriert
  • Alle Timelines starten mit { paused: true }
  • Kein Math.random() – nur seed-basierter PRNG
  • Keine tl.play()- oder tl.resume()-Aufrufe

GSAP / Layout:

  • gsap.from() für alle Entrances (VON außerhalb DES BILDSCHIRMS ZUR CSS-Position)
  • gsap.to() für alle Exits (VON CSS-Position AUSSERHALB DES BILDSCHIRMS)
  • Kein position:absolute auf .scene-content-Containern
  • Rhythmusmuster in Kommentar am Anfang des Skripts deklariert

Schnitt-Timing:

  • fast-Ton: durchschnittliche Schnittdauer ≤ 2,0s
  • cinematic-Ton: durchschnittliche Schnittdauer ≥ 3,0s
  • Schnittblitz feuert bei jeder Schnittgrenze für energetic-Ton (60ms, Opacity 0→1→0)
  • Clips auf demselben Track überlappen sich NICHT (überprüfe alle data-track-index-Gruppierungen)

SFX:

  • window.__sfxTimeline vorhanden und vor der Timeline-Registrierung platziert
  • word-hit-Ereignis pro Kernbotschaft
  • whoosh beim Build → Peak-Übergang
  • cta-chime beim Land-Start
  • Kein SFX feuert vor 500ms

Schritt 6: Linten, Rendern, Ausgabe

npx hyperframes lint
npx hyperframes inspect --json

Behebe alle Lint-Fehler. Behebe alle Inspect-Fehler (Textüberläufe, Clips, die Container verlassen). Dann rendern:

npx hyperframes render --output sizzle/[slug]/sizzle-reel.mp4

Ausgabe:

## Sizzle Reel: [Markenname aus end_card]
Ton: [tone] | Dauer: [N]s | Schnittstil: [cut_style] | Seitenverhältnis: [ratio]
Rhythmus: [deklariertes Muster]

Sektionen
  Cold Open [0-Ns]:  [Impact-Statistik oder Phrase]
  Build     [N-Ns]:  [N Kernbotschaften aufgelistet]
  Peak      [N-Ns]:  [stärkste Nachricht in maximaler Größe]
  Land      [N-Ns]:  [Markenname] + "[Slogan]" + [CTA-URL]

Dateien
  Quelle: sizzle/[slug]/index.html
  Ausgabe: sizzle/[slug]/sizzle-reel.mp4

SFX-Timeline (in jede Komposition einbetten)

Das gleiche FFmpeg-synthetisierte SFX-System wie bei vid-product-launch. Platziere window.__sfxTimeline unmittelbar vor der GSAP-Timeline-Registrierung.

Referenz der SFX-Typen für Sizzle Reel:

TypSoundDauerPlatzierung
word-hitSub-Punch (50Hz) + transienter Klick (2,2kHz) + Noise-Burst180msEiner pro Start einer key_message-Szene
whooshZwei-Band-Noise-Sweep (1,1kHz Körper + 4-8kHz Luft)700msBeim Build → Peak-Übergang
cta-chimeA-Dur-Akkord (440+554+659+880Hz) + Nachhall-Glöckchen1,2sExakt beim Land-Start
window.__sfxTimeline = [
  // ein word-hit pro key_message (berechnet aus den Startzeiten der Szene)
  { ms: MSG_1_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_2_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_3_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  // ... wiederhole für jede Nachricht
  { ms: PEAK_START_MS - 700,      sfx: 'whoosh',     vol: 0.55 },
  { ms: LAND_START_MS,            sfx: 'cta-chime',  vol: 0.65 },
];

Berechne alle ms-Werte aus den deklarierten Sektionsstartzeiten.


Referenzen

references/cut-patterns.md

Inhalt:

  • flash-sequence: Jede Szene blendet ein (opacity 0→1 über 200ms), hält für Nms (siehe cut_style), blendet aus (opacity 1→0 über 150ms). Schnittblitz feuert bei jeder Grenze (60ms weißer Frame). Alle Szenen auf aufsteigendem data-track-index.
  • cinematic-hold: Jede Szene blendet ein (opacity 0→1 über 400ms), hält für Nms (siehe cut_style), blendet aus (opacity 1→0 über 500ms). Kein Schnittblitz. Szenen können auf demselben data-track-index liegen, solange sie sich nicht überschneiden.
  • beat-sync: Wie flash-sequence, aber Schnittblitze sind auf jeden 2. Beat ausgerichtet. data-duration muss ein Vielfaches von beat_ms * 2 sein.
  • mixed: Cold Open + Land: cinematic-hold. Build + Peak: flash-sequence, aber mit 300ms Überblendungen statt Schnittblitzen.

references/tone-presets.md

Inhalt:

/* energetic */
:root {
  --bg: linear-gradient(135deg, #0f0c29, #302b63, #24243e);
  --text: #ffffff;
  --accent: #ff3366;
  --accent2: #33ccff;
  --cut-flash-bg: rgba(255,255,255,0.85);
  --shadow: rgba(0,0,0,0.5);
  --font: 'Poppins', sans-serif;
  --bold-weight: 800;
}

/* cinematic */
:root {
  --bg: #1a1a1a;
  --text: #f0e6d3;
  --accent: #c9a96e;
  --accent2: #8b7355;
  --cut-flash-bg: transparent;
  --shadow: rgba(0,0,0,0.7);
  --font: 'Playfair Display', serif;
  --bold-weight: 700;
}

/* emotional */
:root {
  --bg: #2d1b2e;
  --text: #fce4ec;
  --accent: #e91e63;
  --accent2: #f06292;
  --cut-flash-bg: transparent;
  --shadow: rgba(0,0,0,0.6);
  --font: 'Lato', sans-serif;
  --bold-weight: 300;
}

/* professional */
:root {
  --bg: #0d1117;
  --text: #c9d1d9;
  --accent: #58a6ff;
  --accent2: #30363d;
  --cut-flash-bg: rgba(88,166,255,0.15);
  --shadow: rgba(0,0,0,0.4);
  --font: 'Inter', sans-serif;
  --bold-weight: 600;
}

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.

Verwandte Skills