Communitygithub.com

Biz Next.js Chatbot OpenRouter — AI 챗봇 플로팅 위젯 설치

Next.js 프로젝트에 우측 하단 플로팅 AI 챗봇 위젯을 설치하고, FAQ 및 제품 문서 기반 지식 베이스로 고객 응대와 리드 자동 수집을 지원합니다.

Biz Next.js Chatbot OpenRouter — AI 챗봇 플로팅 위젯 설치란 무엇인가요?

이 스킬은 기존 Next.js 프로젝트(앱 라우터 또는 페이지 라우터)에 우측 하단에 배치되는 AI 챗봇 플로팅 위젯을 추가합니다. 챗봇은 OpenRouter를 통해 LLM(기본값: google/gemini-3-flash-preview, anthropic/claude-sonnet-4.6으로 변경 가능)을 호출하고, react-markdown과 remark-gfm을 사용하여 응답 내 마크다운(굵게, 목록, 링크, 코드)을 렌더링합니다. 사용자가 제공한 FAQ 및 제품/강좌 자료를 기반으로 지식 베이스를 구축하여 반복적인 고객 문의에 자동 응답하고, 채팅 중 사용자가 이름, 전화번호, 이메일을 제공하면 자동으로 추출하여 Upstash Redis/Vercel KV에 저장합니다(중복 제거, 90일 TTL, 스트리밍 차단 없음). 또한 프로젝트 컨텍스트(TypeScript 유무, App/Pages Router, Tailwind/CSS 모듈, KV 사용 가능 여부)를 자동 감지하고, 여러 개의 Next.js 프로젝트가 발견되면 사용자에게 선택하도록 안내합니다. Tailwind, CSS 모듈 등 다양한 스타일링 환경을 지원하며, 솔로프러너나 강좌 제작자가 랜딩 페이지에 24/7 자동 응답 및 수동적 리드 캡처 시스템을 구축하는 데 최적화되어 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/lexuanthanhhy/MKT.LANDINGPAGE.SKILLS/tree/main/.claude/skills/biz-nextjs-chatbot-openrouter

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

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

문서

Biz Next.js Chatbot OpenRouter — AI 챗봇 플로팅 위젯을 웹사이트에 1분만에 설치하기

이 스킬은 기존 Next.js 프로젝트에 AI 챗봇 플로팅 위젯을 추가합니다. 위젯은 화면 우측 하단에 위치하며, 3가지 화면 크기에 반응형으로 동작합니다. OpenRouter를 통해 LLM을 호출하고, FAQ + 강좌/제품 자료를 기반으로 지식 베이스를 구축합니다. 어시스턴트 말풍선에서 마크다운(숫자/가격 굵게, 글머리 목록, 클릭 가능한 링크, 인라인 코드)을 렌더링하며(react-markdown + remark-gfm 사용), 사용자가 채팅에 이름, 전화번호, 이메일 등 정보를 모두 제공하면 자동으로 추출하여 KV(Upstash Redis / Vercel KV)에 저장합니다. 관리자는 /admin 대시보드에서 리드를 확인할 수 있습니다. 목표: 솔로프리너 / 강좌 제작자가 랜딩 페이지에 24/7 자동 응답 봇 + 수동적 리드 캡쳐를 갖추어, 채팅을 통해 문의한 고객을 놓치지 않도록 하는 것입니다.

핵심 철학: 가능한 모든 것을 자동으로 감지합니다(Next.js 버전, App/Pages Router, TS/JS, Tailwind/CSS). 사용자에게 정말 필요한 4가지만 묻습니다: (1) 여러 프로젝트 중 선택, (2) FAQ, (3) 제품 문서, (4) 어조/브랜드명. 나머지는 코드 → 몇 분 내로 라이브.

사용 시기

사용자가 다음을 원할 때:

  • 강좌/서비스 판매 랜딩 페이지에 고객 지원 AI 챗봇을 설치
  • 반복적인 질문(가격, 커리큘럼, 환불, 대상 적합성 등)에 응답하는 부담을 줄이고자 할 때
  • 콘텐츠를 가리지 않는 작고 컴팩트한 우측 하단 채팅 위젯이 필요할 때
  • 챗봇이 자신의 강좌/제품 내용(FAQ 기반)을 정확히 이해하기를 원할 때
  • 이미 Next.js 프로젝트가 있을 때(/biz-sales-page-layout 실행 완료 후, 또는 기존 프로젝트)

