const platformGuidelines = {
facebook: {
maxHeadline: 25,
maxDescription: 125,
style: "emotional, visual-focused, community-driven",
},
google: {
maxHeadline: 30,
maxDescription: 90,
style: "direct, search-intent focused, action-oriented",
},
linkedin: {
maxHeadline: 150,
maxDescription: 300,
style: "professional, value-driven, industry-focused",
},
};
const toneModifiers = {
professional: { emoji: "β", prefix: "", style: "clear and authoritative" },
casual: { emoji: "π", prefix: "Hey! ", style: "relaxed and approachable" },
urgent: { emoji: "β‘", prefix: "Don't Miss Out! ", style: "time-sensitive and compelling" },
friendly: { emoji: "π", prefix: "", style: "warm and personable" },
luxury: { emoji: "β¨", prefix: "", style: "exclusive and premium" },
};
// Extract keywords from descriptions
function getBusinessKeywords(description) {
const keywords = description
.toLowerCase()
.match(/\b(products?|services?|solutions?|skincare|software|consulting|marketing|health|fitness|beauty|organic|natural|premium|luxury|tech|digital|platform|app|tool)\b/g) || [];
return keywords.length ? [...new Set(keywords)] : ["products", "solutions"];
}
function getAudienceKeywords(audience) {
const keywords = audience
.toLowerCase()
.match(/\b(women|men|professionals|entrepreneurs|businesses|companies|individuals|customers|clients|users|people|teams|startups|enterprises)\b/g) || [];
return keywords.length ? [...new Set(keywords)] : ["customers", "people"];
}
function getBusinessBenefit(description) {
if (description.toLowerCase().includes("health"))
return "better health";
if (description.toLowerCase().includes("beauty") || description.toLowerCase().includes("skincare"))
return "radiant skin";
if (description.toLowerCase().includes("business") || description.toLowerCase().includes("software"))
return "business growth";
if (description.toLowerCase().includes("fitness"))
return "fitness goals";
if (description.toLowerCase().includes("marketing"))
return "marketing success";
if (description.toLowerCase().includes("productivity"))
return "peak productivity";
return "amazing results";
}
export function generateAdCopy(productName, targetAudience, platform, tone = "professional") {
const guidelines = platformGuidelines[platform];
const toneStyle = toneModifiers[tone];
const businessKeywords = getBusinessKeywords(productName);
const audienceKeywords = getAudienceKeywords(targetAudience);
const benefit = getBusinessBenefit(productName);
const templates = {
facebook: {
headlines: {
professional: `Transform Your Results with ${businessKeywords[0]} ${toneStyle.emoji}`,
casual: `${toneStyle.prefix}Check Out This Amazing ${businessKeywords[0]}! π`,
urgent: `${toneStyle.prefix}${businessKeywords[0]} Sale Ends Tonight! ${toneStyle.emoji}`,
friendly: `We Made This ${businessKeywords[0]} Just for ${audienceKeywords[0]}! ${toneStyle.emoji}`,
luxury: `Exclusive ${businessKeywords[0]} Collection ${toneStyle.emoji}`,
},
descriptions: {
professional: `Join thousands of ${audienceKeywords[0]} who trust our ${businessKeywords[0]} for ${benefit}. Proven results, trusted quality.`,
casual: `${audienceKeywords[0]} are loving this! Our ${businessKeywords[0]} makes ${benefit} so much easier. Come see what the hype is about!`,
urgent: `Only 24 hours left! ${audienceKeywords[0]} are grabbing our ${businessKeywords[0]} before it's gone. Don't miss your chance!`,
friendly: `We created our ${businessKeywords[0]} with ${audienceKeywords[0]} like you in mind. Ready to experience ${benefit}?`,
luxury: `For the discerning ${audienceKeywords[0]}: Our premium ${businessKeywords[0]} delivers ${benefit} with unmatched elegance.`,
},
ctas: ["Shop Now", "Learn More", "Get Started", "Claim Yours"],
},
google: {
headlines: {
professional: `Premium ${businessKeywords[0]} | Trusted Results`,
casual: `Best ${businessKeywords[0]} - Check It Out`,
urgent: `${businessKeywords[0]} Sale - Limited Time`,
friendly: `${businessKeywords[0]} for ${audienceKeywords[0]}`,
luxury: `Luxury ${businessKeywords[0]} | Premium Quality`,
},
descriptions: {
professional: `High-quality ${businessKeywords[0]} for ${audienceKeywords[0]}. Achieve ${benefit}. Free shipping available.`,
casual: `Looking for great ${businessKeywords[0]}? ${audienceKeywords[0]} love ours! Fast shipping.`,
urgent: `Sale ends soon! Get ${businessKeywords[0]} now. Perfect for ${audienceKeywords[0]}. Order today!`,
friendly: `${businessKeywords[0]} made for ${audienceKeywords[0]}. Achieve ${benefit} with us!`,
luxury: `Exclusive ${businessKeywords[0]} for discerning ${audienceKeywords[0]}. Premium ${benefit}.`,
},
ctas: ["Buy Now", "Shop Today", "Get Quote", "Order Online"],
},
linkedin: {
headlines: {
professional: `How ${audienceKeywords[0]} Achieve ${benefit} with Our ${businessKeywords[0]}`,
casual: `${audienceKeywords[0]}, Here's a Better Way to Get ${benefit}`,
urgent: `${audienceKeywords[0]}: Don't Fall Behind - Upgrade Your ${businessKeywords[0]} Strategy`,
friendly: `Helping ${audienceKeywords[0]} Succeed with ${businessKeywords[0]}`,
luxury: `The Premium ${businessKeywords[0]} Choice for Elite ${audienceKeywords[0]}`,
},
descriptions: {
professional: `Our ${businessKeywords[0]} helps ${targetAudience} achieve measurable ${benefit}. Trusted by industry leaders.\n\n${toneStyle.emoji} Industry-leading quality\n${toneStyle.emoji} Proven results\n${toneStyle.emoji} Professional support`,
casual: `We've helped tons of ${audienceKeywords[0]} get ${benefit} with our ${businessKeywords[0]}. Want to see how? Let's chat!`,
urgent: `The market is changing fast. ${audienceKeywords[0]} using our ${businessKeywords[0]} are already seeing ${benefit}. Time to catch up.`,
friendly: `We love helping ${audienceKeywords[0]} succeed! Our ${businessKeywords[0]} is designed to make ${benefit} achievable for everyone.`,
luxury: `For ${audienceKeywords[0]} who demand excellence: Our premium ${businessKeywords[0]} delivers unparalleled ${benefit} with white-glove service.`,
},
ctas: ["Learn More", "Download Guide", "Schedule Demo", "Contact Us"],
},
};
const platformTemplate = templates[platform];
const headline = platformTemplate.headlines[tone];
const description = platformTemplate.descriptions[tone];
const cta = platformTemplate.ctas[Math.floor(Math.random() * platformTemplate.ctas.length)];
let formatted;
if (platform === "linkedin") {
formatted = `${headline}\n\n${description}\n\n${cta} β`;
}
else {
formatted = `HEADLINE: ${headline}\n\nDESCRIPTION: ${description}\n\nCALL TO ACTION: ${cta}`;
}
return {
platform,
tone,
headline,
description,
cta,
formatted,
guidelines,
timestamp: new Date().toISOString(),
};
}