Communitygithub.com

lexuanthanhhy/MKT.LANDINGPAGE.SKILLS

Pipeline vidéo courte de bout en bout — du script (VN/EN) au MP4 TikTok/Reels 9:16 complet. Orchestrateur en 3 phases utilisant des compétences existantes.

Qu'est-ce que MKT.LANDINGPAGE.SKILLS ?

Ce skill orchestre un pipeline complet de production vidéo courte (TikTok/Reels) au format 9:16, depuis un script texte jusqu'au fichier MP4 final. Il combine plusieurs étapes : (1) synthèse vocale (TTS) au choix entre ElevenLabs (voix de Hoàng par défaut) ou MiniMax (moteur speech-2.8-hd, plus économique et naturel en vietnamien), (2) un point de contrôle utilisateur pour valider le fichier MP3 généré, (3) la création d'un avatar lip-sync via HeyGen à partir du MP3, et enfin (4) une phase de packaging déléguée à un sous-agent dédié qui gère la transcription, le découpage en scènes, le point de contrôle utilisateur, la génération parallèle du contenu de chaque scène, l'assemblage et l'aperçu dans Studio. Les clés API et IDs vocaux des deux fournisseurs sont stockés dans le fichier `.env`. Ce skill est utilisé lorsque l'utilisateur demande explicitement la création d'une vidéo complète à partir d'un script, avec ou sans images/vidéos b-roll optionnelles.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lexuanthanhhy/MKT.LANDINGPAGE.SKILLS/tree/HEAD/.claude/skills/mkt-full-video-with-11-hyperframe-heygen

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

mkt-full-video-with-11-hyperframe-heygen

Orchestrateur de bout en bout : script → final TikTok/Reels MP4 9:16.

Pipeline avec 2 points de contrôle utilisateur :

  1. Point de contrôle MP3 (orchestrateur) — après la Phase 1, l'utilisateur valide la voix off.
  2. Point de contrôle du plan de scènes (sous-agent Phase 3) — l'utilisateur valide la structure des scènes + la variante avant le déploiement des rédacteurs de contenu. Peut être ignoré si l'utilisateur passe auto_scenes=true.

Quand l'utiliser

  • L'utilisateur a un script en vietnamien ou en anglais de ≤ 5000 caractères et souhaite obtenir une vidéo TikTok complète.
  • L'utilisateur a des images ou vidéos b-roll (optionnelles) avec un objectif d'utilisation précis.
  • L'utilisateur souhaite parcourir tout le pipeline du script jusqu'à l'aperçu dans Studio.

Ne pas utiliser ce skill si :

  • L'utilisateur a déjà un fichier MP3 → utiliser directement heygen-mp3-to-mp4.
  • L'utilisateur a déjà une vidéo talking-head au format MP4 → utiliser directement mkt-hyperframe-talking-head-video.
  • L'utilisateur a besoin que HeyGen lise le texte directement (sans passer par ElevenLabs) → utiliser heygen-script-to-mp4.
  • Le script fait plus de 5000 caractères → diviser sémantiquement puis appeler le pipeline pour chaque segment.

Aperçu du pipeline

Script (texte + b-roll optionnel + tts_provider)
    │
    ▼
Phase 1 ── TTS (elevenlabs | minimax) ──► voiceover.mp3
    │                                         │
    │                                         ▼
    │                              POINT DE CONTRÔLE #1 — l'utilisateur écoute et valide le MP3
    │                                         │
    │                                         ▼ (OK)
Phase 2 ── heygen-mp3-to-mp4 ──────────► source.mp4 (9:16 lip-sync)
    │
    ▼
Phase 3 ── lancement de l'agent mkt-full-video-phase3-packager (contexte isolé)
            │
            ├─ transcrire + nettoyer + regrouper les sous-titres
            ├─ détecter les limites des scènes + classer la variante mockup
            ├─ POINT DE CONTRÔLE #2 — l'utilisateur valide le plan des scènes
            ├─ DÉPLOIEMENT PARALLÈLE de N sous-agents génériques (1 par scène)
            │   → chaque sous-agent construit un JSON de contenu selon le schéma de variante
            ├─ fusionner → scenes.json
            ├─ parallèle : générer les sous-composants + copier les SFX + injecter les sous-titres
            ├─ générer le fichier index.html racine
            └─ lint + aperçu dans Studio
    │
    ▼
L'utilisateur valide l'aperçu → "render" → MP4 final

Règle des points de contrôle : L'orchestrateur gère le point de contrôle #1 (MP3). Les phases 2 → 3 s'exécutent automatiquement. Le point de contrôle #2 (plan des scènes) est géré par le sous-agent de la Phase 3. La validation finale du rendu se fait dans Studio.

