From 9e74fcba67610b07eb219995464735655f404bc9 Mon Sep 17 00:00:00 2001 From: Gemini AI Date: Sun, 28 Dec 2025 02:44:03 +0400 Subject: [PATCH] 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) --- components/GoogleAdsGenerator.tsx | 68 +++++++++++++++++++++++++++++++ lib/services/ollama-cloud.ts | 11 ++++- lib/services/qwen-oauth.ts | 11 ++++- lib/services/zai-plan.ts | 9 ++++ types/index.ts | 6 +++ 5 files changed, 103 insertions(+), 2 deletions(-) diff --git a/components/GoogleAdsGenerator.tsx b/components/GoogleAdsGenerator.tsx index 21b34a4..4f165bf 100644 --- a/components/GoogleAdsGenerator.tsx +++ b/components/GoogleAdsGenerator.tsx @@ -668,6 +668,74 @@ export default function GoogleAdsGenerator() { + {/* BEGINNER-FRIENDLY AD MANAGER GUIDE */} + {strat.adCopyGuide && ( +
+
+
Google Ads Setup Guide
+
+ + Ready to Paste +
+
+ +
+
+
+ 1 + Paste into Headlines (max 30 symbols) +
+
+ {strat.adCopyGuide.headlines.map((h, j) => ( +
navigator.clipboard.writeText(h)}> + {h} + +
+ ))} +
+
+ +
+
+ 2 + Paste into Descriptions (max 90 symbols) +
+
+ {strat.adCopyGuide.descriptions.map((d, j) => ( +
navigator.clipboard.writeText(d)}> + "{d}" + +
+ ))} +
+
+ +
+
+ 3 + Paste into Keywords Section +
+
+ {strat.adCopyGuide.keywords.map((k, j) => ( + + {k} + + ))} +
+
+ +
+
+ Quick Implementation Tip +
+

+ "{strat.adCopyGuide.setupGuide}" +

+
+
+
+ )} +
Channel Mix
diff --git a/lib/services/ollama-cloud.ts b/lib/services/ollama-cloud.ts index 464d4d3..010c11c 100644 --- a/lib/services/ollama-cloud.ts +++ b/lib/services/ollama-cloud.ts @@ -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 = { diff --git a/lib/services/qwen-oauth.ts b/lib/services/qwen-oauth.ts index 83bd23f..6394416 100644 --- a/lib/services/qwen-oauth.ts +++ b/lib/services/qwen-oauth.ts @@ -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 = { diff --git a/lib/services/zai-plan.ts b/lib/services/zai-plan.ts index e39dab0..2ffc432 100644 --- a/lib/services/zai-plan.ts +++ b/lib/services/zai-plan.ts @@ -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`, }; diff --git a/types/index.ts b/types/index.ts index 32e262b..ba59e0b 100644 --- a/types/index.ts +++ b/types/index.ts @@ -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;