Communitygithub.com

Varnan-Tech/opendirectory

브랜드 자산과 핵심 메시지를 바탕으로 역동적이고 고에너지의 스리즈 릴 또는 하이프 비디오(MP4)를 생성합니다. 빠른 컷, 굵은 텍스트 오버레이, 선택적 배경 음악이 특징인 4개 섹션 구조의 몽타주 형식입니다.

opendirectory란 무엇인가요?

이 스킬은 개발자와 AI 에이전트 사용자를 위해 설계된 고에너지 스리즈 릴 생성기입니다. '스리즈 릴', '하이프 비디오' 등의 자연어 트리거에 반응하여, 브랜드 로고, 핵심 메시지, 색상 팔레트 등의 브랜드 자산을 입력받아 전문적인 마케팅 비디오를 제작합니다. 동적 컷, 텍스트 오버레이, 선택적 비트 싱크 음악을 지원하는 4-섹션 구조(콜드 오픈, 빌드, 피크, 랜드)로 구성되어 있습니다. 이 스킬은 HyperFrames(GSAP + headless Chromium + FFmpeg) 파이프라인을 기반으로 하여, Runway나 Pika 같은 외부 AI 비디오 API나 추가 비용 없이 Node.js와 FFmpeg 만으로 실행됩니다. 또한 다양한 분위기(에너제틱, 시네마틱, 감성적, 프로페셔널)를 위한 톤 프리셋과, 사용자가 제공한 음악 파일의 BPM에 맞춰 컷을 동기화하는 비트 싱크 기능을 제공합니다.

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

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

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

문서

vid-sizzle-reel

브랜드 자산과 핵심 메시지로부터 고에너지 스리즈 릴 또는 하이프 비디오를 생성합니다. 파이프라인: HyperFrames HTML 구성(GSAP 타임라인) → headless Chromium → FFmpeg H.264 MP4. Runway, Pika, AI 비디오 API 불필요. Node.js + FFmpeg 외 추가 비용 없음.

vid-product-launch와의 차별점:

  • vid-product-launch는 서사를 전달합니다 — 하나의 설계된 공개, 다섯 개 섹션, 긴장감 호
  • vid-sizzle-reel는 에너지와 흥분을 만듭니다 — 빠른 컷, 음악 우선, 단일 스토리 비트 없음

중요 규칙 (모든 생성 전에 읽을 것)

  1. 핵심 메시지를 직접 작성하거나 사용자에게 작성을 요청하세요. 이는 화면에 표시될 정확한 문구입니다. "AI가 알아서 할 것이다"라고 하면 빈 내용이 생성됩니다. 3-5개의 날카로운 문장이 스리즈 릴의 전체 내용입니다.

  2. 브랜드명은 오직 Land 섹션에만 나타납니다. Cold Open과 Build는 브랜드를 언급하지 않고 긴장감을 조성합니다. Land 섹션이 그 보상입니다.

  3. HTML을 작성하기 전에 스크립트 상단에 리듬 패턴을 주석으로 선언하세요. 형식: // RHYTHM: flash-sequence | Cold[0-5s]: stat | Build[5-40s]: msg(1.5s)|flash|... | Peak[40-55s]: ... | Land[55-60s]: logo+CTA. 모든 타이밍 결정은 이를 기준으로 확인합니다.

  4. 먼저 CSS로 종료 상태 레이아웃을 구축하세요 — GSAP는 아직 사용하지 마세요. 모든 요소를 정적 CSS에서 가장 잘 보이는 위치에 배치하세요. 그런 다음 gsap.from()으로 GSAP 진입을, gsap.to()로 종료를 추가하세요. 애니메이션 시작 상태에 배치하지 마세요.

  5. 모든 시간 기반 요소에 class="clip"을 추가하세요. HyperFrames에 필수입니다. 없으면 플레이어에서 요소가 보이지 않습니다.

  6. 모든 클립에 data-start, data-duration, data-track-index를 추가하세요. 예외 없음. 동일 트랙 클립은 겹칠 수 없습니다 — 다른 트랙 인덱스를 사용하세요.

  7. Math.random() 사용 금지. HyperFrames는 결정론적 구성을 요구합니다. 의사 난수 값에는 시드된 PRNG(mulberry32)를 사용하세요.

  8. 모든 GSAP 타임라인은 { paused: true }로 시작하고 window.__timelines["comp-id"]에 등록됩니다. HyperFrames 플레이어가 재생을 제어합니다 — tl.play()를 호출하지 마세요.

  9. .scene-content 컨테이너에 position: absolute를 절대 사용하지 마세요. width:100%; height:100%; padding:Npx; display:flex를 사용하세요. position:absolute는 장식 요소에만 예약하세요.

  10. 음악: data-track-index가 있는 별도의 <audio> 요소를 사용하세요. 비디오는 muted playsinline이어야 합니다. 절대 <video> 요소에 오디오를 넣지 마세요.

  11. HTML을 생성하기 전에 references/cut-patterns.md와 references/tone-presets.md를 모두 읽으세요.

  12. HTML을 채팅에 덤프하지 마세요. 파일로 저장하세요. 요약만 표시하세요.


