feat(magic-wand): Create 'noob-friendly' Google Ads setup guide - Magic Wand now generates specific Headlines, Descriptions, and Keywords for each strategy - Added visual 'Google Ads Setup Guide' cards within each strategic direction - Implemented click-to-copy functionality for headlines and descriptions - Added beginner tips explaining exactly where to paste content in Ads Manager - Updated types and AI prompts across all providers (Ollama, Qwen, Z.AI)
This commit is contained in:
@@ -668,6 +668,74 @@ export default function GoogleAdsGenerator() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* BEGINNER-FRIENDLY AD MANAGER GUIDE */}
|
||||
{strat.adCopyGuide && (
|
||||
<div className="mt-4 p-4 rounded-xl bg-gradient-to-br from-slate-900 to-slate-800 text-white shadow-lg space-y-4 border border-slate-700">
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="text-[10px] font-black uppercase tracking-widest text-indigo-400">Google Ads Setup Guide</div>
|
||||
<div className="flex gap-1">
|
||||
<span className="h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse" />
|
||||
<span className="text-[9px] text-emerald-400 font-bold uppercase">Ready to Paste</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
<div className="p-3 rounded-lg bg-white/5 border border-white/10 space-y-2">
|
||||
<div className="text-[9px] font-black text-slate-400 uppercase flex items-center gap-2">
|
||||
<span className="h-4 w-4 rounded bg-indigo-500 text-white flex items-center justify-center font-black">1</span>
|
||||
Paste into Headlines (max 30 symbols)
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
{strat.adCopyGuide.headlines.map((h, j) => (
|
||||
<div key={j} className="text-xs font-bold text-indigo-300 flex justify-between group cursor-pointer" onClick={() => navigator.clipboard.writeText(h)}>
|
||||
<span className="truncate">{h}</span>
|
||||
<Copy className="h-3 w-3 opacity-0 group-hover:opacity-100 transition-opacity" />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="p-3 rounded-lg bg-white/5 border border-white/10 space-y-2">
|
||||
<div className="text-[9px] font-black text-slate-400 uppercase flex items-center gap-2">
|
||||
<span className="h-4 w-4 rounded bg-indigo-500 text-white flex items-center justify-center font-black">2</span>
|
||||
Paste into Descriptions (max 90 symbols)
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
{strat.adCopyGuide.descriptions.map((d, j) => (
|
||||
<div key={j} className="text-[11px] font-medium text-slate-300 leading-tight italic border-l border-indigo-500/50 pl-2 py-1 group cursor-pointer" onClick={() => navigator.clipboard.writeText(d)}>
|
||||
"{d}"
|
||||
<Copy className="h-3 w-3 inline ml-2 opacity-0 group-hover:opacity-100 transition-opacity" />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="p-3 rounded-lg bg-white/5 border border-white/10 space-y-2">
|
||||
<div className="text-[9px] font-black text-slate-400 uppercase flex items-center gap-2">
|
||||
<span className="h-4 w-4 rounded bg-indigo-500 text-white flex items-center justify-center font-black">3</span>
|
||||
Paste into Keywords Section
|
||||
</div>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{strat.adCopyGuide.keywords.map((k, j) => (
|
||||
<span key={j} className="text-[9px] font-bold bg-white/10 px-1.5 py-0.5 rounded text-slate-300 border border-white/5">
|
||||
{k}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="p-3 rounded-lg bg-indigo-500/10 border border-indigo-500/20">
|
||||
<div className="text-[9px] font-black text-indigo-300 uppercase mb-1 flex items-center gap-1.5">
|
||||
<Rocket className="h-3 w-3" /> Quick Implementation Tip
|
||||
</div>
|
||||
<p className="text-[10px] text-slate-300 font-medium leading-relaxed italic">
|
||||
"{strat.adCopyGuide.setupGuide}"
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="grid grid-cols-2 gap-4 items-center">
|
||||
<div className="space-y-1">
|
||||
<div className="text-[9px] font-black text-slate-400 uppercase">Channel Mix</div>
|
||||
|
||||
@@ -562,6 +562,12 @@ OUTPUT FORMAT - Return ONLY valid JSON with this EXACT structure:
|
||||
"targetAudience": "Specific audience segment",
|
||||
"competitiveAdvantage": "How this beats competitors",
|
||||
"keyMessages": ["Message 1", "Message 2", "Message 3"],
|
||||
"adCopyGuide": {
|
||||
"headlines": ["Headline 1 (max 30 symbols)", "Headline 2", "Headline 3"],
|
||||
"descriptions": ["Description 1 (max 90 symbols)", "Description 2"],
|
||||
"keywords": ["keyword 1", "keyword 2", "keyword 3"],
|
||||
"setupGuide": "Friendly step-by-step for a beginner on where exactly to paste these in Google Ads Manager"
|
||||
},
|
||||
"recommendedChannels": ["Google Search", "Display", "YouTube"],
|
||||
"estimatedBudgetAllocation": { "search": 40, "display": 30, "video": 20, "social": 10 },
|
||||
"expectedROI": "150-200%",
|
||||
@@ -576,7 +582,10 @@ CRITICAL REQUIREMENTS:
|
||||
- Provide 5-7 DISTINCT strategic directions
|
||||
- Each strategy must be ACTIONABLE and SPECIFIC
|
||||
- Include REAL competitive insights based on industry knowledge
|
||||
- Risk levels: "low", "medium", or "high"`,
|
||||
- Risk levels: "low", "medium", or "high"
|
||||
- AD COPY GUIDE must be incredibly "noob-friendly" - explain exactly where to paste each field in Google Ads Manager
|
||||
- Headlines MUST be under 30 characters
|
||||
- Descriptions MUST be under 90 characters`,
|
||||
};
|
||||
|
||||
const userMessage: ChatMessage = {
|
||||
|
||||
@@ -889,6 +889,12 @@ OUTPUT FORMAT - Return ONLY valid JSON with this EXACT structure:
|
||||
"targetAudience": "Specific audience segment",
|
||||
"competitiveAdvantage": "How this beats competitors",
|
||||
"keyMessages": ["Message 1", "Message 2", "Message 3"],
|
||||
"adCopyGuide": {
|
||||
"headlines": ["Headline 1 (max 30 symbols)", "Headline 2", "Headline 3"],
|
||||
"descriptions": ["Description 1 (max 90 symbols)", "Description 2"],
|
||||
"keywords": ["keyword 1", "keyword 2", "keyword 3"],
|
||||
"setupGuide": "Friendly step-by-step for a beginner on where exactly to paste these in Google Ads Manager"
|
||||
},
|
||||
"recommendedChannels": ["Google Search", "Display", "YouTube"],
|
||||
"estimatedBudgetAllocation": { "search": 40, "display": 30, "video": 20, "social": 10 },
|
||||
"expectedROI": "150-200%",
|
||||
@@ -903,7 +909,10 @@ CRITICAL REQUIREMENTS:
|
||||
- Provide 5-7 DISTINCT strategic directions
|
||||
- Each strategy must be ACTIONABLE and SPECIFIC
|
||||
- Include REAL competitive insights based on industry knowledge
|
||||
- Risk levels: "low", "medium", or "high"`,
|
||||
- Risk levels: "low", "medium", or "high"
|
||||
- AD COPY GUIDE must be incredibly "noob-friendly" - explain exactly where to paste each field in Google Ads Manager
|
||||
- Headlines MUST be under 30 characters
|
||||
- Descriptions MUST be under 90 characters`,
|
||||
};
|
||||
|
||||
const userMessage: ChatMessage = {
|
||||
|
||||
@@ -641,6 +641,12 @@ OUTPUT FORMAT - Return ONLY valid JSON with this EXACT structure:
|
||||
"targetAudience": "Specific audience segment",
|
||||
"competitiveAdvantage": "How this beats competitors",
|
||||
"keyMessages": ["Message 1", "Message 2", "Message 3"],
|
||||
"adCopyGuide": {
|
||||
"headlines": ["Headline 1 (max 30 symbols)", "Headline 2", "Headline 3"],
|
||||
"descriptions": ["Description 1 (max 90 symbols)", "Description 2"],
|
||||
"keywords": ["keyword 1", "keyword 2", "keyword 3"],
|
||||
"setupGuide": "Friendly step-by-step for a beginner on where exactly to paste these in Google Ads Manager"
|
||||
},
|
||||
"recommendedChannels": ["Google Search", "Display", "YouTube"],
|
||||
"estimatedBudgetAllocation": { "search": 40, "display": 30, "video": 20, "social": 10 },
|
||||
"expectedROI": "150-200%",
|
||||
@@ -657,6 +663,9 @@ CRITICAL REQUIREMENTS:
|
||||
- Include REAL competitive insights based on industry knowledge
|
||||
- Budget allocations must sum to 100%
|
||||
- Risk levels: "low", "medium", or "high"
|
||||
- AD COPY GUIDE must be incredibly "noob-friendly" - explain exactly where to paste each field in Google Ads Manager
|
||||
- Headlines MUST be under 30 characters
|
||||
- Descriptions MUST be under 90 characters
|
||||
- Be REALISTIC with ROI and timeline estimates`,
|
||||
};
|
||||
|
||||
|
||||
@@ -209,6 +209,12 @@ export interface MagicWandStrategy {
|
||||
targetAudience: string;
|
||||
competitiveAdvantage: string;
|
||||
keyMessages: string[];
|
||||
adCopyGuide: {
|
||||
headlines: string[];
|
||||
descriptions: string[];
|
||||
keywords: string[];
|
||||
setupGuide: string;
|
||||
};
|
||||
recommendedChannels: string[];
|
||||
estimatedBudgetAllocation: {
|
||||
search?: number;
|
||||
|
||||
Reference in New Issue
Block a user