Communitygithub.com

Biz SMTP Form Autoresponder — Auto-email sau khi lead điền form

Configuration d'un répondeur automatique par e-mail SMTP pour une page de vente — envoie automatiquement un e-mail après la soumission d'un formulaire (nom/téléphone/e-mail), sans être verrouillé à un fournisseur spécifique.

Qu'est-ce que Biz SMTP Form Autoresponder — Auto-email sau khi lead điền form ?

Ce skill transforme un formulaire d'inscription sur une page de vente en deux e-mails automatisés dès la soumission : (A) un e-mail de bienvenue chaleureuse pour le lead, et (B) une notification pour le propriétaire. L'e-mail est rédigé sur mesure pour chaque offre en utilisant le contexte du pipeline biz-* (fichiers `offer.json`, `conversion-copy.md` ou lecture directe du projet Next.js ou HTML déployé). Le skill fonctionne en 7 phases : détection du stack (Next.js App Router, Pages Router, Vite, HTML statique), choix du fournisseur SMTP (Gmail, Resend, SendGrid, Mailgun, Brevo, Zoho, ou SMTP personnalisé), collecte du contexte, sélection du modèle d'e-mail (livraison de lead magnet, confirmation de réservation, rappel de paiement, nurturing, ou onboarding post-paiement), rédaction et affichage des deux brouillons pour validation, implémentation du code avec `nodemailer`, et enfin un guide de configuration du fournisseur avec un plan de test. Il évite tout verrouillage technologique et garantit une personnalisation poussée, essentielle pour convertir les leads. Le skill est compatible avec les plateformes Vercel, Netlify et tout environnement Node.js pour les API routes.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lexuanthanhhy/MKT.LANDINGPAGE.SKILLS/tree/main/.claude/skills/biz-email-setup

Demander à votre IA préférée

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

Documentation

Biz SMTP Form Autoresponder — Auto-email après qu'un lead a rempli un formulaire

Ce skill transforme le formulaire d'inscription sur une page de vente (nom/téléphone/e-mail selon les standards du trafic vietnamien) en 2 e-mails automatiques dès la soumission : (A) un e-mail de bienvenue pour le lead, (B) une notification pour le propriétaire. Les e-mails sont rédigés sur mesure pour chaque offre en fonction du contexte disponible dans le pipeline biz-* (pas de "Merci de vous être inscrit, nous vous contacterons bientôt" générique — ce serait du copy qui tue les leads).

Philosophie : L'e-mail de répondeur automatique est un moment crucial. Le lead vient d'appuyer sur le bouton de soumission = il est au pic de son intention. L'e-mail doit arriver dans les 30 secondes pour (1) confirmer que sa soumission a bien été prise en compte, (2) délivrer ce qui a été promis dans le CTA (lead magnet / réservation / lien de paiement), (3) définir clairement les prochaines étapes. Un bon e-mail de répondeur automatique transforme 20 à 40 % des leads froids en leads chauds. Un e-mail générique = le lead bloque l'expéditeur ou oublie le nom de la marque en 24 heures.

Pourquoi SMTP (et non un seul fournisseur) : SMTP est un standard ouvert — l'utilisateur peut choisir le fournisseur qui correspond à son budget, sa région et ses exigences de conformité. Gmail SMTP est gratuit (500/jour), suffisant pour une page de vente avec moins de 50 leads/jour ; Resend SMTP offre 3 000/mois ; SendGrid, 100/jour avec un abonnement gratuit à vie ; Brevo (populaire au Vietnam), 300/jour gratuit ; les hébergeurs vietnamiens (Mắt Bão, PA, Inet) incluent souvent un serveur SMTP. Le code utilise nodemailer — pour changer de fournisseur, il suffit de modifier 4 variables d'environnement, pas de code à changer. Évite le verrouillage technologique.

Résultat : patch de code + 2 brouillons d'e-mail HTML responsifs + liste de variables d'environnement + plan de test. Le skill n'envoie PAS d'e-mail de test — l'utilisateur doit confirmer les brouillons au préalable, car le lien du lead magnet, la voix de la marque et le texte d'urgence sont des actifs de l'utilisateur.