1단계: 입력 수집

필수:

  • key_messages — 화면에 표시할 3-5개의 강력한 문장 (사용자가 직접 작성해야 함)

선택적 매개변수 및 기본값:

매개변수기본값설명
brand_assets없음로고 URL/경로, 브랜드 색상(16진수), 주요 스크린샷
toneenergeticenergetic / cinematic / emotional / professional
music없음파일 경로 또는 BPM/장르 문자열 (예: "128bpm electronic")
duration6030 / 60 / 90초
aspect_ratio9:169:16 (1080x1920) / 16:9 (1920x1080)
cut_styleautofast (1-2s) / cinematic (3-5s) — auto는 tone에서 파생
end_cardautoLand 섹션의 로고 + 태그라인 + CTA URL

cut_style 자동 기본값: energetic → fast; professional → fast (2s); cinematic → cinematic; emotional → mixed

key_messages가 없으면 정확히 다음과 같이 질문하세요:

"스리즈 릴을 생성하려면 핵심 메시지가 필요합니다 — 화면에 표시될 정확한 문구입니다. 3-5개의 강력한 문장을 알려주세요. 이 비디오를 위해 작성하는 가장 중요한 내용입니다.

예시: '500개 이상의 성장 팀이 사용 중' / '며칠에서 몇 분으로' / 'Claude, Codex, Gemini와 함께 작동'

또한 유용한 정보: 톤 (energetic/cinematic/emotional/professional), 길이 (30/60/90초), 브랜드 색상이나 로고 URL."

key_messages가 있으면 즉시 2단계로 진행하세요.


2단계: HyperFrames 설치

HyperFrames 스킬 설치 (처음 한 번만 — 이미 설치된 경우 건너뛰기):

npx skills add heygen-com/hyperframes

환경 확인:

node --version   # >= 22 이어야 함
ffmpeg -version  # 있어야 함

프로젝트 스캐폴딩:

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

슬러그: end_card 브랜드명 또는 첫 번째 key_message의 케밥-케이스, 최대 25자.


3단계: 내부 아키텍처 (사용자에게 절대 표시하지 않음)

1. duration + cut_style에서 컷 포인트 타이밍 파생:

섹션30초60초90초
Cold Open0-5초0-5초0-8초
Build5-25초5-40초8-65초
Peak25-28초40-55초65-80초
Land28-30초55-60초80-90초

모든 경계를 밀리초로 변환합니다. cut_style에서 장면별 길이 계산:

  • fast: 메시지당 1.2초-1.8초 (기본값 1.5초 사용)
  • cinematic: 메시지당 3.5초-5.0초 (기본값 4.0초 사용)
  • mixed: 섹션 에너지에 따라 2.0초-4.0초 변동

2. key_messages를 장면에 매핑:

  • Cold Open (1개 장면): 하나의 임팩트 있는 통계 또는 질문 — 브랜드명 없음, 호기심 유발
  • Build: key_message당 하나의 장면
  • Peak: 가장 강력한 메시지를 두 배 크기로 반복하거나, 2개의 메시지를 빠른 플래시로 결합
  • Land: 브랜드명 + 태그라인 + CTA URL