사용하지 말아야 할 때

  • 프로젝트가 Next.js가 아닐 때(순수 React Vite, Vue, Svelte, 일반 HTML) → 이 스킬은 Next.js 전용입니다. 적용 가능하지만 최적화되지 않습니다.
  • 수천 페이지 규모의 지식 베이스를 갖춘 RAG(검색 증강 생성) 챗봇이 필요할 때 → 벡터 DB(Pinecone/Supabase pgvector)가 필요합니다. 이 스킬은 20K 토큰 이하의 지식에 적합한 간단한 시스템 프롬프트를 사용합니다.
  • 음성/멀티모달(이미지 전송) 챗봇이 필요할 때 → 이 스킬은 텍스트 전용입니다.
  • 사용자별 채팅 기록을 DB에 저장해야 할 때 → 이 스킬은 상태 비저장(stateless)이며 임시 세션 방식입니다. 추후 확장 가능합니다.
  • 백엔드가 Vercel 친화적이지 않을 때(롱 폴링, 영구 WebSocket 필요) → OpenRouter 스트리밍은 Vercel Edge에서 잘 작동하지만, 별도 WS가 필요하다면 상황이 다릅니다.

사용자가 받게 될 결과

스킬 실행 완료 후:

  1. Next.js 프로젝트 내 새 파일:

    • components/Chatbot.tsx (또는 .jsx) — 위젯 UI (react-markdown + remark-gfm을 통한 마크다운 렌더링)
    • app/api/chat/route.ts (App Router) 또는 pages/api/chat.ts (Pages Router) — OpenRouter 호출 + 스트림 후 자동 리드 추출 API 프록시
    • lib/chatbot-knowledge.ts (또는 .js) — 지식 베이스 + 시스템 프롬프트 (응답 형식 지정 블록 + 능동적 리드 수집 블록 포함)
    • lib/chat-lead.ts — KV/Upstash가 있는 프로젝트에서만 생성 — 추출기 + 저장기, 전화번호 기준 중복 제거, TTL 90일, 네임스페이스 chat-lead:{phone}
    • 마크다운 스타일 .chatbot-md가 app/globals.css에 추가됨 (templates/chatbot-markdown-styles.css에서)
    • .env.local 파일 생성/업데이트 (OPENROUTER_API_KEY= 플레이스홀더 포함)
    • .env.example 파일 (없는 경우) 생성하여 환경 변수 문서화
    • <Chatbot />가 app/layout.tsx 또는 pages/_app.tsx에 마운트됨
  2. 추가로 설치되는 패키지 (락파일에서 감지된 패키지 매니저를 통해):

    • react-markdown — 안전한 마크다운 렌더링 (dangerouslySetInnerHTML 불필요)
    • remark-gfm — GitHub Flavored Markdown (테이블, 자동 링크, 취소선)
  3. 세션 종료 시 명확한 안내:

    • 사용자가 직접 해야 할 3단계: (a) OpenRouter API 키 받기, (b) .env.local에 붙여넣기, (c) npm run dev로 테스트
    • Gemini와 Sonnet 간 모델 변경 방법
    • 추후 지식 베이스 업데이트 방법

워크플로우

1단계 — Next.js 프로젝트 탐지

Next.js 프로젝트 후보를 찾습니다. 실행:

# 최대 깊이 4에서 package.json에 "next"가 포함된 파일 찾기
find /Users/tonyhoang/Documents/GitHub -maxdepth 4 -name "package.json" -not -path "*/node_modules/*" 2>/dev/null | xargs grep -l '"next"' 2>/dev/null | head -20

(사용자가 특정 작업 디렉토리에 있는 경우, cwd부터 우선 검색하고, 없으면 ~/Documents/GitHub로 폴백합니다.)

분기 처리:

  • 0개 프로젝트: 사용자에게 알리고 중단. 제안: "혹시 가지고 계신 Next.js 프로젝트가 있나요? 아직 없다면 /biz-sales-page-layout으로 새로 만든 후 다시 진행하시겠어요?"
  • 1개 프로젝트: 진행 전에 사용자에게 경로 확인: "[경로]에 챗봇을 설치하겠습니다. 괜찮으신가요?"
  • 2개 이상 프로젝트: 경로 및 이름(package.json의 name)을 번호 목록으로 표시하고 사용자에게 선택 요청: "N개의 Next.js 프로젝트가 있습니다. 어디에 설치할까요?"

2단계 — 프로젝트 컨텍스트 조사

