Communitygithub.com

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Instala um chatbot AI flutuante no canto inferior direito em um projeto Next.js existente (App Router ou Pages Router), totalmente responsivo (web + tablet + mobile), que chama LLMs via OpenRouter (padrão: google/gemini-3-flash-preview, configurável para anthropic/claude-sonnet-4.6), suporta streaming, renderiza Markdown no balão do assistente (negrito, listas, links, código) via react-markdown + remark-gfm — sem exibir negrito bruto — possui base de conhecimento a partir de FAQ e documentos do produto/curso fornecidos pelo usuário para respostas automáticas a clientes, e EXTRAI + SALVA LEADS automaticamente (nome + telefone + e-mail) no Upstash Redis/Vercel KV sob o namespace `chat-lead:{phone}` quando o usuário fornece todas as informações no chat — deduplicação por telefone, TTL de 90 dias, fire-and-forget sem bloquear o stream. A skill detecta automaticamente o número de projetos Next.js — se houver mais de um, pergunta ao usuário qual escolher; detecta TypeScript/JS, App Router/Pages Router, Tailwind/CSS module, disponibilidade de KV/Upstash (pula salvamento automático se não houver); instala react-markdown e remark-gfm automaticamente.

O que é MKT.LANDINGPAGE.SKILLS?

Esta skill para agentes de IA, como Claude Code, Cursor ou Codex, automatiza a instalação de um chatbot AI flutuante (canto inferior direito) em um projeto Next.js existente. Ela detecta automaticamente a configuração do projeto (App Router vs. Pages Router, TypeScript vs. JavaScript, Tailwind vs. CSS Modules) e a presença de armazenamento KV (Upstash Redis/Vercel KV), adaptando a instalação sem necessidade de intervenção manual. O chatbot utiliza a API do OpenRouter para chamar modelos de linguagem (LLMs) como Gemini ou Claude, oferecendo respostas com streaming e renderização de Markdown no balão do assistente, garantindo uma experiência de chat rica e profissional. Além disso, a skill configura um sistema de captura passiva de leads: quando um visitante fornece nome, telefone e e-mail durante a conversa, o chatbot extrai e salva automaticamente esses dados no KV (com deduplicação por telefone e TTL de 90 dias), sem interromper o fluxo da conversa. O agente guia o usuário por um processo de 6 etapas, desde a detecção do projeto até a configuração final, solicitando apenas informações essenciais como FAQ, documentos do produto e o tom de voz da marca.

Funciona com✓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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Biz Next.js Chatbot OpenRouter — Instale chatbot AI flutuante no site em 1 minuto

Esta skill insere um chatbot AI em forma de widget flutuante em um projeto Next.js existente. O widget fica no canto inferior direito, responsivo em 3 tamanhos de tela, chama LLMs via OpenRouter com base de conhecimento a partir de FAQ + documentos do curso/produto, renderiza Markdown no balão do assistente (negrito para números/preços, listas com marcadores, links clicáveis, código inline) usando react-markdown + remark-gfm, e extrai e salva leads automaticamente (nome + telefone + e-mail) no KV (Upstash Redis / Vercel KV) quando o usuário fornece todas as informações no chat — o administrador pode visualizá-los através do painel /admin. Objetivo: solopreneur / criador de cursos com bot de suporte automático 24/7 + captura passiva de leads diretamente na landing page de venda do curso, sem perder visitantes que perguntam via chat.

Espírito: Detecta automaticamente tudo que é possível (versão do Next.js, App/Pages Router, TS/JS, Tailwind/CSS), pergunta ao usuário apenas 4 coisas realmente necessárias: (1) qual projeto, se houver vários, (2) FAQ, (3) documentos do produto, (4) tom/nome da marca. O resto é código → funcionando em minutos.

Quando usar