Entrées

EntréeRequiseFormat / exemple
Texte du scriptOuiChemin de fichier (.txt/.md) ou chaîne inline. ≤ 5000 caractères.
Slug du projetNonDérivé automatiquement des 5 premiers mots du script. Minuscules, ASCII, tirets.
Liste b-rollNonTableau [{path: "...", purpose: "Leçon 1 — illustration X"}, ...].
tts_providerNonelevenlabs (par défaut — voix de Hoàng, expressive) ou minimax (speech-2.8-hd, moins cher, lecture vietnamienne naturelle). L'utilisateur dit "utiliser minimax" / "utiliser eleven" → défini en conséquence.
Remplacement de l'ID vocalNonRemplace la valeur par défaut du fichier .env. ElevenLabs lit ELEVENLABS_VOICE_ID, MiniMax lit MINIMAX_VOICE_ID. Indicateur CLI --voice_id pour les deux.
Remplacement des réglages vocauxNonElevenLabs : {stability, similarity_boost, style}. MiniMax : {speed, vol, pitch}.
Apparence de l'avatarNon1 ID issu de la variable d'environnement HEYGEN_AVATAR_LOOKS (.env, séparés par des virgules). Aléatoire si non spécifié.
auto_scenesNonPar défaut false. true pour ignorer le point de contrôle du plan de scènes dans la Phase 3.

Structure de l'espace de travail

workspace/content/YYYY-MM-DD/<slug>/
├── script.txt              # Phase 0
├── voiceover.mp3           # Phase 1
├── source.mp4              # Phase 2
├── broll/                  # B-roll fourni par l'utilisateur (copie)
├── transcript.json         # Phase 3
├── caption-groups.json     # Phase 3
├── scenes-outline.json     # Phase 3 — plan avant point de contrôle
├── scenes/                 # Phase 3 — écriture du contenu par scène ici
│   ├── scene-1.json
│   └── ...
├── scenes.json             # Phase 3 — fusion finale
├── compositions/           # Phase 3 — sous-composants HF
├── sfx/                    # Phase 3 — 6 SFX
└── index.html              # Phase 3 — composition racine

YYYY-MM-DD = date du jour (UTC+7).

Flux de travail

Étape 0 — Configuration

  1. Valider len(script_text) <= 5000. Si dépassé → stop, demander à l'utilisateur de diviser sémantiquement.
  2. Dériver le slug si manquant : 5 premiers mots → minuscules → supprimer les accents → espace→tiret.
  3. Résoudre le fournisseur TTS — lire tts_provider à partir de l'entrée utilisateur (par défaut elevenlabs). Si l'utilisateur dit "utiliser minimax" / "passer à minimax" → minimax. Si l'utilisateur dit "utiliser eleven" / "elevenlabs" → elevenlabs. Valider que la clé API correspondante est présente dans .env :
    • elevenlabs → nécessite ELEVENLABS_API_KEY (optionnel ELEVENLABS_VOICE_ID pour remplacer la valeur par défaut K7ewtjKRNtwwt3lKQ6M0).
    • minimax → nécessite MINIMAX_API_KEY (optionnel MINIMAX_VOICE_ID pour remplacer la valeur par défaut moss_audio_c56d6120-ef9c-11f0-9649-8ee40147f116). Si la clé manque → stop, informer l'utilisateur de l'ajouter à .env.
  4. Créer le dossier workspace/content/YYYY-MM-DD/<slug>/. Sauvegarder script.txt.
  5. Si l'utilisateur a des b-roll : créer le dossier <folder>/broll/, copier les fichiers en conservant le nom d'origine.
  6. Informer l'utilisateur : "Espace de travail créé dans <folder>. Fournisseur TTS : <elevenlabs|minimax>. Début de la Phase 1."

Étape 1 — Phase 1 : Script → MP3 (TTS)

Exécuter exactement 1 des 2 branches selon tts_provider :

Branche A — ElevenLabs (par défaut) :

uv run .claude/skills/mkt-elevenlabs-tts-to-mp3/scripts/text_to_mp3.py \
  --file workspace/content/YYYY-MM-DD/<slug>/script.txt \
  -o workspace/content/YYYY-MM-DD/<slug>/voiceover.mp3

ID vocal : lecture automatique de ELEVENLABS_VOICE_ID depuis .env (valeur par défaut : la voix de marque de Hoàng). Remplacement CLI : --voice_id <id>. Réglages vocaux : ajouter --stability / --similarity_boost / --style si l'utilisateur demande des ajustements.

