Communitygithub.com

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

在现有 Next.js 项目中安装一个浮动式 AI 聊天机器人小部件,支持流式响应和 Markdown 渲染,并能自动提取和保存潜在客户信息。

MKT.LANDINGPAGE.SKILLS 是什么?

该技能旨在为 Next.js 项目(App Router 或 Pages Router)快速集成一个位于右下角的浮动 AI 聊天机器人小部件。它完全响应式,完美适配网页、平板和手机端。聊天机器人的后端通过 OpenRouter API 调用大语言模型(默认使用 `google/gemini-3-flash-preview`,可切换为 `anthropic/claude-sonnet-4.6`),并支持流式响应。其关键特性包括:使用 `react-markdown` 和 `remark-gfm` 在助手气泡中渲染 Markdown(粗体、列表、链接、代码等),避免显示原始 Markdown 文本;支持基于用户提供的 FAQ 和产品/课程文档的知识库,以便自动回复客户;当用户在聊天中提供了完整的姓名、电话号码和电子邮件信息时,能自动提取这些信息作为潜在客户,并将其去重(按手机号)存入 Upstash Redis 或 Vercel KV 中(命名空间 `chat-lead:{phone}`,TTL 90 天),且此保存过程为“即发即弃”模式,不会阻塞流式响应。该技能会自动检测项目中的 Next.js 项目数量(如果多于一个会询问用户),并自动检测 TypeScript/JS、App/Pages Router、Tailwind/CSS Modules 以及 KV/Upstash 的可用性(如果不存在则跳过自动保存)。此外,它会自动安装 `react-markdown` 和 `remark-gfm` 包来实现 Markdown 渲染。

兼容平台✓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 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Biz Next.js Chatbot OpenRouter — 一步为网站安装AI浮动聊天机器人

此技能将一个AI浮动聊天机器人小部件嵌入到现有的 Next.js 项目中。小部件位于右下角,完全响应式适配三种屏幕尺寸。它通过 OpenRouter 调用 LLM,并使用来自 FAQ 和课程/产品文档的知识库。在助手气泡中使用 react-markdown + remark-gfm 渲染 Markdown(数字/价格加粗、项目符号列表、可点击链接、内联代码),并能自动提取并保存潜在客户信息(姓名 + 电话 + 邮箱)到 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(检索增强生成)聊天机器人→ 需要向量数据库(Pinecone/Supabase pgvector),此技能使用简单的 system prompt,适用于 ≤ 20K token 的知识。
  • 需要语音/多模态聊天机器人(发送图片)→ 此技能仅支持文本。
  • 需要为每个用户将聊天历史记录保存到数据库→ 此技能为无状态、临时会话,后续可扩展。
  • 后端不适用于 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)— 知识库 + system prompt(包含回复格式化块 + 主动潜在客户收集块)
    • 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 风格的 Markdown(表格、自动链接、删除线)
  3. 会话结束时的明确指南:

    • 用户必须自行完成的 3 个步骤:(a) 获取 OpenRouter API 密钥,(b) 粘贴到 .env.local,(c) npm run dev 测试
    • 如何在 Gemini 和 Sonnet 之间切换模型
    • 如何稍后更新知识库

工作流程

步骤 1 — 检测 Next.js 项目

查找 Next.js 项目候选。运行:

# 查找 package.json 中包含 "next" 依赖项的文件,最大深度 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 个项目: 在继续之前与用户确认路径:“我将把聊天机器人安装到 [路径]。您同意吗?”
  • ≥ 2 个项目: 列出路径和名称(来自 package.json 的 name),编号列表,让用户选择:“我发现了 N 个 Next.js 项目。您想安装到哪一个?”

步骤 2 — 探测项目上下文

在用户确认项目后,读取:

  1. package.json → 检查:

    • TypeScript(deps 中是否有 typescript?)
    • Tailwind(devDeps 中是否有 tailwindcss?)
    • 包管理器(锁文件: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 → 直接使用现有 helper(营地模式)
    • 没有 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: 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 时才搭建 — 正则表达式提取越南电话 + 邮箱 + 名称启发式(介绍模式“我叫 X”/“我是 X”/“姓名: 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/*,则模板中的导入必须使用 @/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 的关键(使用粗体代替标题,一行一个短项目符号)。

  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' 并在 </body> 前添加 <Chatbot />。在编辑前读取当前的 layout.tsx 以保留 metadata、fonts、providers。
    • Pages Router: 编辑 pages/_app.tsx,包装 return:<><Component {...pageProps} /><Chatbot /></>。在编辑前读取 _app,保留现有的 providers。
  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)(即发即弃,不要在响应路径中等待)。
    • System prompt:确保主动潜在客户收集块已存在于 chatbot-knowledge.ts 中(模板已包含)。
    • 向用户确认: “我已启用自动潜在客户捕获 — 当客户在聊天中粘贴姓名/电话/邮箱时,系统会自动保存到 KV 命名空间 chat-lead:{SĐT}。您可以通过 /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. 更新 .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 → 创建密钥
   - 充值信用额度(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/1M 输入,快速)
   - `anthropic/claude-sonnet-4.6`(高级,~$3/1M 输入,质量更好)

📚 日后更新知识库:
   编辑 `lib/chatbot-knowledge.ts` — 添加/修改 FAQ 和 productInfo,保存,热重载即可。

移动优先的响应式设计

小部件必须满足三种断点:

断点行为
≤ 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'.

相关技能