사용자가 프로젝트를 확인한 후, 다음을 읽습니다:

  1. package.json → 확인:

    • TypeScript (typescript가 deps에 있는가?)
    • Tailwind (tailwindcss가 devDeps에 있는가?)
    • 패키지 매니저 (락파일: pnpm-lock.yaml → pnpm, yarn.lock → yarn, 기본 npm)
    • Next.js 버전
  2. 디렉토리 구조 → 확인:

    • app/ 디렉토리 존재 → App Router
    • pages/ 디렉토리 존재 (그리고 app/ 없음) → Pages Router
    • 둘 다 존재 → 새 파일은 App Router 우선 (Next.js가 전환 중)
    • src/ 래퍼 → 경로 조정 (예: src/app/, src/components/)
  3. tsconfig.json → 경로 별칭 확인 (@/* → ./src/* 인지 ./* 인지)

  4. .env.local, .env.example → 이미 존재하는지 확인

  5. KV/Upstash 사용 가능 여부 (자동 리드 캡쳐용):

    • package.json에 @upstash/redis 또는 @vercel/kv 있음 → KV 있음 → chat-lead.ts 스캐폴딩 + 라우트 연결
    • src/lib/kv.ts (또는 lib/kv.ts) 파일이 kv를 export → 기존 헬퍼 사용
    • KV 없음 → chat-lead.ts 스캐폴딩 생략, 사용자에게 알림: "프로젝트에 KV가 없어 자동 리드 캡쳐가 활성화되지 않았습니다. /biz-setup-sepay-payment를 실행하여 KV를 먼저 설치한 후 다시 돌아와 리드 캡쳐를 활성화하거나, 건너뛸 수 있습니다."

이러한 관찰 내용을 작은 표로 저장하여 이후 단계에서 사용합니다.

3단계 — 사용자로부터 지식 베이스 수집

사용자에게 4가지 질문 (한 메시지에 모아서 사용자가 한 번에 답변할 수 있도록 하여 불필요한 대화를 줄임):

챗봇이 정확하게 답변하려면 4가지가 필요합니다:

1. **FAQ** — 자주 묻는 질문과 답변 목록 (가격, 커리큘럼, 환불, 대상, 학습 시간, 수강 후 지원...).
   여기에 직접 붙여넣거나, 파일 경로(.md / .txt / .docx)를 알려주세요.

2. **제품 / 강좌 문서** — 강좌에 대한 상세 설명: 이름, 각 모듈 내용, 학습 성과, 강사, 보너스, 여러 티어의 가격 등.
   역시 붙여넣거나 파일 경로를 알려주세요.

3. **브랜드명 + 어조** — 챗봇이 사용할 브랜드/강좌명 (예: "AI Mastery의 어시스턴트"). 사용할 어조: 친근한 존댓말(기본) / 격식체 / 편한 반말.

4. **모델** — 기본값은 `google/gemini-3-flash-preview` (빠르고 저렴하며 지원에 충분히 좋음). `anthropic/claude-sonnet-4.6` (더 높은 품질, 약 10배 비쌈)을 원하시면 말씀해주세요.

한 번에 답변해 주시겠어요?

사용자 응답 시:

  • 파일 경로만 제공한 경우 → Read 도구로 해당 파일 읽기.
  • 내용을 직접 붙여넣은 경우 → 붙여넣은 내용 사용.
  • 사용자가 "플레이스홀더를 자동으로 생성해 줘"라고 말한 경우 → 일반적인 FAQ 플레이스홀더를 생성하고 // TODO: 사용자 입력 필요로 표시하여 사용자가 업데이트해야 함을 알림.
  • 브랜드명이 없는 경우 → 기본값 "AI 어시스턴트" 및 존댓말 사용.

4단계 — 프로젝트에 파일 생성

이 스킬의 templates/ 디렉토리에 있는 템플릿을 읽고 프로젝트에 맞게 조정합니다. 템플릿 목록:

  • templates/chatbot-knowledge.ts — 지식 베이스 + systemPrompt를 export하는 모듈. FAQ, 제품 정보, 브랜드명, 어조를 여기에 주입합니다. 응답 형식 지정 블록(마크다운 규칙) + 능동적 리드 수집 블록(LLM이 구매 신호 시 이름/전화번호/이메일을 요청하고, 사용자 제공 시 감사 인사 + 확인을 하되 "데이터베이스에 저장했습니다"라고 말하지 않도록 지시)이 이미 포함되어 있습니다.
  • templates/Chatbot.tsx — 위젯 컴포넌트, Tailwind 우선. react-markdown + remark-gfm을 import하고, 어시스턴트 메시지를 <ReactMarkdown remarkPlugins={[remarkGfm]}>로 렌더링합니다 (어시스턴트만 해당 — 사용자 메시지는 일반 whitespace-pre-wrap). 프로젝트에 Tailwind가 없는 경우 → templates/Chatbot-noTailwind.tsx + templates/chatbot.module.css로 폴백.
  • templates/chat-route-app.ts — App Router용 API 라우트 (app/api/chat/route.ts). 스트림 종료 후 파이어 앤 포겟 방식으로 실행되는 persistLeadIfReady 훅이 내장되어 있어 응답을 차단하지 않습니다.
  • templates/chat-route-pages.ts — Pages Router용 API 라우트 (pages/api/chat.ts).
  • templates/chat-lead.ts — 프로젝트에 KV/Upstash가 있는 경우에만 스캐폴딩 — 베트남 전화번호 + 이메일 + 이름 휴리스틱 정규식 추출("tên X" / "tôi là X" / "tên: X" 패턴), 전화번호 기준 중복 제거 saveChatLead, TTL 90일, 키 네임스페이스 chat-lead:{phone}.
  • templates/chatbot-markdown-styles.css — .chatbot-md 클래스용 CSS 스니펫. 반드시 app/globals.css (또는 src/app/globals.css / styles/globals.css) 끝에 추가해야 합니다. 추가 전에 프로젝트의 브랜드 팔레트에 맞게 강조 색상(#fde68a / #f59e0b)을 변경하세요.
  • templates/env-instructions.md — OpenRouter 키 획득 방법 안내 스니펫, 마지막 단계에서 사용.

템플릿 조정 규칙:

  1. TS vs JS: 프로젝트에 JS만 있는 경우, 확장자를 .ts/.tsx → .js/.jsx로 변경하고 타입 애너테이션을 제거합니다 (파일명만 변경하는 것이 아님). 샘플 파일을 읽고, 파싱하여 타입을 제거한 후 작성합니다.
  2. 경로 별칭: tsconfig에서 @/* → ./src/*로 매핑된 경우, 템플릿의 import는 @/lib/chatbot-knowledge를 사용하고 파일은 src/lib/에 배치합니다. 별칭이 없으면 상대 경로를 사용합니다.
  3. 모델: __MODEL_ID__ 플레이스홀더를 사용자가 선택한 모델(google/gemini-3-flash-preview 또는 anthropic/claude-sonnet-4.6)로 교체합니다.
  4. 브랜드: __BRAND_NAME__, __BRAND_TONE__을 교체합니다.
  5. 지식: FAQ + 제품 정보를 명확한 구조로 systemPrompt를 빌드합니다 (템플릿 참조). systemPrompt 내 응답 형식 지정 블록을 유지합니다 — 이 블록이 LLM에게 작은 채팅 말풍선에 적합한 마크다운(헤딩 대신 굵게, 한 줄짜리 짧은 글머리)을 출력하도록 지시합니다.
  6. 마크다운 렌더링 패키지 설치 (필수 — 건너뛰면 채팅 말풍선에 **bold**와 같은 원시 텍스트가 표시됨):
    # 락파일 감지 → 올바른 패키지 매니저 선택
    npm install react-markdown remark-gfm
    # 또는: pnpm add react-markdown remark-gfm
    # 또는: yarn add react-markdown remark-gfm
    
  7. 마크다운 스타일 추가: templates/chatbot-markdown-styles.css를 읽고, 프로젝트의 브랜드 팔레트에 맞게 강조 색상을 변경한 후 (globals.css에서 --color-primary 또는 이와 유사한 것을 찾아 확인), app/globals.css (또는 src/app/globals.css / styles/globals.css) 끝에 추가합니다.
  8. 위젯 마운트:
    • App Router: app/layout.tsx (또는 src/app/layout.tsx)를 편집하여 import Chatbot from '@/components/Chatbot'와 <Chatbot />을 </body> 바로 앞에 추가합니다. 편집 전에 기존 layout.tsx를 읽어 메타데이터, 폰트, 프로바이더를 유지합니다.
    • Pages Router: pages/_app.tsx를 편집하여 return을 <><Component {...pageProps} /><Chatbot /></>로 래핑합니다. 기존 _app을 읽고 기존 프로바이더는 유지합니다.
  9. 자동 리드 캡쳐 연결 (2단계에서 KV를 감지한 경우에만 수행):
    • templates/chat-lead.ts를 lib/chat-lead.ts (또는 src/lib/chat-lead.ts)로 복사.
    • 프로젝트에 아직 lib/kv.ts가 없는 경우 → 생성: import { Redis } from "@upstash/redis"; export const kv = Redis.fromEnv();
    • 라우트 핸들러에 import 추가: import { extractLeadFromMessages, saveChatLead } from "@/lib/chat-lead".
    • 스트림 루프에서: assistantText를 추적(델타 누적), 스트림 종료 시 persistLeadIfReady(history, assistantText) 호출 (파이어 앤 포겟, 응답 경로에서 await하지 않음).
    • 시스템 프롬프트: chatbot-knowledge.ts에 능동적 리드 수집 블록이 포함되어 있는지 확인 (템플릿에 이미 있음).
    • 사용자에게 확인: "자동 리드 캡쳐가 활성화되었습니다. 고객이 채팅에 이름/전화번호/이메일을 입력하면 시스템이 자동으로 KV 네임스페이스 chat-lead:{전화번호}에 저장합니다. /admin에서 리드를 확인하세요 (/biz-admin-leads-dashboard가 설치된 경우)."

5단계 — .env.local + .gitignore 설정

  1. .env.local이 이미 존재하는지 확인:

    • 없음: 새로 생성:
      # OpenRouter API 키 — https://openrouter.ai/keys 에서 발급
      OPENROUTER_API_KEY=
      
      # 선택 사항: OpenRouter 추적용 사이트 URL (레이트 리밋에 도움)
      NEXT_PUBLIC_SITE_URL=http://localhost:3000
      
    • 있음: 위 2개 변수가 없으면 추가하고, 기존 변수는 덮어쓰지 않음.
  2. .env.example 업데이트 (없으면 새로 생성):

    OPENROUTER_API_KEY=sk-or-v1-xxxxx
    NEXT_PUBLIC_SITE_URL=https://your-domain.com
    
  3. .gitignore에 .env.local이 있는지 확인. 없으면 → .env.local 및 .env*.local 추가.

6단계 — 사용자에게 보고

4개 부분으로 구성된 명확한 요약 메시지 출력:

✅ [프로젝트명]에 챗봇 설치 완료

📁 생성된 파일:
  - components/Chatbot.tsx (react-markdown + remark-gfm으로 마크다운 렌더링)
  - app/api/chat/route.ts
  - lib/chatbot-knowledge.ts
  - app/globals.css (마크다운 스타일 .chatbot-md 추가)
  - .env.local (플레이스홀더)

📦 설치된 패키지: react-markdown, remark-gfm

🔑 챗봇 실행을 위해 사용자가 직접 해야 할 3단계:

1. OpenRouter API 키 발급:
   - https://openrouter.ai 방문 → 회원가입 (Google 로그인 가능)
   - https://openrouter.ai/keys 방문 → 키 생성
   - 크레딧 충전 (https://openrouter.ai/credits) — Gemini 3 Flash는 저렴, $5면 수천 번의 채팅 가능
   - `sk-or-v1-xxxxx` 형식의 키 복사

2. `.env.local` 파일에 붙여넣기:
   OPENROUTER_API_KEY=sk-or-v1-xxxxx-여기에-붙여넣기

3. 테스트 실행:
   [npm/pnpm/yarn] run dev
   http://localhost:3000 열기 → 우측 하단 말풍선 클릭

🔄 Gemini ↔ Sonnet 모델 변경:
  `app/api/chat/route.ts`를 열고 파일 상단의 `model:` 변수를 수정하세요.
  - `google/gemini-3-flash-preview` (기본값, $0.075/백만 입력 토큰, 빠름)
  - `anthropic/claude-sonnet-4.6` (고급형, ~$3/백만 입력 토큰, 더 나은 품질)

📚 추후 지식 베이스 업데이트:
  `lib/chatbot-knowledge.ts` 편집 — FAQ 및 productInfo를 추가/수정하고 저장하면 핫 리로드됩니다.

모바일 우선 반응형 디자인

위젯은 3가지 중단점을 충족해야 합니다:

중단점동작
≤ 640px (모바일)말풍선 클릭 → 전체 화면 오버레이 열림 (z-index 9999), 헤더에 X 닫기 버튼. 키보드에 가려지지 않도록 safe-area-inset으로 입력창 하단 고정.
641–1023px (태블릿)패널 380px × 70vh, 우측 하단에 16px 여백으로 고정.
≥ 1024px (데스크탑)패널 400px × 600px, 우측 하단에 24px 여백으로 고정. 말풍선 60px 원형.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Best practices for Remotion - Video creation in React

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Scaffold trang `/admin` CRM-style trực quan vào Next.js project (Supabase backend) — KHÔNG còn variant Vercel KV. Layout 1CRM-inspired: sidebar 3 tab (Tổng quan / Khách hàng / Email marketing) + popup nhập mã đăng nhập. **Tab Tổng quan**: 4 KPI cards (Tổng leads / Đã thanh toán / Tỷ lệ chuyển đổi / Doanh thu) có delta arrow vs kỳ trước, line chart leads+paid+revenue theo ngày dùng `recharts`, donut trạng thái paid/pending/expired, period selector pill 7d/30d/90d, list 5 thanh toán gần nhất. **Tab Khách hàng**: bảng leads + search + filter trạng thái + filter ngày + CSV export. **Tab Email marketing**: form soạn chiến dịch (tên + tiêu đề + body chọn định dạng **văn bản thường HOẶC HTML** + placeholder `{{name}}` + audience 4 loại all/paid/pending/last_days + tên người gửi) — có nút **Xem trước** mở modal iframe render đúng email thật (text → auto convert + wrap khung; HTML fragment → wrap khung, HTML đầy đủ giữ nguyên) → gửi bulk qua SMTP (reuse `nodemailer` của `biz-email-setup` — KHÔN

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Deploy landing page / website (React, Next.js, Vite, static HTML) lên Vercel — tự kiểm tra Vercel CLI hoặc Vercel MCP đã cài chưa, nếu chưa thì cài qua npm/pnpm và hướng dẫn user authenticate (vercel login), tự detect framework (Next.js / Vite / CRA / static), auto-generate vercel.json khi cần, chạy `vercel --prod`, trả về live URL + inspect URL + hướng dẫn custom domain. USE WHEN user says 'deploy lên vercel', 'đẩy landing page lên vercel', 'publish website', 'go live', 'deploy nextjs', 'deploy react', 'deploy vite', 'tạo URL live', 'đưa lên production', 'biz-deploy-vercel', 'host landing page', 'vercel deploy', 'ship lên vercel', 'đẩy code lên vercel'. Skill này áp dụng cho cả case dùng Vercel CLI lẫn Vercel MCP server.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Setup SMTP-based email auto-responder cho landing page bán hàng — tự động gửi email sau khi user điền form (tên/SĐT/email), KHÔNG cố định vào provider nào. Skill này (1) hỏi user chọn SMTP provider (Gmail/Google Workspace, Resend SMTP, SendGrid, Mailgun, Brevo, Zoho, hoặc SMTP custom của hosting VN) và detect Next.js stack đang dùng, (2) đọc context từ `offer.json` + `conversion-copy.md` (từ `/biz-offer-alex-hormozi`) HOẶC đọc trực tiếp Next.js project đã build qua `ui-ux-pro-max` (file `app/page.tsx`) HOẶC đọc HTML landing page đã deploy để hiểu offer, dream outcome, mechanism, bonus. Lưu ý: skill `biz-sales-page-layout` đã DEPRECATED 2026-05-14 — pipeline mới skip layout/copy.json, (3) **draft 2 email**: email A — auto-responder gửi cho lead (warm welcome + deliver lead magnet/booking confirm/payment link tuỳ offer type), email B — notification gửi cho owner (lead alert + thông tin liên hệ), (4) **show draft cho user duyệt và chỉnh sửa** trước khi wire vào code, (5) cài `nodemailer`

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Đóng gói offer **không thể chối từ** (grand slam offer) theo phương pháp Alex Hormozi ($100M Offers) — nhận input pains/gains/customer jobs theo Value Proposition Design (Osterwalder 2014) + sản phẩm/dịch vụ, rồi sinh ra: (1) markdown report tiếng Việt đầy đủ Value Equation scoring + Core Offer + 3-4 Bonus stack + Guarantee + Urgency + Pricing, (2) offer.json structured cho pipeline downstream (`ui-ux-pro-max` build sales page production-ready), (3) conversion copy block (headline + subheadline + CTA) sẵn sàng paste landing page. 2 input mode: (B) user paste sẵn pains + gains + product, (C) user chỉ có sản phẩm — skill phỏng vấn theo VPD framework để surface pain/gain trước. Bonus stack mode hybrid: skill brainstorm 5-7 candidate có justification value rồi user pick/chỉnh 3-4 cái. Tiếng Việt thuần (xưng anh/chị), giá VND charm pricing (X99K), 3-tier decoy structure. USE WHEN user says 'đóng gói offer', 'tạo offer', 'thiết kế offer Hormozi', 'grand slam offer', 'value stack', 'offer sta

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Nâng cấp copy sales page tiếng Việt — biến copy có sẵn (từ `offer.json` + `conversion-copy.md` của `/biz-offer-alex-hormozi`, HOẶC từ Next.js project đã build qua `ui-ux-pro-max`, HOẶC user paste block copy bất kỳ) thành **copy chất lượng cao chốt đơn**: headline punchy hơn, pain agitation đau hơn, mechanism rõ hơn, benefit cụ thể hơn, FAQ xử lý đúng objection của thị trường VN, CTA mạnh hơn. Skill này có 3 INTENSITY LEVEL: (1) **Polish** — light edit + power word + sửa nhịp; (2) **Conversion-optimized** — rewrite 5 block critical + tạo A/B variants cho hero/CTA; (3) **Sales-letter** — long-form story-driven full rewrite kèm P.S.. Mỗi section áp dụng đúng formula thuyết phục (PAR cho pain, BAB cho solution, FEP cho benefit, PVEN cho final CTA, Star-Chain-Hook cho testimonial). Output gồm 4 file: `copy-upgraded.md`, `copy-variants.md` (A/B test bank — 3 hero + 3 CTA + 3 final-CTA), `copy-changes.md` (diff Trước/Sau + lý do), `copy.json` (structured downstream). Giọng văn tiếng Việt thuầ

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

⚠️ DEPRECATED (2026-05-14) — Skill này KHÔNG còn trong pipeline chuẩn. Quy trình mới đã bỏ bước wireframe markdown trung gian: sau `/biz-offer-alex-hormozi` đi THẲNG sang `ui-ux-pro-max` để build Next.js sales page production-ready (có design language nhất quán: style + palette + font pairing, không phải Tailwind defaults). Lý do deprecate: wireframe markdown làm thêm 1 bước trung gian không tạo giá trị — `ui-ux-pro-max` đọc trực tiếp `offer.json` đã đầy đủ anchor + core + bonus + guarantee + urgency + pricing rồi ra HTML production luôn. Chỉ dùng skill này KHI user EXPLICITLY yêu cầu wireframe markdown để review/in/share trước khi build code (rare case). KHÔNG trigger trên các keyword 'tạo sales page', 'tạo landing page bán hàng' nữa — những keyword đó giờ trigger `ui-ux-pro-max`.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

End-to-end Sepay VietQR payment infrastructure cho landing page Next.js — guide user setup Sepay account + bank linking + scaffold đầy đủ payment flow trong project. Skill này xử lý 7 phase: (0) detect Next.js stack + **HỎI user chọn lead store backend** (Vercel KV hoặc Supabase Free Postgres — default recommend Supabase do free tier rộng hơn ~50× + có SQL + admin UI), (1) GUIDE user đăng ký Sepay account tại my.sepay.vn + link bank account VN (Vietcombank/Techcombank/MB/ACB/VPBank/BIDV/...) + lấy API key + setup webhook URL trên Sepay dashboard, (2A nếu chọn KV) setup Vercel KV (install `@vercel/kv` + KV namespace + 4 env vars KV_*), (2B nếu chọn Supabase) setup Supabase project (tạo project tại Singapore region + chạy migration SQL tạo 4 bảng leads/phone_index/order_counter/webhook_dedup với pg_cron TTL cleanup + RLS deny-all + lấy SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY + Vercel Cron ping `/api/health` mỗi 6 ngày chống auto-pause), (3) scaffold `lib/leads-store.ts` (thin re-export

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Setup Telegram bot notification cho thanh toán thành công từ Sepay webhook trong Next.js project. Skill này: (1) hướng dẫn user 3 bước tạo Telegram bot riêng qua @BotFather + lấy bot token + chat_id (qua @userinfobot cho chat 1-1, hoặc /getUpdates API cho group), (2) tạo helper function `sendTelegramNotification()` reusable trong `lib/telegram.ts`, (3) detect existing Sepay webhook route trong project (thường là `/api/sepay-webhook`, `/api/payment-success`, hoặc tương đương) và wire Telegram call CÙNG CHỖ với email auto-responder (Resend) — gửi parallel qua `Promise.allSettled` để Telegram fail KHÔNG block 200 response trả Sepay (Sepay sẽ retry webhook nếu nhận non-200, gây duplicate notification), (4) draft message format mặc định tiếng Việt: emoji + tên khách + SĐT + email + amount (charm pricing VND định dạng `499.000đ`) + tên sản phẩm + timestamp giờ VN dd/mm/yyyy HH:mm, (5) update `.env.local` với `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID`, add vào `.gitignore`, nhắc user paste vào

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Convert a single MP3 voiceover file into a single HeyGen avatar lip-sync MP4 video. Single-purpose — no planning, no SRT, no chunking, no Remotion compositing. Hybrid path — REST upload (helper script) + HeyGen MCP for video creation, because the post-2026 MCP no longer exposes an asset-upload tool. Reads avatar look pool (`HEYGEN_AVATAR_LOOKS`) from `.env` and HeyGen API key (`HEYGEN_API_KEY`) for the upload step. USE WHEN user says "tạo video heygen từ mp3", "mp3 to heygen", "heygen mp4 từ audio", "convert mp3 sang heygen video", "tạo avatar video từ file mp3", "lip sync mp3 heygen", "biến mp3 thành video heygen", or any time the user has exactly one MP3 file and wants exactly one HeyGen avatar MP4 out.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Demand-side market research cho digital product / service ở Việt Nam — đo cầu thật + WTP + channel-market fit + defensibility qua keyword volume, marketplace sales (Shopee/Unica/Edumall/Gitiho/KyNa), community signal (FB groups, TikTok hashtag, Zalo OA), competitor pricing, unit economics — không phải macro PESTEL. Output: keyword portfolio + Niche Score 100 điểm 7-dimension có evidence + go/no-go decision + falsification protocol. Force triangulate ≥3 sources cho mỗi claim quan trọng. USE WHEN user says 'nghiên cứu thị trường', 'market research', 'validate niche', 'keyword research', 'demand validation', 'niche có nên làm không', 'có ai làm chưa', 'thị trường đủ lớn không', 'có lời không', 'chọn ngách', 'kiểm tra cầu'. Cũng trigger khi user mô tả 1 ý tưởng kinh doanh cụ thể và muốn check feasibility. Skill này KHÔNG fit: high-ticket transactional sale (BĐS, ô tô), B2B enterprise (sales cycle 6+ tháng), hyper-local geo micro-market (1 toà nhà, 1 phường). KHÔNG làm: macro PESTEL/Porter

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Transcribe an MP3 voiceover into an SRT subtitle file and a word-level segments JSON using local OpenAI Whisper. Input is a single MP3 path; output is `<stem>.srt` + `<stem>_segments.json` written next to the MP3 (or to a custom output dir). USE WHEN the user says 'extract srt from mp3', 'trích srt từ mp3', 'transcribe voiceover', 'tạo file srt và segments', 'whisper transcribe', 'bóc transcript có timestamp', 'extract voiceover segments', 'tách SRT từ audio', or any time a downstream skill (plan-short-video-edit, heygen-remotion-short-video-editor) needs an SRT + word-level segments JSON from a voiceover MP3 and one does not already exist.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Convert Vietnamese/English script text to MP3 voiceover using ElevenLabs TTS API. Calls POST /v1/text-to-speech/{voice_id}, streams audio bytes, writes MP3 directly. Locked to Hoang's brand voice ID by default. USE WHEN user says 'tạo mp3 elevenlabs', 'elevenlabs tts', 'eleven labs voice', 'text to speech elevenlabs', 'tạo voiceover elevenlabs', 'đọc text bằng elevenlabs', 'tts elevenlabs to mp3', 'eleven labs script to mp3', 'voiceover bằng elevenlabs', 'giọng elevenlabs'.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

End-to-end orchestrator: **script → final MP4 16:9 (1920×1080) podcast-keynote**.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

End-to-end short-video pipeline — từ kịch bản (Việt/Anh) ra MP4 TikTok/Reels 9:16 hoàn chỉnh. Orchestrator 3 phase ghép skill có sẵn — (1) TTS provider chọn được giữa `mkt-elevenlabs-tts-to-mp3` (default, voice của Hoàng) hoặc `mkt-video-script-to-mp3` (MiniMax speech-2.8-hd), (2) checkpoint user duyệt MP3, (3) `heygen-mp3-to-mp4` lip-sync avatar HeyGen, (4) delegate Phase 3 packaging cho sub-agent `mkt-full-video-phase3-packager` (transcribe + scene outline + checkpoint + fan-out N scene writers parallel + scaffold + preview Studio). API key + voice ID cho cả 2 provider lưu ở `.env`. USE WHEN user nói "tạo full video từ script", "script to tiktok video", "pipeline full video heygen + hyperframe", "tạo video từ kịch bản đến mp4", "elevenlabs heygen hyperframe full pipeline", "minimax heygen pipeline", "kịch bản ra video tiktok", hoặc có sẵn 1 script + (optional) ảnh b-roll và muốn ra MP4 9:16 đóng gói có captions, SFX, b-roll.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Build a TikTok/Reels/YouTube **landscape 16:9 (1920×1080)** short video from a pre-recorded talking-head MP4 using HyperFrames — transcribe Vietnamese audio, scaffold a complete preview-ready 1920×1080 project with a slide pane (1200px) on the left and a floating avatar frame on the right, GSAP timeline có SPLIT↔PIP transitions (slide full-screen + avatar PIP corner thumbnail), breathing yoyo zoom + beat-driven punch-in trên avatar, 5 scene compositions kiểu "tier-row" pattern (post-stack hook / chats-stack problem / hero-orb solution / counter-row recap / terminal-row CTA), optional cream-paper editorial infographic image slots với `<img onerror>` fallback, 6 SFX wired tại scene boundaries, **NO captions** (giọng avatar là spine). USE WHEN user nói "edit video 16:9 từ HeyGen MP4", "scaffold project landscape", "podcast keynote editor", "talking head + slide editor", "build hyperframes 1920×1080", "tạo project 16:9 từ avatar mp4", "scaffold 16:9 hyperframes", "hyperframe landscape vide

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Pipeline đóng gói: từ MP4 quay sẵn (talking head 9:16) tới HyperFrames preview project hoàn chỉnh có captions, SFX, zoom hooks, b-roll toàn cảnh có hiệu ứng rich, và CTA finale.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Audit bài Facebook / Reels / YouTube để phát hiện 4 downward drivers (over-branding, over-production, stock imagery, standardized aesthetic) + frequency-over-quality. Mỗi anti-pattern bị drop ~75% performance nếu hiện diện. USE WHEN user says 'audit content', 'check anti pattern', 'content có lỗi gì không', 'kiểm tra over branding', 'vì sao video bị chết', 'vì sao post không ai xem', 'content audit', 'kiểm tra chất lượng content'.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Tìm viral pattern ở ngành khác (bác sĩ, luật sư, tài chính, bất động sản, thủ công) có thể apply cho niche AI/automation của Hoang. Ngách AI educator VN còn ít format được khai thác — cross-industry adaptation là blue ocean. USE WHEN user says 'tìm format ngành khác', 'cross industry research', 'học format từ ngành khác', 'blue ocean format', 'tìm format chưa ai làm', 'adapt format từ niche khác', 'cross industry viral'.

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Rewrite CTA kiểu autocratic (Mua ngay! Follow ngay! Đăng ký liền!) sang 3 variants Democratic / Benevolent / Laissez-faire — reach 85% dân số thay vì chỉ 5% (action-based). Áp dụng cho landing page, caption FB, CTA video, email. USE WHEN user says 'rewrite cta', 'sửa cta', 'cta không autocratic', 'viết lại kêu gọi hành động', 'cta cho landing page', 'cta nhẹ nhàng hơn', 'inclusive cta', 'cta democratic benevolent'.

관련 스킬