O usuário deseja:

  • Adicionar um chatbot AI de suporte ao cliente na landing page de venda de cursos / serviços
  • Reduzir a carga de responder perguntas repetitivas (preço, cronograma, reembolso, público-alvo...)
  • Um widget de chat compacto no canto inferior direito, sem obstruir o conteúdo
  • Um chatbot que entenda precisamente o conteúdo do curso / produto (orientado a FAQ)
  • Já possui um projeto Next.js (acabou de executar /biz-sales-page-layout ou um projeto antigo)

Quando NÃO usar

  • Projeto não é Next.js (React puro Vite, Vue, Svelte, HTML simples) → esta skill é especializada em Next.js. Pode ser adaptada, mas não é ideal.
  • Necessita de chatbot com RAG (retrieval-augmented) e base de conhecimento com milhares de páginas → requer banco de dados vetorial (Pinecone/Supabase pgvector); esta skill usa um system prompt simples, adequado para conhecimento de até 20 mil tokens.
  • Necessita de chatbot com voz / multimodal (envio de imagens) → esta skill é apenas texto.
  • Necessita de chatbot que salve histórico de chat por usuário em um banco de dados → esta skill é stateless, com sessão efêmera; pode ser estendida posteriormente.
  • Backend não é compatível com Vercel (necessita de long polling, WebSocket persistente) → OpenRouter streaming funciona bem no Vercel Edge, mas se precisar de WebSocket dedicado, é diferente.

O que o usuário receberá

Após a execução da skill:

  1. Novos arquivos no projeto Next.js do usuário:

    • components/Chatbot.tsx (ou .jsx) — interface do widget (renderiza Markdown via react-markdown + remark-gfm)
    • app/api/chat/route.ts (App Router) OU pages/api/chat.ts (Pages Router) — proxy da API para chamar OpenRouter + extrair lead automaticamente após o stream
    • lib/chatbot-knowledge.ts (ou .js) — base de conhecimento + system prompt (inclui bloco de FORMATAÇÃO DE RESPOSTA + bloco de COLETA ATIVA DE LEAD)
    • lib/chat-lead.ts — CRIADO apenas se o projeto tiver KV/Upstash — extrator e salvador, deduplicação por telefone, TTL de 90 dias, namespace chat-lead:{telefone}
    • Estilos Markdown .chatbot-md anexados a app/globals.css (a partir de templates/chatbot-markdown-styles.css)
    • .env.local criado/atualizado com OPENROUTER_API_KEY= (placeholder)
    • .env.example (se ainda não existir) para documentar as variáveis de ambiente
    • Montagem do <Chatbot /> em app/layout.tsx ou pages/_app.tsx
  2. Pacotes adicionais instalados (via gerenciador de pacotes detectado pelo arquivo de lock):

    • react-markdown — renderiza Markdown com segurança (sem necessidade de dangerouslySetInnerHTML)
    • remark-gfm — GitHub Flavored Markdown (tabelas, links automáticos, texto tachado)
  3. Instruções claras ao final da sessão:

    • 3 passos que o usuário deve fazer manualmente: (a) obter a chave da API OpenRouter, (b) colar no .env.local, (c) npm run dev para testar
    • Como alternar entre os modelos Gemini e Sonnet
    • Como atualizar a base de conhecimento posteriormente

Fluxo de trabalho

Passo 1 — Detectar projeto Next.js

Procurar por projetos Next.js candidatos. Executar:

# Procurar package.json que contenha "next" nas dependências, profundidade máxima 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

(Se o usuário estiver em um diretório de trabalho específico, priorizar a busca a partir do cwd; fallback para ~/Documents/GitHub se não encontrar.)

Ramificações:

  • 0 projetos: Informar o usuário e parar. Sugerir: "Você tem algum projeto Next.js? Se não, gostaria que eu criasse um novo com /biz-sales-page-layout e depois voltássemos?"
  • 1 projeto: Confirmar o caminho com o usuário antes de prosseguir: "Instalarei o chatbot em [caminho]. Tudo bem?"
  • ≥ 2 projetos: Listar caminhos + nomes (name do package.json) em uma lista numerada e pedir para o usuário escolher: "Encontrei N projetos Next.js. Em qual você gostaria de instalar?"

Passo 2 — Analisar o contexto do projeto