Branche B — MiniMax :

uv run .claude/skills/mkt-video-script-to-mp3/scripts/text_to_mp3.py \
  --file workspace/content/YYYY-MM-DD/<slug>/script.txt \
  -o workspace/content/YYYY-MM-DD/<slug>/voiceover.mp3

ID vocal : lecture automatique de MINIMAX_VOICE_ID depuis .env (valeur par défaut moss_audio_…). Remplacement CLI : --voice_id <id>. Réglages vocaux : --speed (par défaut 1.08), --vol, --pitch, --language_boost Vietnamese.

Nom de fichier de sortie inviolable pour les deux branches : voiceover.mp3 afin que la Phase 2 (HeyGen) trouve le bon chemin.

Une fois terminé, vérifier la durée (commun aux deux fournisseurs) :

uv run .claude/skills/heygen-mp3-to-mp4/scripts/check_duration.py \
  workspace/content/YYYY-MM-DD/<slug>/voiceover.mp3

TOO_LONG → stop, informer l'utilisateur que le MP3 dure plus de 5 minutes (limite HeyGen), demander de réduire le script.

Étape 2 — POINT DE CONTRÔLE #1 : l'utilisateur écoute le MP3

Seul point d'arrêt géré par l'orchestrateur. Informer l'utilisateur avec le format suivant :

## Voix off prête — merci de valider

**Fichier :** `workspace/content/YYYY-MM-DD/<slug>/voiceover.mp3`
**Durée :** <X.X>s
**Taille :** <Y.Y> Mo
**Fournisseur :** <`elevenlabs` | `minimax`>
**Voix :** <`Voix de marque ElevenLabs de Hoàng (K7ewtjKRNtwwt3lKQ6M0)`> ou <`MiniMax speech-2.8-hd (moss_audio_…)`> (à partir de l'ID vocal du fichier `.env` si l'utilisateur a remplacé)

Ouvrez le fichier pour écouter. Répondez par l'une des options suivantes :
- **`OK`** / **`continuer`** → je lance la Phase 2 (avatar HeyGen lip-sync)
- **`regen`** + (optionnel) raison → j'ajuste les réglages vocaux et je regénère le MP3
- **`modifier le script`** + nouveau contenu → je sauvegarde le nouveau script et je relance la Phase 1

Arrêter les appels d'outils. Attendre une réponse claire de l'utilisateur.

Quand l'utilisateur répond OK → Phase 2. Quand l'utilisateur répond regen → relancer le script TTS du fournisseur actuel avec de nouveaux réglages, revenir au point de contrôle. Si l'utilisateur dit "passer à minimax" / "essayer eleven" → changer tts_provider, relancer la Phase 1. Quand l'utilisateur modifie le script → écraser script.txt, relancer la Phase 1 depuis le début (même fournisseur).

Étape 3 — Phase 2 : MP3 → MP4 HeyGen (automatique)