Quand utiliser ce skill

  • L'utilisateur vient de déployer une page de vente (via /biz-deploy-vercel) et le formulaire soumet dans le vide.
  • L'utilisateur a une page de vente existante (Next.js, Vite ou HTML statique sur Vercel) et souhaite intégrer un répondeur automatique par e-mail.
  • L'utilisateur construit une nouvelle page et souhaite l'intégration e-mail dès le début, avant le déploiement.
  • L'utilisateur a déjà Gmail/Google Workspace et souhaite utiliser le SMTP gratuit plutôt que de créer un nouveau compte fournisseur.
  • L'utilisateur a un hébergement vietnamien (Mắt Bão, PA, Inet) avec un serveur SMTP intégré.

À NE PAS utiliser ce skill quand :

  • L'utilisateur souhaite des campagnes d'e-mail marketing (newsletter, campagne de nurturing sur 7 à 30 jours) → Mailchimp/ConvertKit/MailerLite sont plus adaptés.
  • L'utilisateur souhaite un répondeur automatique par SMS/Zalo OA → cas d'usage différent.
  • L'utilisateur souhaite une intégration CRM (leads dans Hubspot/Pipedrive/Notion DB) → autre skill.
  • L'utilisateur a besoin de prospection par e-mail en masse → Instantly/Smartlead, pas de transactionnel.

Workflow général (7 phases)

Phase 0 : DÉTECTION DU STACK (Next.js App / Pages / Vite / HTML statique)
       ↓
Phase 1 : CHOIX DU FOURNISSEUR SMTP (Gmail / Resend SMTP / SendGrid / Mailgun / Brevo / Zoho / Personnalisé)
       ↓