Após o usuário confirmar o projeto, ler:

  1. package.json → verificar:

    • TypeScript (há typescript nas dependências?)
    • Tailwind (há tailwindcss nas devDependências?)
    • Gerenciador de pacotes (arquivo de lock: pnpm-lock.yaml → pnpm, yarn.lock → yarn, padrão npm)
    • Versão do Next.js
  2. Estrutura de diretórios → verificar:

    • Diretório app/ existe → App Router
    • Diretório pages/ existe (e app/ não existe) → Pages Router
    • Ambos existem → priorizar App Router para novos arquivos (Next.js está migrando para ele)
    • Wrapper src/ → ajustar caminhos (ex.: src/app/, src/components/)
  3. tsconfig.json → verificar alias de caminho (@/* → ./src/* ou ./*)

  4. .env.local, .env.example → verificar se já existem

  5. Disponibilidade de KV/Upstash (para captura automática de leads):

    • package.json possui @upstash/redis OU @vercel/kv → tem KV → CRIAR chat-lead.ts + conectar à rota
    • Existe arquivo src/lib/kv.ts (ou lib/kv.ts) exportando kv → usar o helper existente (padrão do campo)
    • Não tem KV → PULAR criação de chat-lead.ts, informar usuário: "O projeto ainda não possui KV — a captura automática de leads não será ativada. Posso executar /biz-setup-sepay-payment para instalar o KV primeiro e depois voltar para ativar a captura, ou podemos pular."

Guardar essas observações em uma pequena tabela para usar nas próximas etapas.

Passo 3 — Coletar a base de conhecimento do usuário

Fazer 4 perguntas ao usuário (agrupadas em uma única mensagem para evitar idas e vindas):

Para o chatbot responder com precisão, preciso de 4 coisas:

1. **FAQ** — lista de perguntas frequentes + respostas (preço, cronograma, reembolso, público-alvo, tempo de estudo, suporte pós-curso...).
   Você pode colar o conteúdo diretamente aqui OU informar o caminho do arquivo (.md / .txt / .docx).

2. **Documentos do produto / curso** — descrição detalhada do curso: nome, conteúdo de cada módulo, resultados esperados, instrutor, bônus, tiers de preço se houver.
   Também pode colar ou informar o caminho do arquivo.

3. **Nome da marca + tom** — Nome da marca/curso para o chatbot se apresentar (ex.: "assistente da AI Mastery"). Tom do bot: amigável (padrão) / formal / casual.

4. **Modelo** — padrão `google/gemini-3-flash-preview` (rápido, barato, bom o suficiente para suporte). Se preferir `anthropic/claude-sonnet-4.6` (maior qualidade, ~10x mais caro) para estágios iniciais com baixo volume, me avise.

Pode responder tudo de uma vez?

Quando o usuário responder:

  • Se informar apenas o caminho do arquivo → ler o arquivo com a ferramenta Read.
  • Se colar o conteúdo diretamente → usar o conteúdo colado.
  • Se o usuário disser "crie um placeholder para mim" → gerar um FAQ placeholder genérico e marcar com // TODO: preencher pelo usuário para que ele saiba que precisa atualizar.
  • Se não houver nome da marca → usar padrão "Assistente AI" e tratamento amigável.

Passo 4 — Gerar os arquivos no projeto

Ler os templates em templates/ desta skill e adaptá-los ao projeto. Os templates:

  • templates/chatbot-knowledge.ts — Módulo que exporta a base de conhecimento + systemPrompt. Injetar FAQ, informações do produto, nome da marca e tom. Já inclui bloco de FORMATAÇÃO DE RESPOSTA (regras de markdown) + bloco de COLETA ATIVA DE LEAD (ensina o LLM a solicitar nome/telefone/e-mail quando houver sinal de compra, agradecer e confirmar quando o usuário fornecer, NÃO mencionar "salvo no banco de dados").
  • templates/Chatbot.tsx — Componente do widget, priorizando Tailwind. Já importa react-markdown + remark-gfm, renderiza a mensagem do assistente com <ReactMarkdown remarkPlugins={[remarkGfm]}> (apenas assistente — mensagens do usuário continuam com whitespace-pre-wrap). Se o projeto NÃO tiver Tailwind → fallback para templates/Chatbot-noTailwind.tsx + templates/chatbot.module.css.
  • templates/chat-route-app.ts — Rota da API para App Router (app/api/chat/route.ts). Já inclui o hook persistLeadIfReady executado de forma assíncrona após o fechamento do stream — não bloqueia a resposta.
  • templates/chat-route-pages.ts — Rota da API para Pages Router (pages/api/chat.ts).
  • templates/chat-lead.ts — CRIADO apenas se o projeto tiver KV/Upstash — extrai telefone VN, e-mail e nome (heurística: padrões de introdução "nome X" / "me chamo X" / "nome: X"), saveChatLead com deduplicação por telefone, TTL de 90 dias, namespace de chave chat-lead:{telefone}.
  • templates/chatbot-markdown-styles.css — Trecho CSS para a classe .chatbot-md. DEVE ser anexado ao final de app/globals.css (ou src/app/globals.css / styles/globals.css). Alterar a cor de destaque (#fde68a / #f59e0b) de acordo com a paleta da marca do projeto antes de anexar.
  • templates/env-instructions.md — Trecho de instruções para obter a chave OpenRouter, usado na etapa final.

Regras ao adaptar templates:

  1. TS vs JS: se o projeto tiver apenas JS, alterar a extensão .ts/.tsx → .js/.jsx e remover anotações de tipo (não apenas renomear o arquivo). Ler o arquivo de exemplo, fazer o parse, remover tipos e escrever.

  2. Alias de caminho: se o tsconfig mapear @/* → ./src/*, os imports no template devem usar @/lib/chatbot-knowledge e o arquivo deve ser colocado em src/lib/. Se não houver alias, usar caminho relativo.

  3. Modelo: substituir placeholder __MODEL_ID__ pelo modelo escolhido pelo usuário (google/gemini-3-flash-preview ou anthropic/claude-sonnet-4.6).

  4. Marca: substituir __BRAND_NAME__, __BRAND_TONE__.

  5. Conhecimento: construir systemPrompt a partir do FAQ + informações do produto de forma estruturada e clara (ver template). Manter o bloco de FORMATAÇÃO DE RESPOSTA no systemPrompt — é ele que ensina o LLM a gerar markdown adequado para um balão de chat (negrito em vez de título, marcadores curtos de uma linha).

  6. Instalar pacotes de renderização de markdown (OBRIGATÓRIO — se pular, o chatbot exibirá **negrito** bruto em vez de texto em negrito no balão):

    # detectar arquivo de lock → escolher o gerenciador de pacotes correto
    npm install react-markdown remark-gfm
    # ou: pnpm add react-markdown remark-gfm
    # ou: yarn add react-markdown remark-gfm
    
  7. Anexar estilos markdown: ler templates/chatbot-markdown-styles.css, trocar a cor de destaque pela paleta da marca do projeto (verificar globals.css em busca de --color-primary ou equivalente) e anexar ao final de app/globals.css (ou src/app/globals.css / styles/globals.css).

  8. Montar widget:

    • App Router: editar app/layout.tsx (ou src/app/layout.tsx), adicionar import Chatbot from '@/components/Chatbot' e <Chatbot /> imediatamente antes de </body>. Ler o layout.tsx atual antes de editar para manter metadados, fontes, providers.
    • Pages Router: editar pages/_app.tsx, encapsular o retorno: <><Component {...pageProps} /><Chatbot /></>. Ler _app antes, manter providers existentes.
  9. Conexão da captura automática de leads (fazer apenas se o KV foi detectado no Passo 2):

    • Copiar templates/chat-lead.ts para lib/chat-lead.ts (ou src/lib/chat-lead.ts).
    • Se o projeto AINDA NÃO tiver lib/kv.ts → criar: import { Redis } from "@upstash/redis"; export const kv = Redis.fromEnv();
    • O handler da rota deve importar: import { extractLeadFromMessages, saveChatLead } from "@/lib/chat-lead".
    • No loop do stream: rastrear assistantText (acumular delta); quando o stream fechar → chamar persistLeadIfReady(history, assistantText) (fire-and-forget, NÃO aguardar no caminho da resposta).
    • System prompt: garantir que o bloco de COLETA ATIVA DE LEAD já esteja em chatbot-knowledge.ts (o template já o inclui).
    • Confirmar com o usuário: "Ativei a captura automática de leads — quando um visitante fornecer nome/telefone/e-mail no chat, o sistema salvará automaticamente no KV sob o namespace chat-lead:{telefone}. Você pode visualizar os leads em /admin (se já instalou /biz-admin-leads-dashboard)."

Passo 5 — Configurar .env.local + .gitignore

  1. Verificar se .env.local já existe:

    • Não: criar com:
      # Chave da API OpenRouter — Obter em https://openrouter.ai/keys
      OPENROUTER_API_KEY=
      
      # Opcional: URL do site para OpenRouter rastrear o referenciador (ajuda com rate limit)
      NEXT_PUBLIC_SITE_URL=http://localhost:3000
      
    • Sim: anexar as 2 variáveis acima se não existirem, sem sobrescrever variáveis existentes.
  2. Atualizar .env.example (criar se não existir):

    OPENROUTER_API_KEY=sk-or-v1-xxxxx
    NEXT_PUBLIC_SITE_URL=https://seu-dominio.com
    
  3. Verificar .gitignore — .env.local já está incluído? Se não → anexar .env.local e .env*.local.

Passo 6 — Relatório para o usuário

Exibir 1 mensagem de resumo clara com 4 partes:

✅ Chatbot instalado em [nome do projeto]

📁 Arquivos criados:
  - components/Chatbot.tsx (renderiza markdown via react-markdown + remark-gfm)
  - app/api/chat/route.ts
  - lib/chatbot-knowledge.ts
  - app/globals.css (estilos markdown .chatbot-md anexados)
  - .env.local (placeholder)

📦 Pacotes instalados: react-markdown, remark-gfm

🔑 3 passos que você precisa fazer para o chatbot funcionar:

1. Obter a chave da API OpenRouter:
   - Acesse https://openrouter.ai → Cadastre-se (pode entrar com Google)
   - Vá para https://openrouter.ai/keys → Criar Chave
   - Adicione créditos (https://openrouter.ai/credits) — Gemini 3 Flash é barato, $5 é suficiente para milhares de conversas
   - Copie a chave no formato `sk-or-v1-xxxxx`

2. Cole no arquivo `.env.local`:
   OPENROUTER_API_KEY=sk-or-v1-xxxxx-cole-aqui

3. Teste:
   [npm/pnpm/yarn] run dev
   Abra http://localhost:3000 → clique no balão no canto inferior direito

🔄 Para alternar entre Gemini ↔ Sonnet:
  Abra `app/api/chat/route.ts` e altere a variável `model:` no início do arquivo.
  - `google/gemini-3-flash-preview` (padrão, $0.075/1M tokens de entrada, rápido)
  - `anthropic/claude-sonnet-4.6` (avançado, ~$3/1M tokens de entrada, melhor qualidade)

📚 Para atualizar a base de conhecimento posteriormente:
  Edite `lib/chatbot-knowledge.ts` — adicione/altere FAQ e productInfo, salve, recarregue.

Design responsivo mobile-first

O widget deve atender a 3 breakpoints:

BreakpointComportamento
≤ 640px (mobile)Clicar no balão → abre em tela cheia (z-index 9999), cabeçalho com botão X para fechar. Input fixado na parte inferior com safe-area-inset para não ser coberto pelo teclado.
641–1023px (tablet)Painel de 380px × 70vh, ancorado no canto inferior direito com margem de 16px.
≥ 1024px (desktop)Painel de 400px × 600px, ancorado no canto inferior direito com margem de 24px. Balão redondo de 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'.

Habilidades Relacionadas