Communitygithub.com

Biz Next.js Chatbot OpenRouter — ウェブサイトにAIチャットボットを1発導入

既存のNext.jsプロジェクト(App RouterまたはPages Router)に、右下フローティングウィジェット形式のAIチャットボットを追加します。OpenRouter経由でLLMを呼び出し、ストリーミング応答、Markdownレンダリング、リード自動抽出・保存機能を備えています。

Biz Next.js Chatbot OpenRouter — ウェブサイトにAIチャットボットを1発導入 とは?

このスキルは、Next.jsプロジェクトに簡単に統合できるAIチャットボットウィジェットを提供します。ウィジェットは画面右下にフローティング表示され、モバイル、タブレット、デスクトップのすべての画面サイズに完全対応します。OpenRouter APIを通じてLLM(デフォルトはgoogle/gemini-3-flash-preview、anthropic/claude-sonnet-4.6への変更可能)を呼び出し、応答をストリーミング形式で表示します。アシスタントの吹き出し内では、react-markdownとremark-gfmを使用してMarkdown(太字、リスト、リンク、コード)を正しくレンダリングするため、生の**bold**テキストが表示されることはありません。FAQや製品/コースドキュメントをナレッジベースとして組み込むことができ、チャット内でユーザーが名前・電話番号・メールアドレスを提供すると、自動的にそれらの情報を抽出してUpstash RedisまたはVercel KVに保存します(chat-lead:{phone}形式の名前空間、電話番号で重複排除、TTL 90日)。ストリーミングをブロックしないファイア・アンド・フォーゲット方式で動作します。また、プロジェクトのセットアップ(TypeScript/JavaScript、App Router/Pages Router、Tailwind/CSSモジュール、KVの有無)を自動検出し、それに応じてファイルを生成・適応します。このスキルは、24時間稼働のサポートボットとパッシブなリード獲得を求める個人事業主やコースクリエイターに特に役立ちます。

対応✓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 を使用してアシスタントの吹き出し内で Markdownをレンダリング(数値/価格の太字、箇条書き、クリック可能なリンク、インラインコード)し、チャット内でユーザーが十分な情報(名前+電話番号+メールアドレス)を提供すると、KV(Upstash Redis / Vercel KV)に 自動的にリードを抽出・保存 します。管理者は /admin ダッシュボードで確認できます。目的は、ランディングページ上で 24時間自動サポートボット + パッシブなリード獲得 を実現し、チャットで問い合わせた顧客を取り逃がさないことです。

精神: 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に保存するチャットボットが必要 → このスキルはステートレス、エフェメラルセッションです。後で拡張可能です。
  • バックエンドがVercelフレンドリーでない(ロングポーリング、永続的なWebSocketが必要)→ OpenRouterストリーミングはVercel Edgeで問題なく動作しますが、専用のWSが必要な場合は別です。

ユーザーが受け取る成果物

スキル実行後:

  1. Next.jsプロジェクト内の新しいファイル:

    • components/Chatbot.tsx(または .jsx)— ウィジェットUI(react-markdown + remark-gfm でMarkdownをレンダリング)
    • 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}
    • Markdownスタイル .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 — 安全に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プロジェクトの候補を探します。実行:

# 依存関係に "next" を含むpackage.jsonを検索、最大深さ4
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 プロジェクト: 進める前にパスを確認。「[path] にチャットボットをインストールします。よろしいですか?」
  • ≥ 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 をエクスポートしている → 既存のヘルパーをそのまま使用(キャンプパターン)
    • KVがない → chat-lead.ts のスキャフォールドをスキップし、ユーザーに報告:「プロジェクトにKVがありません — 自動リードキャプチャは有効になりません。/biz-setup-sepay-payment を実行してKVを先にインストールしてから戻ってきてリードキャプチャを有効にするか、スキップしてください。」

これらの観察結果 を小さな表にまとめて、後のステップで使用します。

ステップ 3 — ユーザーからのナレッジベース収集

ユーザーに4つの質問(1つのメッセージにまとめて、ユーザーが一度に回答できるようにし、往復を減らします):

チャットボットが正確に回答するために、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: user fill in とマークして、ユーザーが更新する必要があることを示します。
  • ブランド名がない場合 → デフォルトで「AIアシスタント」、トーンは「お客様」.

ステップ 4 — プロジェクトへのファイル生成

このスキルの templates/ にあるテンプレートを読み取り、プロジェクトに 適応させます。テンプレート一覧:

  • templates/chatbot-knowledge.ts — ナレッジベースとsystemPromptをエクスポートするモジュール。FAQ、製品情報、ブランド名、トーンをここに注入します。応答フォーマットブロック(Markdownルール)+ 積極的リード収集ブロック(バイヤーシグナル時にLLMに名前/電話番号/メールアドレスを尋ねるように指示し、ユーザーが提供した場合は感謝+確認し、「データベースに保存しました」とは言わない)が組み込まれています。
  • templates/Chatbot.tsx — ウィジェットコンポーネント、Tailwind優先。react-markdown + remark-gfm をインポート済みで、アシスタントメッセージを <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:{電話番号}。
  • 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/* とマップしている場合、テンプレート内のインポートは @/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に小さなチャット吹き出しに適したMarkdown(見出しの代わりに太字、1行の短い箇条書き)を出力させるためのものです。

  6. Markdownレンダリングパッケージのインストール(必須 — スキップすると吹き出し内で生の **bold** が表示され、太字になりません):

    # ロックファイルを検出 → 正しいパッケージマネージャーを選択
    npm install react-markdown remark-gfm
    # または: pnpm add react-markdown remark-gfm
    # または: yarn add react-markdown remark-gfm
    
  7. Markdownスタイルの追加: 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 { 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 でMarkdownをレンダリング)
  - app/api/chat/route.ts
  - lib/chatbot-knowledge.ts
  - app/globals.css(Markdownスタイル .chatbot-md を追加)
  - .env.local(プレースホルダー)

📦 インストールしたパッケージ: react-markdown, remark-gfm

🔑 チャットボットを動かすために必要な3ステップ:

1. OpenRouter APIキーを取得:
   - https://openrouter.ai にアクセス → サインアップ(Googleログイン可)
   - https://openrouter.ai/keys にアクセス → Create Key
   - クレジットをチャージ(https://openrouter.ai/credits) — Gemini 3 Flashは低コスト、$5で数千回のチャットが可能
   - `sk-or-v1-xxxxx` 形式のキーをコピー

2. `.env.local` ファイルに貼り付け:
   OPENROUTER_API_KEY=sk-or-v1-xxxxx-paste-vào-đây

3. テスト実行:
   [npm/pnpm/yarn] run dev
   http://localhost:3000 を開く → 右下のバブルをクリック

🔄 Gemini ↔ Sonnet のモデル切り替え:
  `app/api/chat/route.ts` を開き、ファイル先頭の `model:` 変数を編集。
  - `google/gemini-3-flash-preview`(デフォルト、$0.075/100万入力トークン、高速)
  - `anthropic/claude-sonnet-4.6`(高品質、約$3/100万入力トークン、より良い応答品質)

📚 後でナレッジベースを更新:
  `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'.

関連スキル