Phase 2 : COLLECTE DU CONTEXTE (offer.json + conversion-copy.md, ou lecture de l'application Next.js app/page.tsx, ou lecture du HTML déployé)
       ↓
Phase 3 : CHOIX DU MODÈLE D'E-MAIL (lead magnet / réservation / paiement / nurturing)
       ↓
Phase 4 : RÉDACTION DE 2 E-MAILS (répondeur automatique + notification propriétaire) — affichage à l'utilisateur
       ↓
Phase 5 : RÉVISION ET ÉDITION PAR L'UTILISATEUR — itérer jusqu'à validation
       ↓
Phase 6 : INTÉGRATION DU CODE (installation de nodemailer + route API + liaison formulaire + variables d'environnement)
       ↓
Phase 7 : CONFIGURATION DU FOURNISSEUR + PLAN DE TEST — instructions pour récupérer les identifiants SMTP, vérifier le domaine (si nécessaire), tester en direct

Chaque phase s'arrête pour la confirmation de l'utilisateur — particulièrement les phases 1 (choix du fournisseur), 4 et 5 (contenu des e-mails), et 7 (DNS du fournisseur) car ce sont des actifs de marque de l'utilisateur. La génération de code en phase 6 est plus proactive.


Phase 0 — Détection du Stack

Lire le fichier racine du projet pour déterminer le stack. Le stack détermine : où placer la route API, la syntaxe d'import de nodemailer, le type de liaison du formulaire (fetch ou form action).

Fichier détectéStackChemin de la route APILiaison du formulaire
next.config.js/mjs/ts + dossier app/Next.js App Routerapp/api/submit/route.tscomposant client fetch('/api/submit')
next.config.js/mjs/ts + dossier pages/Next.js Pages Routerpages/api/submit.tscomposant client fetch('/api/submit')
vite.config.js/tsVite (React/Vue/Svelte)api/submit.js (fonction Vercel)composant client fetch('/api/submit')
package.json sans framework, avec index.htmlHTML statiqueapi/submit.js (fonction Vercel)<script> en ligne avec fetch('/api/submit')
Pas de projet local, seulement une URLPage déjà déployéeL'utilisateur doit d'abord cloner le dépôt ou indiquer le chemin du dépôt—

Lire davantage pour déterminer les champs du formulaire :

  • Chercher <form> dans le code → lister les <input name="..."> existants
  • Valeurs par défaut (selon la mémoire du projet) : name, phone, email. Certaines pages ajoutent : company, message, budget, utm_source.
  • Si le formulaire n'existe pas → le skill créera un nouveau formulaire avec 3 champs minimum (nom/téléphone/e-mail) dans la phase 6.

Important : Si l'utilisateur n'a pas de projet local (seulement une URL déployée), s'arrêter et demander : "Avez-vous un dépôt local pour que je puisse intégrer le code ? J'ai besoin de modifier les fichiers source. Si vous n'avez qu'une URL, veuillez cloner le dépôt et m'indiquer le chemin." Impossible d'intégrer uniquement via une URL.


Phase 1 — Choix du Fournisseur SMTP

Demander à l'utilisateur de choisir parmi 7 fournisseurs. Chaque fournisseur a une configuration SMTP différente (hôte/port/auth), et le skill remplit automatiquement le modèle de variables d'environnement en fonction du choix.

#FournisseurNiveau gratuitQuand l'utiliserHôte SMTPPortNotes
1Gmail / Google Workspace500/jourL'utilisateur a déjà Gmail/Workspace, trafic faiblesmtp.gmail.com587 (STARTTLS)Mot de passe d'application obligatoire (2FA), NE PAS utiliser le mot de passe principal
2Resend SMTP3 000/moisBonne délivrabilité + logs, OK pour configurer DNSsmtp.resend.com587Utilisateur = resend, Mot de passe = clé API. Nécessite la vérification du domaine pour envoyer depuis un @marque.vn personnalisé
3SendGrid SMTP100/jour, gratuit à vieStack déjà familier avec SendGrid, besoin de webhooksmtp.sendgrid.net587Utilisateur = apikey littéral, Mot de passe = clé API
4Mailgun SMTP100/jour × 3 moisRégion EU/US, convivial pour les développeurssmtp.mailgun.org (US) ou smtp.eu.mailgun.org (UE)587Utilisateur/mot de passe depuis les paramètres du domaine Mailgun
5Brevo (Sendinblue) SMTP300/jour, gratuit à viePopulaire au Vietnam, niveau gratuit le plus élevé, support Vietnamsmtp-relay.brevo.com587Utilisateur = e-mail de connexion, Mot de passe = clé SMTP (différente de la clé API)
6Zoho Mail SMTP5/jour gratuit, 1 $/utilisateur/moisL'utilisateur utilise déjà Zoho Workspacesmtp.zoho.com587Nécessite un mot de passe d'application si 2FA activé
7SMTP personnaliséDépend de l'hébergementHébergement Vietnam (Mắt Bão/PA/Inet/Nhân Hòa) inclut SMTP, ou utilisation de Postfix auto-hébergéL'utilisateur fournitL'utilisateur fournitL'utilisateur colle l'hôte/port/utilisateur/mot de passe complets

Recommandation par défaut selon le type d'offre :

  • Page de vente <50 leads/jour, utilisateur avec Gmail → Gmail SMTP (zéro coût, configuration en 5 minutes).
  • Page de vente >50 leads/jour ou besoin de délivrabilité professionnelle → Brevo (gratuit 300/jour, bonne délivrabilité pour le Vietnam) ou Resend SMTP (3 000/mois, bons logs).
  • Utilisateur veut une solution anti-migration, pouvant être auto-hébergée plus tard → SMTP personnalisé dès le début.

Format de la question à l'utilisateur :

Quel fournisseur SMTP souhaitez-vous utiliser pour envoyer les e-mails automatiques ?

1. Gmail / Google Workspace (gratuit 500/jour, le plus simple si vous avez déjà Gmail)
2. Resend SMTP (gratuit 3 000/mois, haute délivrabilité, nécessite vérification du domaine)
3. SendGrid SMTP (gratuit 100/jour à vie, si l'API SendGrid vous est familière)
4. Mailgun SMTP (gratuit 100/jour × 3 mois)
5. Brevo / Sendinblue SMTP (gratuit 300/jour, populaire au Vietnam)
6. Zoho Mail SMTP (si vous utilisez déjà Zoho Workspace)
7. SMTP personnalisé (l'hébergement Vietnam que vous utilisez en a déjà un / auto-hébergé)

Si vous n'avez pas encore de compte, je vous suggère [Gmail si le trafic est faible / Brevo si vous avez besoin d'une haute délivrabilité]. Quel numéro choisissez-vous ?

Après le choix de l'utilisateur → le sauvegarder pour l'injecter dans le modèle de variables d'environnement en phase 6 et pour fournir les instructions de récupération des identifiants en phase 7.

⚠️ Important — sécurité : Les identifiants SMTP (notamment le mot de passe d'application Gmail) ont l'autorisation d'envoyer des e-mails depuis le compte de l'utilisateur. Ne jamais les coder en dur dans le code source. Toujours utiliser des variables d'environnement. Avertir l'utilisateur de les révoquer immédiatement en cas de commit accidentel.


Phase 2 — Collecte du Contexte

Objectif : comprendre l'offre suffisamment en profondeur pour rédiger un e-mail non générique. 3 modes d'entrée :

Mode A — Artefacts du pipeline disponibles (le plus riche)

L'utilisateur vient d'exécuter /biz-offer-alex-hormozi et/ou ui-ux-pro-max → fichiers présents :

  • output/<case-slug>/offer.json — segment, résultat idéal, mécanisme, pile de bonus, garantie, tarification (source de vérité PRINCIPALE)
  • output/<case-slug>/conversion-copy.md — bloc héro prêt à coller (titre, sous-titre, texte du CTA)
  • output/<case-slug>/landing-page/app/page.tsx — page de vente Next.js actuelle déjà construite (à lire pour connaître les sections et les champs de formulaire utilisés)

⚠️ Mise à jour 2026-05-14 : L'ancien pipeline avait layout.json + copy.json (de biz-sales-page-layout qui est OBSOLÈTE) — la nouvelle procédure IGNORE ces 2 fichiers. Seuls offer.json + la lecture de page.tsx sont nécessaires pour le contexte.

Lire les 3 sources ci-dessus. En extraire pour l'e-mail :

  • Segment + résultat idéal → personnaliser la ligne d'objet ("[Nom], le parcours de 8 semaines AI Agent est prêt" au lieu de "Bienvenue")
  • Nom du mécanisme → renforcer dans le corps du message ("Le système PROMPT framework que vous allez bientôt apprendre…")
  • Pile de bonus → lister dans l'e-mail (si l'offre gratuite/low-ticket a des bonus à livrer immédiatement)
  • Texte de la garantie → citer textuellement dans l'e-mail pour réduire l'anxiété
  • Texte du CTA → refléter dans le CTA final de l'e-mail

Mode B — Page de vente disponible mais pas de fichier JSON

L'utilisateur a du HTML déployé mais n'a pas exécuté biz-offer/biz-sales-page. Le skill lit le HTML :

  • curl -s <URL> ou lit le fichier index.html local
  • Analyse le h1 du héros, le sous-titre, le texte du bouton CTA, le bloc de tarification, le bloc de garantie
  • En déduit le type d'offre + le segment

Le mode B est suffisant dans 80 % des cas, mais l'e-mail est moins personnalisé que le mode A. Suggérer à l'utilisateur : "Vous pouvez exécuter /biz-offer-alex-hormozi pour obtenir un offer.json, puis revenir ici ; l'e-mail sera de meilleure qualité. Ou continuer avec le mode B."

Mode C — Rien du tout

L'utilisateur n'a qu'un formulaire HTML, pas de contexte. Le skill doit interviewer avec 5 questions rapides :

  1. Quel est votre produit/service ? (1 phrase)
  2. Après que l'utilisateur a rempli le formulaire, que souhaitez-vous lui envoyer ? (PDF à télécharger / lien de réservation / lien de paiement / juste une confirmation et vous rappellerez)
  3. Nom de la marque + nom de l'expéditeur (qui apparaîtra dans "De :")
  4. L'e-mail auquel vous souhaitez recevoir la notification de nouveau lead
  5. Le domaine que vous possédez pour vérifier SPF/DKIM (si vous choisissez Resend/SendGrid/Mailgun/Brevo — Gmail, pas nécessaire)

Phase 3 — Choix du Modèle d'E-mail

Modèle à 2 déclencheurs (pour les offres avec flux de paiement) : Pour les formations low-ticket / produits numériques avec paiement en ligne, il y a 2 déclencheurs différents à des moments différents, envoyant 2 e-mails différents. Ne pas les fusionner en un seul e-mail.

Lead remplit le formulaire sur la page de vente
         ↓
   [Déclencheur A — /api/submit]
         ↓
   E-mail P3 (RAPPEL DE PAIEMENT, léger)
         ↓
Lead termine le paiement → webhook du fournisseur de paiement
         ↓
   [Déclencheur B — /api/payment-webhook]
         ↓
   E-mail P5 (INTÉGRATION POST-ACHAT, complet)

Règle de contenu :

  • P3 (pré-paiement) : seulement le lien de paiement + garantie courte + urgence. NE PAS lister les livrables complets / pile de bonus — le lead ne les a pas encore "gagnés", les lister réduit l'urgence du paiement.
  • P5 (post-paiement) : livrer TOUT — lien d'accès, livrables complets, pile de bonus, lien de groupe, horaires de bureau, 1 question de suivi pour personnaliser. C'est le moment crucial.

(Lire la mémoire feedback_email-autoresponder-2-stage-flow pour la justification détaillée.)


À partir du contexte de la phase 2, choisir le modèle approprié. Lire references/email-formulas.md pour les modèles détaillés en vietnamien.

ModèleDéclencheurQuand l'utiliserIndice pour l'objet
P1 — Livraison du Lead MagnetSoumission du formulaireL'offre = téléchargement PDF/e-book/modèle/fichier swipe/checklist gratuit"[Nom], le document [X] est prêt — ouvrez le fichier maintenant 👇"
P2 — Confirmation de RéservationSoumission du formulaireL'offre = rendez-vous d'appel/consultation/démo/session de stratégie gratuite"[Nom], inscription au rendez-vous de conseil confirmée — prochaine étape à l'intérieur"
P3 — Rappel de PaiementSoumission du formulaire (pas encore payé)L'offre = produit low-ticket (199 000 - 3 000 000 VND), l'e-mail redirige vers le paiement"[Nom], lien de paiement pour [Cours X] — prix réduit valable 24h ⏰"
P4 — Nurturing (Appel commercial à venir)Soumission du formulaireL'offre = coaching/agence high-ticket 5 000 000 - 50 000 000+ VND, l'équipe commerciale appellera dans les 24h"[Nom], [Appelant] vous contactera dans les 24h — checklist de préparation à l'intérieur"
P5 — Intégration Post-AchatWebhook de paiementLe lead vient de terminer le paiement — livrer la valeur complète + 1 question de personnalisation"🎉 Bienvenue [Nom] dans [Cours X] — débloquez maintenant"

Règle de sélection du modèle :

  • Offre = téléchargement gratuit/formation → P1 uniquement (1 déclencheur, 1 e-mail).
  • Offre = appel de réservation gratuit → P2 uniquement (1 déclencheur, 1 e-mail).
  • Offre = low-ticket avec paiement en ligne (Stripe/Momo/ZaloPay/Sepay) → P3 + P5 (2 déclencheurs, 2 e-mails).
  • Offre = appel commercial high-ticket → P4 uniquement, suivi par l'équipe commerciale (l'intégration après la conclusion de l'affaire est un processus différent).

Le skill propose le modèle approprié avec la raison, demande à l'utilisateur de confirmer. Exemple : "D'après le offer.json, il s'agit d'un cours à 1 990 000 VND avec intégration de paiement. Je propose de configurer 2 e-mails : P3 (rappel de paiement après le formulaire) + P5 (intégration après le paiement + 1 question de personnalisation). Êtes-vous d'accord ou souhaitez-vous seulement l'e-mail P3 avant ?"


Phase 4 — Rédaction de 2 E-mails

Générer 2 e-mails en vietnamien pur (tutoiement "anh/chị"), HTML responsive pour mobile.

E-mail A — Répondeur automatique envoyé au lead

Structure en 6 blocs (lire references/email-formulas.md pour le texte spécifique à chaque modèle) :

  1. Ligne d'objet — personnalisée avec {{name}}, moins de 50 caractères, avec 1 léger emoji à la fin si approprié à la voix de la marque (✉️ 👇 ✓), éviter les déclencheurs de spam ("GRATUIT", "$$$", "garantie" en majuscules).
  2. Texte de prévisualisation — 1 phrase affichée sous l'objet dans la boîte de réception, expliquant la valeur de l'e-mail.
  3. Salutation — "Bonjour anh/chị {{name}}," — pas "Cher", pas "Bonjour cher client".
  4. Corps principal — selon le modèle choisi. Règles :
    • Court (moins de 200 mots).
    • Contient 1 lien/bouton CTA principal clair.
    • Mentionner spécifiquement le nom de l'offre/mécanisme du contexte (pas "notre produit").
    • Si modèle P3/P4 → avoir 1 rappel d'urgence + 1 réassurance (garantie).
  5. Signature — Nom de l'expéditeur + nom de la marque + 1 lien de contact (Zalo/Téléphone/Site Web).
  6. Pied de page — Adresse (obligatoire selon la loi anti-spam) + lien de désabonnement (nécessaire pour la conformité, même pour les e-mails transactionnels).

E-mail B — Notification envoyée au propriétaire

Structure en 4 blocs :

  1. Ligne d'objet — "[ALERTE] Nouveau lead depuis [Nom de la page] : {{name}}"
  2. Corps principal — Informations du lead : nom, téléphone, e-mail, message (si présent), utm_source (si présent), horodatage précis. Formater en tableau.
  3. Recommandation — "Suggestions : contactez dans les 2 heures pendant la peak intent. Le lead a reçu [nom du lead magnet / lien de réservation]." + 1 lien direct pour répondre ou appeler.
  4. Signature/Suivi — "L'e-mail de répondeur automatique a été envoyé à {{lead_email}} à {{time}}."

Phase 5 — Révision et Édition par l'Utilisateur

Règle absolue : ne pas envoyer sans approbation. Afficher 2 e-mails dans un format de brouillon clair, prêts à être copiés-collés dans un éditeur.

📧 Brouillon A — Répondeur automatique (envoyé au lead)
═══════════════════════════════════════
Objet : [Ligne d'objet]
Prévisualisation : [Texte de prévisualisation]

[Contenu complet de l'e-mail]
───────────────────────────────────────

📧 Brouillon B — Notification propriétaire (envoyé à [email protected])
═══════════════════════════════════════
Objet : [Ligne d'objet]

[Contenu complet de l'e-mail]

Demander :

Anh/chị vui lòng kiểm tra 2 bản nháp trên. Em cần OK trước khi wire code. Anh/chị muốn sửa gì không?
- Nội dung: thêm/bớt đoạn nào?
- Tông giọng: cần formal hơn / friendly hơn / thêm urgency?
- CTA: đổi link / button text?
- Footer: thêm địa chỉ / link unsubscribe?
- Gửi từ tên: "[Tên brand] <[email protected]>" hay "[Tên người] <[email protected]>"?

Itérer. Si l'utilisateur accepte → passer à la phase 6.


Phase 6 — Intégration du Code

Basé sur le stack détecté en phase 0 + le fournisseur SMTP de la phase 1 + le modèle d'e-mail de la phase 3 → le skill génère :

1. Installation du paquet

npm install nodemailer
# ou
pnpm add nodemailer
# ou
yarn add nodemailer

2. Fichier de configuration SMTP

Créer lib/mailer.ts (ou .js) :

import nodemailer from 'nodemailer';

export const transporter = nodemailer.createTransport({
  host: process.env.SMTP_HOST,
  port: parseInt(process.env.SMTP_PORT || '587'),
  secure: false, // true pour le port 465
  auth: {
    user: process.env.SMTP_USER,
    pass: process.env.SMTP_PASS,
  },
});

3. Route API /api/submit

  • Lire les données du formulaire : { name, phone, email, ... }
  • Valider les champs requis (nom, téléphone, e-mail)
  • Appeler transporter.sendMail() pour l'e-mail A (répondeur automatique)
  • Appeler transporter.sendMail() pour l'e-mail B (notification propriétaire)
  • Sauvegarder le lead dans le stockage (optionnel, si besoin) — mémoire non implémentée, suggérer Supabase/Notion DB / Google Sheets comme prochaine étape
  • Retourner la réponse : { success: true }

Important — gestion des erreurs :

  • Si l'envoi échoue (SMTP refusé, timeout), retourner l'erreur → le frontend peut afficher "E-mail non envoyé, veuillez réessayer" mais accepter quand même le lead (perte de données minimale).
  • Logger l'erreur mais ne pas bloquer l'inscription.

4. Variables d'environnement

Créer/modifier .env.local avec les valeurs (exemple pour Gmail) :

SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASS=xxxx xxxx xxxx xxxx  # App Password Gmail
FROM_NAME=Nom de votre marque
[email protected]
[email protected]

5. Liaison du formulaire (Frontend)

Si le formulaire n'existe pas encore → générer un formulaire avec 3 champs (nom, téléphone, e-mail) + gestion de la soumission fetch('/api/submit'). Si le formulaire existe déjà → ajouter onSubmit ou modifier l'action du formulaire.


Phase 7 — Configuration du Fournisseur + Plan de Test

Instructions spécifiques à chaque fournisseur (phase 1) pour se connecter et sécuriser, envoyées dans un message séparé :

📋 Anh/chị cần hoàn tất các bước sau trước khi go-live:

[Fournisseur choisi — Gmail]
1. Activez 2FA sur votre compte Gmail : https://myaccount.google.com/signinoptions/two-step-verification
2. Générez un App Password : https://myaccount.google.com/apppasswords (sélectionner "Mail" + votre appareil)
3. Copiez le mot de passe généré (16 caractères) dans .env.local sous SMTP_PASS (pas votre mot de passe principal !)

[Si applicable — Resend / SendGrid / Mailgun / Brevo]
1. Connectez-vous à votre compte, accédez à la section SMTP/API
2. Créez une clé SMTP dédiée (ne pas utiliser une clé API personnelle)
3. Vérifiez votre domaine d'envoi (SPF + DKIM) pour envoyer depuis @votremark.vn
4. Limites de taux : [limite spécifique au fournisseur], ne pas dépasser / minute

📋 Plan de test :
1. Ouvrez la page d'accueil locale : http://localhost:3000
2. Remplissez le formulaire avec des données de test (votre e-mail)
3. Vérifiez la boîte de réception A : l'e-mail de répondeur automatique est-il arrivé ? (dans les 30 secondes)
4. Vérifiez la boîte de réception B : l'e-mail de notification propriétaire est-il arrivé ?
5. Testez : bouton de partage social, lien de désabonnement (ne pas désabonner les e-mails transactionnels, mais si commerce → se conformer à la loi)
6. Testez avec un e-mail inexistant : le système ne bloque pas l'inscription, seule l'envoi échoue — bon comportement ?

Après les tests, déployez sur Vercel :
```bash
vercel --prod
# Ajoutez les variables d'environnement sur Vercel (variables SMTP + FROM/OWNER)

---

## Check-list récapitulative

- [ ] Phase 0 : Détection du stack (Next.js App Router / Pages / Vite / HTML statique)
- [ ] Phase 1 : Choix du fournisseur SMTP (Gmail / Resend / SendGrid / Mailgun / Brevo / Zoho / Personnalisé)
- [ ] Phase 2 : Collecte du contexte (offer.json + conversion-copy.md OU lecture de page.tsx OU interview)
- [ ] Phase 3 : Sélection du modèle (P1 / P2 / P3+P5 / P4)
- [ ] Phase 4 : Brouillons des e-mails (A + B) générés, affichés
- [ ] Phase 5 : Approuvé par l'utilisateur ✓
- [ ] Phase 6 : Code intégré (nodemailer + route API + formulaire + variables d'environnement)
- [ ] Phase 7 : Instructions fournies au fournisseur + plan de test + prêt pour le déploiement

---

## Note sur les références et la mémoire

Ce skill utilise les fichiers de référence suivants (situés dans `references/` du projet) :
- `references/email-formulas.md` — modèles d'e-mails détaillés pour chaque modèle (P1-P5) + exemples de lignes d'objet en vietnamien
- Mémoire : `feedback_email-autoresponder-2-stage-flow` — justification des 2 déclencheurs (P3 + P5)

**Dépendances externes :** `/biz-offer-alex-hormozi` (génération du `offer.json`), `/biz-deploy-vercel` (déploiement Vercel). Skill autonome quant à la détection du `page.tsx`.

---

## Limites actuelles

| Limite | Plan |
|---|---|
| Pas de stockage des leads (base de données) | Prochaine étape : intégration Supabase / Notion DB / Google Sheets |
| Pas de mécanisme de nouvelle tentative pour l'envoi d'e-mail | Retenter 2 fois avec backoff exponentiel → ajouter dans la prochaine itération |
| Pas de logs des e-mails (tracking ouvert/click) | Nécessite un fournisseur SMTP avec tracking (Resend a des logs, SendGrid a des webhooks) |
| Pas de vérification SPF/DKIM automatique | L'utilisateur doit configurer manuellement via les instructions du fournisseur en phase 7 |
| Seulement dans le sens formulaire → e-mail. Pas de webhook inverse (e-mail → webhook) | A faire dans un autre skill |

---

## Changements par rapport à la version précédente

- 2026-05-14 : Arrêt du support pour `biz-sales-page-layout`. Pipeline simplifié : ne plus utiliser `layout.json` / `copy.json`. Seulement `offer.json` + lecture de `page.tsx`.
- 2026-05-01 : Ajout du modèle à 2 déclencheurs P3 + P5 basé sur le feedback de l'utilisateur sur les entonnoirs de paiement.
- 2026-04-15 : Ajout du mode B (lecture HTML déployé) pour les cas sans pipeline d'offre.

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

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

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

Skills associés