3. 음악이 제공된 경우 비트 싱크 감지:

npx hyperframes tts --analyze-beats [music-file]

사용 불가능하면 BPM에서 계산: beat_ms = 60000 / BPM. 두 번째 비트마다 컷 정렬.

4. 톤 프리셋 선택 — CSS 토큰을 위해 references/tone-presets.md 읽기.

5. 리듬 패턴 선언 — 스크립트 상단에 주석 작성:

// 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. 픽셀 치수 결정:

  • 9:16 → W=1080, H=1920 (기본값 — Instagram Reels, TikTok, YouTube Shorts)
  • 16:9 → W=1920, H=1080

4단계: HyperFrames HTML 구성

코드를 작성하기 전에 references/cut-patterns.md와 HyperFrames 스킬(/hyperframes)을 읽으세요.

필수 HTML 스켈레톤:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
[톤 프리셋의 font CDN 링크]
<style>
:root {
  [톤 프리셋의 모든 CSS 토큰]
}

*, *::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]

  <!-- 장면 — 장면당 하나의 div -->
  <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 콘텐츠 — 하나의 통계 또는 임팩트 문구, 브랜드명 없음]
    </div>
  </div>

  [Build 장면당 하나의 div, data-start는 컷 길이만큼 증가]
  [Peak 장면(들)]
  [Land 장면 — 브랜드명 + 태그라인 + CTA]

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

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

  // ── 시드된 PRNG (그레인 전용 — 다른 난수 값 없음) ──────────────────────────
  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]
  // ── 필름 그레인 (시네마틱/감성적 전용) ───────────────────────────────────────
  const grainCanvas = document.getElementById('grain-overlay');
  const grainCtx = grainCanvas ? grainCanvas.getContext('2d') : null;
  // GSAP 티커에 의해 업데이트되는 그레인 (프레임별 캡처 아님 — HyperFrames가 처리)
  [end if]

  // ── GSAP 타임라인 ───────────────────────────────────────────────────────────
  const tl = gsap.timeline({ paused: true });

  // ── 콜드 오픈 ───────────────────────────────────────────────────────────────
  [cold open 진입 및 종료 트윈 — 정확한 패턴은 cut-patterns.md 참조]

  // ── 빌드 섹션 ───────────────────────────────────────────────────────────────
  [메시지별 트윈 — cut-patterns.md의 flash-sequence 또는 cinematic-hold]

  // ── 피크 섹션 ────────────────────────────────────────────────────────────────
  [피크 트윈 — 빌드와 동일 패턴이지만 더 타이트한 타이밍]

  // ── 랜드 섹션 ────────────────────────────────────────────────────────────────
  [랜드 진입 — 로고, 태그라인, CTA. 종료 없음 — 끝까지 유지]

  // ── 타임라인 등록 ────────────────────────────────────────────────────────────
  window.__timelines = window.__timelines || {};
  window.__timelines["sizzle-[slug]"] = tl;
  </script>
</div>
</body>
</html>

디자인 품질 규칙:

  • Cold open 통계: 16:9의 경우 ≥160px 글꼴 크기, 9:16의 경우 ≥100px
  • 핵심 메시지: ≥80px 글꼴 크기 — 한눈에 읽을 수 있어야 함
  • Land 섹션 브랜드명: 16:9의 경우 ≥120px
  • 모든 색상은 프리셋 토큰 변수에서 가져옴 — var(--accent) 리터럴 16진수를 canvas fillStyle 내부에서 사용하는 경우 외에는 자유로운 16진수 사용 금지
  • scene-content는 항상 padding + flex 사용 — 콘텐츠 컨테이너에 position:absolute 절대 사용 금지
  • data-start가 있는 모든 요소에 class="clip"

5단계: 자체 QA (6단계 전에 모든 실패 수정)