Selon le sous-skill heygen-mp3-to-mp4 :

  1. Choisir un ID d'avatar — lire HEYGEN_AVATAR_LOOKS depuis .env (séparé par des virgules), choisir aléatoirement si l'utilisateur n'a pas spécifié :

    HEYGEN_AVATAR_LOOKS=$(grep '^HEYGEN_AVATAR_LOOKS=' .env | cut -d'=' -f2- | tr -d '"' | tr -d "'")
    echo "$HEYGEN_AVATAR_LOOKS" | tr ',' '\n' | awk 'BEGIN{srand()} {a[NR]=$0} END{print a[int(rand()*NR)+1]}'
    

    Si la variable d'environnement est manquante/vide → stop et informer l'utilisateur d'ajouter HEYGEN_AVATAR_LOOKS=<id1>,<id2> dans .env. Demander à l'utilisateur de choisir avant d'appeler MCP.

  2. Télécharger le MP3 vers HeyGen via MCP (upload_asset, type d'actif audio). NE PAS utiliser curl https://upload.heygen.com/....

  3. Créer la vidéo avatar via MCP (generate_avatar_video) :

    character: { type: avatar, avatar_id: <choisi>, scale: 1.0 }
    voice:     { type: audio, audio_asset_id: <id du téléchargement> }
    dimension: { width: 720, height: 1280 }   # 9:16
    title:     "<slug>-<timestamp>"
    
  4. Interroger le statut toutes les ~10s → completed (limite de 10 min). failed → stop, afficher l'erreur.

  5. Télécharger le MP4 → workspace/content/YYYY-MM-DD/<slug>/source.mp4 (nom de fichier inviolable) :

    uv run .claude/skills/heygen-mp3-to-mp4/scripts/download_video.py \
      "<video_url>" "workspace/content/YYYY-MM-DD/<slug>/source.mp4"
    
  6. Informer l'utilisateur en une ligne : "Phase 2 terminée — <path> (avatar <id>, <durée>s, Mo). Lancement du packager Phase 3…"

Ne pas s'arrêter ici. Passer automatiquement à la Phase 3.

Étape 4 — Phase 3 : Lancer le sous-agent packager

Utiliser l'outil Task avec subagent_type: "mkt-full-video-phase3-packager". Passer une invite autonome contenant les entrées nécessaires à l'agent. Exemple :

Espace de travail : workspace/content/2026-05-03/hom-nay-minh-chia-se/
Slug : hom-nay-minh-chia-se
Script : <texte complet du script>
B-roll : [
  {"path": "workspace/content/2026-05-03/hom-nay-minh-chia-se/broll/alphabet.png", "purpose": "Leçon 1"},
  ...
]
auto_scenes : false
header_label : "3 LEÇONS IA"
footer_handle : "@tranvanhoang.com"

Exécutez le pipeline complet de packaging Phase 3 selon votre définition d'agent. Retournez l'URL Studio une fois l'aperçu ouvert.

Le sous-agent :

  • Transcrit source.mp4, construit le plan des scènes
  • S'arrête pour demander à l'utilisateur d'approuver le plan (POINT DE CONTRÔLE #2) sauf si auto_scenes: true
  • Déploie N rédacteurs de contenu de scènes en parallèle
  • Fusionne + génère la structure + lint + ouvre l'aperçu
  • Retourne l'URL Studio

Pendant que le sous-agent s'exécute, le seul travail de l'orchestrateur est de transmettre les réponses de l'utilisateur au sous-agent (la réponse de l'utilisateur au point de contrôle du plan de scènes arrivera dans cette conversation ; la rediriger vers le sous-agent s'il est toujours actif, sinon la traiter comme une instruction de suivi).

Étape 5 — Passation

Lorsque le sous-agent retourne l'URL Studio, formater le rapport final :

## Pipeline vidéo complet TERMINÉ — aperçu prêt

**Espace de travail :** `workspace/content/YYYY-MM-DD/<slug>/`

**Phase 1 (`<elevenlabs|minimax>`) :** voiceover.mp3 — <D1>s, <S1>Mo (ID vocal `<id>`)
**Phase 2 (HeyGen) :** source.mp4 — avatar `<avatar_id>`, <D2>s, <S2>Mo
**Phase 3 (HyperFrames) :** <N> scènes (<liste des variantes>), <K> groupes de sous-titres, 6 SFX

**URL Studio :** http://localhost:3002

Ouvrez le navigateur et parcourez la timeline. Dites **`render`** quand c'est OK → je lance `npx hyperframes render` pour exporter le MP4 1080×1920 30fps.

S'arrêter ici. Ne pas lancer automatiquement le rendu. Attendre la confirmation de l'utilisateur avant d'appeler npx hyperframes render.

Règles critiques d'orchestration

  1. 2 points de contrôle utilisateur, 1 porte d'orchestrateur — L'orchestrateur s'arrête uniquement au MP3 (Étape 2). Le point de contrôle du plan de scènes est géré par le sous-agent Phase 3. La porte de rendu est dans Studio, gérée par l'utilisateur.

  2. Conventions de chemin inviolables — la voix off doit être voiceover.mp3, la talking-head doit être source.mp4. Le sous-skill HF attend le nom source.mp4.

  3. HeyGen MCP uniquement — ne jamais utiliser curl https://api.heygen.com/.... Contrainte forte de heygen-mp3-to-mp4.

  4. ID vocal stocké dans .env, non codé en dur dans le skill. ElevenLabs lit ELEVENLABS_VOICE_ID (valeur par défaut K7ewtjKRNtwwt3lKQ6M0). MiniMax lit MINIMAX_VOICE_ID (valeur par défaut moss_audio_…). Remplacement par appel via --voice_id. Le pipeline indique clairement le fournisseur + l'ID vocal choisis à l'Étape 0 et au point de contrôle #1.

  5. Limite stricte du script : 5000 caractères — échec rapide à l'Étape 0.1.

  6. Durée du MP3 ≤ 300s — limite d'une seule vidéo HeyGen. Vérifier immédiatement après la Phase 1.

  7. Aperçu d'abord — La Phase 3 NE fait PAS de rendu automatique. Mémoire feedback_hyperframes_workflow.md.

  8. Isolation de la Phase 3 — La Phase 3 s'exécute dans un contexte de sous-agent dédié. Le corps du skill HF + 4 documents de référence (~40 Ko) sont chargés dans le sous-agent plutôt que dans l'orchestrateur principal.

Modes d'échec et solutions de repli

SymptômeAction
Script > 5000 caractèresStop, demander à l'utilisateur de diviser sémantiquement
Échec de l'API ElevenLabsSignaler l'erreur, suggérer de vérifier ELEVENLABS_API_KEY dans .env (optionnel ELEVENLABS_VOICE_ID). Ou passer à tts_provider=minimax et relancer la Phase 1
Échec de l'API MiniMaxSignaler l'erreur, suggérer de vérifier MINIMAX_API_KEY dans .env (optionnel MINIMAX_VOICE_ID). Ou passer à tts_provider=elevenlabs et relancer la Phase 1
MP3 > 300s après Phase 1Arrêter le pipeline, suggérer heygen-short-video (fractionnement)
HeyGen MCP non connectéStop, informer de vérifier avec claude mcp list
Échec du rendu HeyGenAfficher l'erreur, suggérer de vérifier les crédits via mcp__heygen__get_current_user
Échec du sous-agent Phase 3Lire la trace d'erreur, suggérer à l'utilisateur de relancer la Phase 3 de manière autonome avec le skill mkt-hyperframe-talking-head-video
Le rédacteur de scène renvoie un JSON mal forméLe sous-agent relance automatiquement pour cette scène (ne relève pas de l'orchestrateur)
L'utilisateur rejette la voix MP3Revenir à la Phase 1 avec des réglages vocaux ajustés

Exemple de bout en bout

Utilisateur :

J'ai un script, lance le pipeline complet pour une vidéo TikTok. Avec 2 images b-roll pour les leçons 1 et 2. Script : "Aujourd'hui je partage 3 leçons d'Anthropic. La première leçon est Alphabet ship beta. La deuxième leçon est 24h…" B-roll : alphabet.png (leçon 1), clock.png (leçon 2)

Pipeline :

  1. Étape 0 — slug hom-nay-minh-chia-se. Dossier workspace/content/2026-05-03/hom-nay-minh-chia-se/. Sauvegarder script.txt, copier le b-roll.
  2. Étape 1 — text_to_mp3.py → voiceover.mp3 (45s, 0.7 Mo).
  3. Étape 2 — POINT DE CONTRÔLE #1 — informer l'utilisateur du chemin + durée. Attendre la réponse.
  4. Utilisateur : OK.
  5. Étape 3 — Choisir un avatar (aléatoirement depuis HEYGEN_AVATAR_LOOKS, par exemple 66e75e22…). Télécharger le MP3 → asset_id. Générer la vidéo → interroger → télécharger source.mp4 (45s, 7.5 Mo).
  6. Étape 4 — Lancer le sous-agent mkt-full-video-phase3-packager.
  7. Le sous-agent transcrit (35s), construit le plan (3 leçons + récapitulatif + CTA), affiche le plan → POINT DE CONTRÔLE #2.
  8. Utilisateur : OK.
  9. Le sous-agent déploie 5 rédacteurs de scènes en parallèle (~8s temps réel vs ~40s séquentiel).
  10. Le sous-agent fusionne → scenes.json → génération de la structure + SFX + sous-titres parallèles…

…

[skillMarkdown tronqué pour la traduction]

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

Cài chatbot AI dạng floating widget góc dưới phải vào project Next.js có sẵn (App Router hoặc Pages Router), responsive đầy đủ web + tablet + mobile, gọi LLM qua OpenRouter (mặc định google/gemini-3-flash-preview, có thể đổi sang anthropic/claude-sonnet-4.6), streaming response, RENDER MARKDOWN trong assistant bubble (bold / list / link / code) qua react-markdown + remark-gfm — KHÔNG hiện raw **bold** dạng text — có knowledge base từ FAQ + tài liệu sản phẩm/khóa học do user cung cấp để chatbot tự động trả lời khách hàng, và TỰ ĐỘNG EXTRACT + LƯU LEAD (tên + SĐT + email) vào Upstash Redis/Vercel KV dưới namespace `chat-lead:{phone}` khi user cung cấp đầy đủ thông tin trong chat — dedupe theo SĐT, TTL 90 ngày, fire-and-forget không block stream. Skill tự detect số lượng project Next.js — nếu có nhiều hơn 1 sẽ hỏi user chọn project nào để cài; tự detect TypeScript/JS, App Router/Pages Router, Tailwind/CSS module, KV/Upstash availability (skip auto-save nếu chưa có); tự install react-markd

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

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'.

Skills associés