콘텐츠:

  • key_messages — 각 문구가 정확히 한 번 나타나며, 중복 없음
  • 브랜드명은 오직 Land 섹션에만 나타남 (cold open, build, peak에는 없음)
  • Cold open에는 브랜드명이나 제품명이 전혀 없음 — 통계 또는 임팩트 문구만
  • Land 섹션에는 브랜드명 + 태그라인 + CTA URL (최소 세 가지 요소)
  • end_card CTA URL이 최종 프레임에 있음

HyperFrames 계약:

  • data-start가 있는 모든 요소에 class="clip"
  • 모든 클립에 data-start, data-duration, data-track-index
  • 루트 컴포지션 div에 data-composition-id
  • window.__timelines["sizzle-[slug]"] = tl 등록됨
  • 모든 타임라인이 { paused: true }로 시작
  • Math.random() 사용 금지 — 시드된 PRNG만 사용
  • tl.play() 또는 tl.resume() 호출 금지

GSAP / 레이아웃:

  • 모든 진입은 gsap.from() (오프스크린에서 CSS 위치로)
  • 모든 종료는 gsap.to() (CSS 위치에서 오프스크린으로)
  • .scene-content 컨테이너에 position:absolute 없음
  • 스크립트 상단에 주석으로 리듬 패턴 선언됨

컷 타이밍:

  • fast 톤: 평균 컷 길이 ≤ 2.0초
  • cinematic 톤: 평균 컷 길이 ≥ 3.0초
  • energetic 톤의 경우 모든 컷 경계에서 컷 플래시 발생 (60ms, opacity 0→1→0)
  • 동일 트랙 클립이 겹치지 않음 (모든 data-track-index 그룹 확인)

SFX:

  • window.__sfxTimeline이 존재하고 타임라인 등록 전에 배치됨
  • 각 key_message에 word-hit 이벤트
  • Build → Peak 전환 경계에 whoosh
  • Land 시작에 cta-chime
  • 500ms 전에 SFX가 실행되지 않음

6단계: 린트, 검사, 렌더링

npx hyperframes lint
npx hyperframes inspect --json

모든 린트 오류를 수정하세요. 모든 검사 오류(텍스트 오버플로, 클립이 컨테이너를 벗어남)를 수정하세요. 그런 다음 렌더링:

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

출력:

## Sizzle Reel: [end_card의 브랜드명]
Tone: [tone] | Duration: [N]s | Cut style: [cut_style] | Aspect: [ratio]
Rhythm: [declared pattern]

Sections
  Cold Open [0-Ns]:  [임팩트 통계 또는 문구]
  Build     [N-Ns]:  [나열된 N개의 핵심 메시지]
  Peak      [N-Ns]:  [최대 크기의 가장 강력한 메시지]
  Land      [N-Ns]:  [브랜드명] + "[태그라인]" + [CTA URL]

Files
  Source: sizzle/[slug]/index.html
  Output: sizzle/[slug]/sizzle-reel.mp4

SFX 타임라인 (모든 구성에 포함)

vid-product-launch와 동일한 FFmpeg 합성 SFX 시스템. window.__sfxTimeline을 GSAP 타임라인 등록 바로 앞에 배치하세요.

스리즈 릴용 SFX 유형 참조:

유형사운드길이배치
word-hit서브 펀치(50Hz) + 과도 클릭(2.2kHz) + 노이즈 버스트180ms각 key_message 장면 시작마다 하나
whoosh2밴드 노이즈 스윕(1.1kHz 바디 + 4-8kHz 에어)700msBuild → Peak 경계에서
cta-chimeA 메이저 코드(440+554+659+880Hz) + aecho 벨 샤이머1.2s정확히 Land 시작에
window.__sfxTimeline = [
  // key_message당 하나의 word-hit (장면 시작 시간에서 계산)
  { 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 },
  // ... 각 메시지에 대해 반복
  { ms: PEAK_START_MS - 700,      sfx: 'whoosh',     vol: 0.55 },
  { ms: LAND_START_MS,            sfx: 'cta-chime',  vol: 0.65 },
];

모든 ms 값을 선언된 섹션 시작 시간에서 계산하세요.

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.

관련 스킬