|
|
""" |
|
|
Ad Frameworks - Different structural approaches for ad creatives. |
|
|
Each framework has a unique style and is suited for different marketing goals. |
|
|
""" |
|
|
|
|
|
from typing import Dict, Any, List, Optional |
|
|
import random |
|
|
|
|
|
|
|
|
|
|
|
FRAMEWORKS: Dict[str, Dict[str, Any]] = { |
|
|
"breaking_news": { |
|
|
"name": "Breaking News", |
|
|
"description": "Creates urgency through news-style presentation, feels like breaking news", |
|
|
"best_for": ["announcements", "limited offers", "new discoveries", "price drops"], |
|
|
"visual_style": "News channel aesthetic, red/white ticker, urgent feel", |
|
|
"hook_examples": [ |
|
|
"BREAKING: Home Insurance Rates Drop 40%", |
|
|
"URGENT: Limited Time Savings Available Now", |
|
|
"ALERT: New Insurance Savings Discovered", |
|
|
"FLASH: This Week Only - Save $500", |
|
|
"EXCLUSIVE: Secret Savings Method Revealed", |
|
|
], |
|
|
"headline_style": "ALL CAPS with news prefix (BREAKING:, URGENT:, ALERT:)", |
|
|
"tone": "Urgent, newsworthy, time-sensitive", |
|
|
"psychological_triggers": ["FOMO", "Urgency", "Curiosity"], |
|
|
"tags": [], |
|
|
}, |
|
|
"mobile_post": { |
|
|
"name": "Mobile Post", |
|
|
"description": "Optimized for mobile scrolling, short and punchy", |
|
|
"best_for": ["quick engagement", "thumb-stopping content", "social feeds"], |
|
|
"visual_style": "Mobile-first design, clean, easy to read on small screens", |
|
|
"hook_examples": [ |
|
|
"Save $500/Year in 2 Minutes", |
|
|
"Get Your Quote - Tap to Start", |
|
|
"See Your Savings Instantly", |
|
|
"One tap. Big savings.", |
|
|
"30 seconds to lower rates", |
|
|
], |
|
|
"headline_style": "Short, punchy, action-oriented (under 8 words)", |
|
|
"tone": "Quick, casual, conversational", |
|
|
"psychological_triggers": ["Convenience", "Speed", "Ease"], |
|
|
"tags": [], |
|
|
}, |
|
|
"before_after": { |
|
|
"name": "Before/After", |
|
|
"description": "Shows transformation, contrast between old and new state", |
|
|
"best_for": ["transformations", "improvements", "results showcase"], |
|
|
"visual_style": "Split-screen comparison, clear before/after contrast", |
|
|
"hook_examples": [ |
|
|
"From $200/Month to $50/Month", |
|
|
"Before: High Rates. After: Big Savings", |
|
|
"Transform Your Insurance Costs Today", |
|
|
"See What Changed Everything", |
|
|
"The Difference One Call Made", |
|
|
], |
|
|
"headline_style": "Comparison format, specific numbers, transformation language", |
|
|
"tone": "Results-focused, proof-based, transformation", |
|
|
"psychological_triggers": ["Transformation", "Proof", "Results"], |
|
|
"tags": [], |
|
|
}, |
|
|
"testimonial": { |
|
|
"name": "Testimonial", |
|
|
"description": "Social proof through customer stories and reviews", |
|
|
"best_for": ["trust building", "social proof", "credibility"], |
|
|
"visual_style": "Quote cards, star ratings, real customer photos", |
|
|
"hook_examples": [ |
|
|
"Join 50,000+ Happy Customers", |
|
|
"Rated 5 Stars by Thousands", |
|
|
"See Why Customers Love Us", |
|
|
'"Best decision I ever made"', |
|
|
"Real people. Real savings.", |
|
|
], |
|
|
"headline_style": "Quote format, numbers, social proof indicators", |
|
|
"tone": "Trustworthy, relatable, authentic", |
|
|
"psychological_triggers": ["Social Proof", "Trust", "Belonging"], |
|
|
"tags": [], |
|
|
}, |
|
|
"lifestyle": { |
|
|
"name": "Lifestyle", |
|
|
"description": "Aspirational imagery showing the desired lifestyle", |
|
|
"best_for": ["aspiration", "emotional connection", "dream selling"], |
|
|
"visual_style": "Aspirational imagery, happy people, dream scenarios", |
|
|
"hook_examples": [ |
|
|
"Live Life Fully Protected", |
|
|
"Drive with Complete Confidence", |
|
|
"Peace of Mind on Every Journey", |
|
|
"The Life You Deserve", |
|
|
"Freedom Starts Here", |
|
|
], |
|
|
"headline_style": "Aspirational, emotional, lifestyle-focused", |
|
|
"tone": "Aspirational, emotional, inspiring", |
|
|
"psychological_triggers": ["Aspiration", "Desire", "Freedom"], |
|
|
"tags": [], |
|
|
}, |
|
|
"educational": { |
|
|
"name": "Educational", |
|
|
"description": "Provides value through information and tips", |
|
|
"best_for": ["authority building", "value-first approach", "complex topics"], |
|
|
"visual_style": "Infographic style, lists, clear information hierarchy", |
|
|
"hook_examples": [ |
|
|
"3 Things Your Insurance Agent Won't Tell You", |
|
|
"The Hidden Costs of Cheap Insurance", |
|
|
"What Every Homeowner Must Know", |
|
|
"Learn the Secret to Lower Rates", |
|
|
"5 Mistakes That Cost You Money", |
|
|
], |
|
|
"headline_style": "Numbers, curiosity gaps, valuable information promise", |
|
|
"tone": "Informative, helpful, authoritative", |
|
|
"psychological_triggers": ["Curiosity", "Knowledge", "Fear of Missing Out"], |
|
|
"tags": [], |
|
|
}, |
|
|
"comparison": { |
|
|
"name": "Comparison", |
|
|
"description": "Compares to competitors or alternatives", |
|
|
"best_for": ["differentiation", "competitive positioning", "value demonstration"], |
|
|
"visual_style": "Side-by-side comparison, checkmarks vs X marks", |
|
|
"hook_examples": [ |
|
|
"Why Customers Are Switching", |
|
|
"The Difference Is Clear", |
|
|
"Compare and Save Hundreds", |
|
|
"What Others Charge vs Our Price", |
|
|
"See the Better Option", |
|
|
], |
|
|
"headline_style": "Comparison language, competitive positioning", |
|
|
"tone": "Confident, comparative, fact-based", |
|
|
"psychological_triggers": ["Comparison", "Value", "Smart Choice"], |
|
|
"tags": [], |
|
|
}, |
|
|
"storytelling": { |
|
|
"name": "Storytelling", |
|
|
"description": "Narrative-driven content that tells a story", |
|
|
"best_for": ["emotional connection", "memorable content", "brand building"], |
|
|
"visual_style": "Narrative imagery, sequential scenes, story elements", |
|
|
"hook_examples": [ |
|
|
"When Sarah Lost Everything...", |
|
|
"The Day That Changed My Life", |
|
|
"I Never Thought It Would Happen to Me", |
|
|
"Here's What Happened Next", |
|
|
"The Story Nobody Tells You", |
|
|
], |
|
|
"headline_style": "Narrative hooks, story beginnings, curiosity builders", |
|
|
"tone": "Narrative, emotional, personal", |
|
|
"psychological_triggers": ["Empathy", "Curiosity", "Emotion"], |
|
|
"tags": [], |
|
|
}, |
|
|
"problem_solution": { |
|
|
"name": "Problem/Solution", |
|
|
"description": "Identifies a problem and presents the solution", |
|
|
"best_for": ["pain point targeting", "solution selling", "problem awareness"], |
|
|
"visual_style": "Problem visualization, solution presentation, relief imagery", |
|
|
"hook_examples": [ |
|
|
"Tired of High Insurance Rates?", |
|
|
"Finally, a Solution That Works", |
|
|
"The Problem Nobody Talks About", |
|
|
"End Your Insurance Frustration", |
|
|
"There's a Better Way", |
|
|
], |
|
|
"headline_style": "Problem questions, solution statements, relief language", |
|
|
"tone": "Empathetic, problem-aware, solution-focused", |
|
|
"psychological_triggers": ["Pain Relief", "Problem Awareness", "Hope"], |
|
|
"tags": [], |
|
|
}, |
|
|
"authority": { |
|
|
"name": "Authority", |
|
|
"description": "Establishes expertise and credibility", |
|
|
"best_for": ["credibility building", "expert positioning", "trust establishment"], |
|
|
"visual_style": "Professional imagery, credentials, expert endorsements", |
|
|
"hook_examples": [ |
|
|
"Expert-Recommended Insurance", |
|
|
"Backed by 50 Years of Experience", |
|
|
"What the Pros Know About Insurance", |
|
|
"Industry-Leading Protection", |
|
|
"Trusted by Professionals", |
|
|
], |
|
|
"headline_style": "Authority indicators, credentials, expert language", |
|
|
"tone": "Professional, authoritative, trustworthy", |
|
|
"psychological_triggers": ["Authority", "Trust", "Expertise"], |
|
|
"tags": [], |
|
|
}, |
|
|
"scarcity": { |
|
|
"name": "Scarcity", |
|
|
"description": "Creates urgency through limited availability", |
|
|
"best_for": ["limited offers", "exclusive deals", "time-sensitive promotions"], |
|
|
"visual_style": "Countdown timers, limited stock indicators, exclusive badges", |
|
|
"hook_examples": [ |
|
|
"Only 50 Spots Left This Month", |
|
|
"Limited Availability - Act Fast", |
|
|
"Exclusive Offer for First 100", |
|
|
"While Supplies Last", |
|
|
"Don't Miss Your Chance", |
|
|
], |
|
|
"headline_style": "Numbers, time limits, availability language", |
|
|
"tone": "Urgent, exclusive, time-sensitive", |
|
|
"psychological_triggers": ["FOMO", "Urgency", "Exclusivity"], |
|
|
"tags": [], |
|
|
}, |
|
|
"benefit_stack": { |
|
|
"name": "Benefit Stack", |
|
|
"description": "Lists multiple benefits in quick succession", |
|
|
"best_for": ["value demonstration", "feature highlights", "quick scanning"], |
|
|
"visual_style": "Bullet points, checkmarks, organized list format", |
|
|
"hook_examples": [ |
|
|
"Save Money, Save Time, Save Stress", |
|
|
"3 Benefits in One Solution", |
|
|
"Everything You Need, All in One", |
|
|
"More Coverage, Lower Cost, Better Service", |
|
|
"Protection + Savings + Peace of Mind", |
|
|
], |
|
|
"headline_style": "Multiple benefits, parallel structure, value stacking", |
|
|
"tone": "Value-focused, comprehensive, efficient", |
|
|
"psychological_triggers": ["Value", "Convenience", "Completeness"], |
|
|
"tags": [], |
|
|
}, |
|
|
"risk_reversal": { |
|
|
"name": "Risk Reversal", |
|
|
"description": "Removes risk and uncertainty from the decision", |
|
|
"best_for": ["overcoming objections", "building confidence", "reducing hesitation"], |
|
|
"visual_style": "Guarantee badges, risk-free indicators, confidence builders", |
|
|
"hook_examples": [ |
|
|
"100% Risk-Free Guarantee", |
|
|
"Try It Free - No Commitment", |
|
|
"Cancel Anytime, No Questions", |
|
|
"Money-Back Guarantee", |
|
|
"No Risk, All Reward", |
|
|
], |
|
|
"headline_style": "Guarantee language, risk removal, confidence builders", |
|
|
"tone": "Reassuring, confident, risk-free", |
|
|
"psychological_triggers": ["Security", "Trust", "Risk Reduction"], |
|
|
"tags": [], |
|
|
}, |
|
|
"contrarian": { |
|
|
"name": "Contrarian", |
|
|
"description": "Challenges conventional wisdom or expectations", |
|
|
"best_for": ["differentiation", "attention-grabbing", "thought leadership"], |
|
|
"visual_style": "Bold statements, unexpected visuals, pattern breaks", |
|
|
"hook_examples": [ |
|
|
"Why Everything You Know About Insurance Is Wrong", |
|
|
"The Unpopular Truth About Rates", |
|
|
"Stop Following the Crowd", |
|
|
"The Counter-Intuitive Way to Save", |
|
|
"What They Don't Want You to Know", |
|
|
], |
|
|
"headline_style": "Contrarian statements, pattern breaks, unexpected angles", |
|
|
"tone": "Bold, provocative, thought-provoking", |
|
|
"psychological_triggers": ["Curiosity", "Differentiation", "Intellectual"], |
|
|
"tags": [], |
|
|
}, |
|
|
"case_study": { |
|
|
"name": "Case Study", |
|
|
"description": "Shows real results and specific outcomes", |
|
|
"best_for": ["proof demonstration", "results showcase", "credibility"], |
|
|
"visual_style": "Before/after data, specific numbers, real examples", |
|
|
"hook_examples": [ |
|
|
"How Sarah Saved $1,200 in 6 Months", |
|
|
"Real Results from Real Customers", |
|
|
"The Exact Steps That Worked", |
|
|
"See the Numbers That Matter", |
|
|
"From Problem to Solution: The Journey", |
|
|
], |
|
|
"headline_style": "Specific examples, real names, concrete results", |
|
|
"tone": "Proof-based, specific, results-focused", |
|
|
"psychological_triggers": ["Proof", "Social Proof", "Results"], |
|
|
"tags": [], |
|
|
}, |
|
|
"interactive": { |
|
|
"name": "Interactive", |
|
|
"description": "Engages through questions, quizzes, or participation", |
|
|
"best_for": ["engagement", "personalization", "interaction"], |
|
|
"visual_style": "Interactive elements, questions, quiz formats", |
|
|
"hook_examples": [ |
|
|
"Take Our 30-Second Quiz", |
|
|
"Answer 3 Questions, Get Your Rate", |
|
|
"See If You Qualify in 60 Seconds", |
|
|
"What's Your Insurance Personality?", |
|
|
"Find Your Perfect Match", |
|
|
], |
|
|
"headline_style": "Questions, interactive prompts, participation language", |
|
|
"tone": "Engaging, interactive, personalized", |
|
|
"psychological_triggers": ["Engagement", "Personalization", "Curiosity"], |
|
|
"tags": [], |
|
|
}, |
|
|
|
|
|
"imessage": { |
|
|
"name": "iMessage", |
|
|
"description": "iOS iMessage screenshot style", |
|
|
"best_for": ["personal connection", "conversation", "informal offers"], |
|
|
"visual_style": "iOS iMessage screenshot style, blue/green message bubbles, iPhone interface, authentic conversation look", |
|
|
"headline_style": "Short, conversational, text-message phrasing", |
|
|
"tone": "Personal, native, conversational", |
|
|
"hook_examples": [ |
|
|
"You need to see this", |
|
|
"Just saved a ton on this", |
|
|
"Wait have you tried this?", |
|
|
"My friend sent me this", |
|
|
"This actually worked for me", |
|
|
], |
|
|
"psychological_triggers": ["Personalization", "Trust", "Intimacy"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "chat_style"], |
|
|
"font_style": "San Francisco, system font", |
|
|
"colors": { |
|
|
"primary": "#007AFF", |
|
|
"secondary": "#34C759", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include battery %, time, signal bars", |
|
|
"Use realistic conversation format", |
|
|
"Keep messages short (2–4 messages)", |
|
|
], |
|
|
}, |
|
|
|
|
|
"whatsapp": { |
|
|
"name": "WhatsApp", |
|
|
"description": "WhatsApp chat screenshot style", |
|
|
"best_for": ["personal recommendations", "peer-to-peer", "urgent messages"], |
|
|
"visual_style": "WhatsApp chat interface, green bubbles, checkmarks, authentic conversation feel", |
|
|
"headline_style": "Casual chat-style lines, informal phrasing", |
|
|
"tone": "Friendly, casual, personal", |
|
|
"hook_examples": [ |
|
|
"Hey did you see this?", |
|
|
"Just got this deal", |
|
|
"You have to check this out", |
|
|
"OMG this actually works", |
|
|
"Sent you the link", |
|
|
], |
|
|
"psychological_triggers": ["Trust", "Social Proof", "Urgency"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "chat_style"], |
|
|
"font_style": "Helvetica Neue, system font", |
|
|
"colors": { |
|
|
"primary": "#25D366", |
|
|
"secondary": "#128C7E", |
|
|
"background": "#ECE5DD", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include double checkmarks (read receipts)", |
|
|
"Add timestamps", |
|
|
"Use typical WhatsApp formatting", |
|
|
], |
|
|
}, |
|
|
|
|
|
"sms": { |
|
|
"name": "SMS/Text", |
|
|
"description": "Standard SMS text message style", |
|
|
"best_for": ["urgent alerts", "personal messages", "time-sensitive offers"], |
|
|
"visual_style": "Android/iOS SMS interface, simple text bubbles, notification style", |
|
|
"headline_style": "Ultra-short alert-style text", |
|
|
"tone": "Direct, urgent, concise", |
|
|
"hook_examples": [ |
|
|
"Urgent: Your rate is ready", |
|
|
"Limited time - reply now", |
|
|
"Action required", |
|
|
"Expires in 24 hrs", |
|
|
"You qualify - tap to see", |
|
|
], |
|
|
"psychological_triggers": ["Urgency", "Attention", "Interrupt"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "chat_style"], |
|
|
"font_style": "Roboto or San Francisco", |
|
|
"colors": { |
|
|
"primary": "#2196F3", |
|
|
"secondary": "#4CAF50", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Keep messages very short", |
|
|
"Use typical SMS abbreviations", |
|
|
"Include carrier/time info", |
|
|
], |
|
|
}, |
|
|
|
|
|
"news_chyron": { |
|
|
"name": "News Chyron", |
|
|
"description": "Breaking news ticker style", |
|
|
"best_for": ["breaking announcements", "urgent news", "time-sensitive offers"], |
|
|
"visual_style": "Red/white scrolling ticker, TV news channel aesthetic, urgent feel", |
|
|
"headline_style": "ALL CAPS with BREAKING / ALERT prefixes", |
|
|
"tone": "Urgent, authoritative, time-sensitive", |
|
|
"hook_examples": [ |
|
|
"BREAKING: Rates Drop 40%", |
|
|
"ALERT: Limited Time Offer", |
|
|
], |
|
|
"psychological_triggers": ["Urgency", "FOMO", "Attention"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "alert"], |
|
|
"font_style": "Impact, Arial Black, bold sans-serif", |
|
|
"colors": { |
|
|
"primary": "#FF0000", |
|
|
"secondary": "#FFFFFF", |
|
|
"background": "#000000", |
|
|
"text": "#FFFFFF", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Use BREAKING/ALERT prefix", |
|
|
"Include news channel logo area", |
|
|
"Add scrolling ticker effect", |
|
|
], |
|
|
}, |
|
|
|
|
|
"email_notification": { |
|
|
"name": "Email Notification", |
|
|
"description": "Email notification/preview style", |
|
|
"best_for": ["official communications", "professional offers", "formal announcements"], |
|
|
"visual_style": "Email client notification preview, sender + subject UI", |
|
|
"headline_style": "Subject-line driven, professional phrasing", |
|
|
"tone": "Professional, official, composed", |
|
|
"hook_examples": [ |
|
|
"Your quote is ready for review", |
|
|
"Important: Savings confirmation", |
|
|
"Official notice - action required", |
|
|
"Your application has been approved", |
|
|
"Document attached: Your new rate", |
|
|
], |
|
|
"psychological_triggers": ["Authority", "Trust"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "document_style"], |
|
|
"font_style": "System font, Segoe UI, Roboto", |
|
|
"colors": { |
|
|
"primary": "#1A73E8", |
|
|
"secondary": "#EA4335", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#202124", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include sender and subject", |
|
|
"Add unread badge if relevant", |
|
|
"Use realistic timestamps", |
|
|
], |
|
|
}, |
|
|
|
|
|
"reddit_post": { |
|
|
"name": "Reddit Post", |
|
|
"description": "Reddit post/comment style", |
|
|
"best_for": ["social proof", "user discussions", "authentic testimonials"], |
|
|
"visual_style": "Reddit thread UI, upvotes, comments, forum-style layout", |
|
|
"headline_style": "Casual post titles, story-driven", |
|
|
"tone": "Authentic, conversational, community-driven", |
|
|
"hook_examples": [ |
|
|
"Unpopular opinion but this actually saved me", |
|
|
"Has anyone else tried this?", |
|
|
"Finally something that worked", |
|
|
"PSA: You might be overpaying", |
|
|
"TIL there's a way to get lower rates", |
|
|
], |
|
|
"psychological_triggers": ["Social Proof", "Belonging", "Authenticity"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc", "chat_style"], |
|
|
"font_style": "Noto Sans, Arial", |
|
|
"colors": { |
|
|
"primary": "#FF4500", |
|
|
"secondary": "#0079D3", |
|
|
"background": "#DAE0E6", |
|
|
"text": "#1A1A1B", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include upvote counts", |
|
|
"Add anonymous-style usernames", |
|
|
"Reference subreddit context", |
|
|
], |
|
|
}, |
|
|
|
|
|
"system_notification": { |
|
|
"name": "System Notification", |
|
|
"description": "iOS/Android system notification popup", |
|
|
"best_for": ["urgent alerts", "app notifications", "system messages"], |
|
|
"visual_style": "Minimal OS notification banner, plain system UI", |
|
|
"headline_style": "1-line alert text", |
|
|
"tone": "Neutral, urgent, system-level", |
|
|
"hook_examples": [ |
|
|
"Your savings are ready", |
|
|
"New message: Quote available", |
|
|
"Reminder: Offer expires soon", |
|
|
"Update: Action required", |
|
|
"You have a new offer", |
|
|
], |
|
|
"psychological_triggers": ["Interrupt", "Urgency", "Attention"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "alert"], |
|
|
"font_style": "San Francisco, Roboto, system font", |
|
|
"colors": { |
|
|
"primary": "#000000", |
|
|
"secondary": "#666666", |
|
|
"background": "#F2F2F2", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"NO emojis or decorative elements", |
|
|
"Keep to 1–2 short lines", |
|
|
"Use app icon if relevant", |
|
|
], |
|
|
"avoid": ["emojis", "decorative elements", "gradients"], |
|
|
}, |
|
|
|
|
|
"push_notification": { |
|
|
"name": "Push Notification", |
|
|
"description": "Mobile app push notification style", |
|
|
"best_for": ["app alerts", "time-sensitive messages", "quick updates"], |
|
|
"visual_style": "Mobile push banner with app icon and timestamp", |
|
|
"headline_style": "5–7 word alert headline", |
|
|
"tone": "Immediate, concise, action-oriented", |
|
|
"hook_examples": [ |
|
|
"Your quote is ready - tap to view", |
|
|
"Limited time: Save up to 40%", |
|
|
"New offer just for you", |
|
|
"Don't miss out - ends soon", |
|
|
"You're approved - see your rate", |
|
|
], |
|
|
"psychological_triggers": ["Urgency", "Attention"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "alert"], |
|
|
"font_style": "System font", |
|
|
"colors": { |
|
|
"primary": "#007AFF", |
|
|
"secondary": "#8E8E93", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include app icon", |
|
|
"Very short headline", |
|
|
"Add timestamp (now / 2m ago)", |
|
|
], |
|
|
}, |
|
|
"sticky_note": { |
|
|
"name": "Sticky Note", |
|
|
"description": "Handwritten sticky note overlay", |
|
|
"best_for": ["personal reminders", "quick tips", "informal notes"], |
|
|
"visual_style": "Yellow sticky note overlay on image, handwritten-style text, slightly wrinkled paper texture", |
|
|
"headline_style": "Short handwritten notes, casual phrasing", |
|
|
"tone": "Casual, personal, informal", |
|
|
"hook_examples": [ |
|
|
"Try this first!", |
|
|
"Don't forget - call them", |
|
|
"Saved me $$$", |
|
|
"Best tip I got", |
|
|
"Do this before Friday", |
|
|
], |
|
|
"psychological_triggers": ["Personalization", "Informality", "Authenticity"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc"], |
|
|
"font_style": "Handwriting fonts, marker style", |
|
|
"colors": { |
|
|
"primary": "#FFEB3B", |
|
|
"secondary": "#FFC107", |
|
|
"background": "#FFEB3B", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Slight angle/tilt", |
|
|
"Handwritten font style", |
|
|
"Paper texture/wrinkles", |
|
|
], |
|
|
}, |
|
|
|
|
|
"memo": { |
|
|
"name": "Internal Memo", |
|
|
"description": "Office memo/document style", |
|
|
"best_for": ["official announcements", "leaked documents", "internal secrets"], |
|
|
"visual_style": "Typewritten internal memo on yellow/white paper, document-style layout", |
|
|
"headline_style": "Formal memo headers, internal document language", |
|
|
"tone": "Formal, serious, confidential", |
|
|
"hook_examples": [ |
|
|
"CONFIDENTIAL: Rate reduction notice", |
|
|
"INTERNAL: New savings program", |
|
|
"MEMO: Policy update effective immediately", |
|
|
"RESTRICTED: Preferred customer rates", |
|
|
"OFFICIAL: Your eligibility confirmed", |
|
|
], |
|
|
"psychological_triggers": ["Authority", "Curiosity", "Exclusivity"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc", "document_style"], |
|
|
"font_style": "Courier, typewriter fonts", |
|
|
"colors": { |
|
|
"primary": "#000000", |
|
|
"secondary": "#333333", |
|
|
"background": "#FFFFCC", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Add CONFIDENTIAL stamp if relevant", |
|
|
"Include date, to/from fields", |
|
|
"Paper texture or fold marks", |
|
|
], |
|
|
}, |
|
|
|
|
|
"browser_alert": { |
|
|
"name": "Browser Alert", |
|
|
"description": "Browser popup / alert dialog", |
|
|
"best_for": ["urgent warnings", "system alerts", "confirmation messages"], |
|
|
"visual_style": "Browser dialog box with alert icon, OK/Cancel buttons", |
|
|
"headline_style": "Short alert-style system messages", |
|
|
"tone": "Urgent, system-level, direct", |
|
|
"hook_examples": [ |
|
|
"You qualify for savings. Continue?", |
|
|
"Limited offer detected. Accept?", |
|
|
"Your rate is ready. View now?", |
|
|
"Warning: Price increases tomorrow", |
|
|
"Confirm your discount before it expires", |
|
|
], |
|
|
"psychological_triggers": ["Urgency", "Interrupt", "Attention"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "alert", "document_style"], |
|
|
"font_style": "System font, Segoe UI", |
|
|
"colors": { |
|
|
"primary": "#0078D4", |
|
|
"secondary": "#D83B01", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include browser chrome", |
|
|
"Add alert icon", |
|
|
"Use realistic button styling", |
|
|
], |
|
|
}, |
|
|
|
|
|
"social_post": { |
|
|
"name": "Social Media Post", |
|
|
"description": "Facebook / Instagram feed post style", |
|
|
"best_for": ["social proof", "user content", "organic feel"], |
|
|
"visual_style": "Social media feed UI with profile, likes, comments", |
|
|
"headline_style": "Casual post captions, organic phrasing", |
|
|
"tone": "Social, relatable, authentic", |
|
|
"hook_examples": [ |
|
|
"Okay so I finally did the thing", |
|
|
"No one talks about this but", |
|
|
"Just had to share this", |
|
|
"Game changer honestly", |
|
|
"Why did I wait so long", |
|
|
], |
|
|
"psychological_triggers": ["Social Proof", "Belonging", "Authenticity"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc", "chat_style"], |
|
|
"font_style": "Helvetica, system font", |
|
|
"colors": { |
|
|
"primary": "#1877F2", |
|
|
"secondary": "#E4405F", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#1C1E21", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include profile picture", |
|
|
"Add like/comment counts", |
|
|
"Use platform-native formatting", |
|
|
], |
|
|
}, |
|
|
|
|
|
"standard": { |
|
|
"name": "Standard Ad", |
|
|
"description": "Clean, professional ad format", |
|
|
"best_for": ["professional campaigns", "brand awareness", "general advertising"], |
|
|
"visual_style": "Clean ad layout, clear headline and CTA, professional design", |
|
|
"headline_style": "Clear benefit-driven headline", |
|
|
"tone": "Professional, neutral, brand-safe", |
|
|
"hook_examples": [ |
|
|
"Get your free quote in minutes", |
|
|
"Compare rates. Save money.", |
|
|
"Trusted by thousands of customers", |
|
|
"Simple. Fast. Affordable.", |
|
|
"See how much you could save", |
|
|
], |
|
|
"psychological_triggers": ["Clarity", "Trust", "Professionalism"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type"], |
|
|
"font_style": "Clean sans-serif fonts", |
|
|
"colors": { |
|
|
"primary": "#2196F3", |
|
|
"secondary": "#FF9800", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#212121", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Clear visual hierarchy", |
|
|
"Prominent CTA", |
|
|
"Brand-consistent styling", |
|
|
], |
|
|
}, |
|
|
|
|
|
"telegram": { |
|
|
"name": "Telegram", |
|
|
"description": "Telegram chat message style", |
|
|
"best_for": ["personal messages", "group chats", "informal communication"], |
|
|
"visual_style": "Telegram chat interface, blue message bubbles", |
|
|
"headline_style": "Casual chat-style lines", |
|
|
"tone": "Informal, conversational", |
|
|
"hook_examples": [ |
|
|
"Check this out", |
|
|
"Thought you'd want to see", |
|
|
"This is the one", |
|
|
"Finally found it", |
|
|
"Sending you the link", |
|
|
], |
|
|
"psychological_triggers": ["Personalization", "Trust"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "chat_style"], |
|
|
"font_style": "Roboto, system font", |
|
|
"colors": { |
|
|
"primary": "#3390EC", |
|
|
"secondary": "#0088CC", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include Telegram UI elements", |
|
|
"Use typical Telegram formatting", |
|
|
"Add read receipts if relevant", |
|
|
], |
|
|
}, |
|
|
|
|
|
"slack": { |
|
|
"name": "Slack", |
|
|
"description": "Slack workspace message style", |
|
|
"best_for": ["team communication", "workplace announcements", "professional updates"], |
|
|
"visual_style": "Slack channel UI with avatars and message threads", |
|
|
"headline_style": "Short internal-style announcements", |
|
|
"tone": "Professional, internal, conversational", |
|
|
"hook_examples": [ |
|
|
"Heads up - new rates live", |
|
|
"FYI team discount available", |
|
|
"Quick update on savings program", |
|
|
"Reminder: Enrollment closes Friday", |
|
|
"PSA: Worth checking your rate", |
|
|
], |
|
|
"psychological_triggers": ["Authority", "Belonging", "Professionalism"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native", "chat_style"], |
|
|
"font_style": "Lato, Slack font", |
|
|
"colors": { |
|
|
"primary": "#4A154B", |
|
|
"secondary": "#36C5F0", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#1D1C1D", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include channel name", |
|
|
"Add user avatar", |
|
|
"Use Slack message formatting", |
|
|
], |
|
|
}, |
|
|
|
|
|
"instagram_story": { |
|
|
"name": "Instagram Story", |
|
|
"description": "Instagram story frame style", |
|
|
"best_for": ["social media engagement", "story-style content", "mobile-first ads"], |
|
|
"visual_style": "Vertical 9:16 Instagram story UI with overlays", |
|
|
"headline_style": "Big bold overlays, short phrases", |
|
|
"tone": "Energetic, visual, trendy", |
|
|
"hook_examples": [ |
|
|
"Swipe to see 👆", |
|
|
"No one talks about this", |
|
|
"POV: You finally save", |
|
|
"Wait for it...", |
|
|
"This changed everything", |
|
|
], |
|
|
"psychological_triggers": ["Engagement", "FOMO", "Visual Appeal"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc"], |
|
|
"font_style": "Instagram font, system font", |
|
|
"colors": { |
|
|
"primary": "#E4405F", |
|
|
"secondary": "#833AB4", |
|
|
"background": "#000000", |
|
|
"text": "#FFFFFF", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Vertical format (9:16)", |
|
|
"Include story UI elements", |
|
|
"Use Instagram-style fonts", |
|
|
], |
|
|
}, |
|
|
|
|
|
"tiktok_style": { |
|
|
"name": "TikTok Style", |
|
|
"description": "TikTok video frame style", |
|
|
"best_for": ["youth engagement", "viral content", "trending topics"], |
|
|
"visual_style": "Vertical TikTok video UI with overlays", |
|
|
"headline_style": "Bold, punchy on-screen text", |
|
|
"tone": "High-energy, playful, trend-driven", |
|
|
"hook_examples": [ |
|
|
"POV: you finally get a good rate", |
|
|
"Wait this actually works??", |
|
|
"No one told me this", |
|
|
"The secret they don't want you to know", |
|
|
"Drop a 👋 if you need this", |
|
|
], |
|
|
"psychological_triggers": ["Novelty", "Engagement", "Trendiness"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc"], |
|
|
"font_style": "TikTok font, bold sans-serif", |
|
|
"colors": { |
|
|
"primary": "#000000", |
|
|
"secondary": "#FE2C55", |
|
|
"background": "#000000", |
|
|
"text": "#FFFFFF", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Vertical video format", |
|
|
"Bold text overlays", |
|
|
"Trending style elements", |
|
|
], |
|
|
}, |
|
|
|
|
|
"linkedin_post": { |
|
|
"name": "LinkedIn Post", |
|
|
"description": "LinkedIn feed post style", |
|
|
"best_for": ["professional networking", "B2B marketing", "career-focused content"], |
|
|
"visual_style": "LinkedIn feed UI with professional profile elements", |
|
|
"headline_style": "Professional, insight-driven headlines", |
|
|
"tone": "Professional, authoritative, thoughtful", |
|
|
"hook_examples": [ |
|
|
"3 lessons I learned about saving on coverage", |
|
|
"Why most people overpay (and how to fix it)", |
|
|
"The one change that cut my costs 40%", |
|
|
"A thread on what actually moves the needle", |
|
|
"Unpopular take: You might be underinsured", |
|
|
], |
|
|
"psychological_triggers": ["Authority", "Credibility", "Professionalism"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "ugc"], |
|
|
"font_style": "LinkedIn font, professional sans-serif", |
|
|
"colors": { |
|
|
"primary": "#0077B5", |
|
|
"secondary": "#000000", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include profile elements", |
|
|
"Maintain professional tone", |
|
|
"Use LinkedIn-style formatting", |
|
|
], |
|
|
}, |
|
|
|
|
|
"app_store_listing": { |
|
|
"name": "App Store Listing", |
|
|
"description": "App store screenshot style", |
|
|
"best_for": ["app promotion", "mobile apps", "app features"], |
|
|
"visual_style": "App store listing UI with icon, ratings, screenshots", |
|
|
"headline_style": "Feature-focused, benefit-driven", |
|
|
"tone": "Polished, product-focused", |
|
|
"hook_examples": [ |
|
|
"Get your quote in 2 minutes", |
|
|
"Compare. Save. Done.", |
|
|
"Rated 4.9 by 50,000+ users", |
|
|
"Simple quotes. Real savings.", |
|
|
"The easy way to lower your rate", |
|
|
], |
|
|
"psychological_triggers": ["Trust", "Clarity", "Social Proof"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "native"], |
|
|
"font_style": "San Francisco, system font", |
|
|
"colors": { |
|
|
"primary": "#007AFF", |
|
|
"secondary": "#FF9500", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include app icon", |
|
|
"Star ratings", |
|
|
"Use app store UI elements", |
|
|
], |
|
|
}, |
|
|
|
|
|
"email_signature": { |
|
|
"name": "Email Signature", |
|
|
"description": "Professional email signature style", |
|
|
"best_for": ["professional communication", "B2B outreach", "formal announcements"], |
|
|
"visual_style": "Professional email signature with contact details and logo", |
|
|
"headline_style": "Name / role driven hierarchy", |
|
|
"tone": "Formal, professional", |
|
|
"hook_examples": [ |
|
|
"Get your free quote today", |
|
|
"Trusted advisor | Licensed agent", |
|
|
"Let's find your best rate", |
|
|
"Serving clients since 2010", |
|
|
"Reply for a personalized quote", |
|
|
], |
|
|
"psychological_triggers": ["Authority", "Trust"], |
|
|
"container_type": True, |
|
|
"tags": ["container_type", "document_style"], |
|
|
"font_style": "Arial, Helvetica, professional fonts", |
|
|
"colors": { |
|
|
"primary": "#000000", |
|
|
"secondary": "#666666", |
|
|
"background": "#FFFFFF", |
|
|
"text": "#000000", |
|
|
}, |
|
|
"authenticity_tips": [ |
|
|
"Include contact information", |
|
|
"Clean professional formatting", |
|
|
"Company logo if relevant", |
|
|
], |
|
|
}, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
def get_all_frameworks() -> Dict[str, Dict[str, Any]]: |
|
|
"""Get all available frameworks.""" |
|
|
return FRAMEWORKS |
|
|
|
|
|
|
|
|
def get_framework(key: str) -> Optional[Dict[str, Any]]: |
|
|
"""Get a specific framework by key.""" |
|
|
return FRAMEWORKS.get(key) |
|
|
|
|
|
|
|
|
def get_random_framework() -> Dict[str, Any]: |
|
|
"""Get a random framework.""" |
|
|
key = random.choice(list(FRAMEWORKS.keys())) |
|
|
return {"key": key, **FRAMEWORKS[key]} |
|
|
|
|
|
|
|
|
def get_frameworks_for_niche(niche: str, count: int = 3) -> List[Dict[str, Any]]: |
|
|
"""Get recommended frameworks for a niche.""" |
|
|
niche_lower = niche.lower().replace(" ", "_").replace("-", "_") |
|
|
|
|
|
|
|
|
niche_preferences = { |
|
|
"home_insurance": ["testimonial", "problem_solution", "authority", "before_after", "lifestyle"], |
|
|
"glp1": ["testimonial", "lifestyle", "authority", "problem_solution", "before_after"], |
|
|
"auto_insurance": ["testimonial", "problem_solution", "authority", "before_after", "comparison"], |
|
|
} |
|
|
|
|
|
|
|
|
preferred_keys = niche_preferences.get(niche_lower, list(FRAMEWORKS.keys())) |
|
|
|
|
|
|
|
|
shuffled_preferred = preferred_keys.copy() |
|
|
random.shuffle(shuffled_preferred) |
|
|
remaining = [k for k in FRAMEWORKS.keys() if k not in preferred_keys] |
|
|
random.shuffle(remaining) |
|
|
all_keys = shuffled_preferred + remaining |
|
|
|
|
|
|
|
|
selected = all_keys[:count] |
|
|
|
|
|
return [{"key": k, **FRAMEWORKS[k]} for k in selected] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_framework_visual_guidance(framework_key: str) -> str: |
|
|
"""Get visual guidance for a framework (used for image generation).""" |
|
|
fw = FRAMEWORKS.get(framework_key) |
|
|
if fw: |
|
|
return fw.get("visual_style", "") or fw.get("visual_guidance", "") |
|
|
return f"Framework: {framework_key}, authentic appearance" |
|
|
|
|
|
|
|
|
def get_all_container_type_frameworks() -> Dict[str, Dict[str, Any]]: |
|
|
"""Get all frameworks that are container-type (native/visual format styles).""" |
|
|
return {k: v for k, v in FRAMEWORKS.items() if v.get("container_type")} |
|
|
|
|
|
|
|
|
def get_frameworks_by_tag(tag: str) -> List[str]: |
|
|
"""Return framework keys that have the given tag.""" |
|
|
return [k for k, v in FRAMEWORKS.items() if tag in v.get("tags", [])] |
|
|
|
|
|
|
|
|
def get_native_frameworks() -> List[str]: |
|
|
"""Framework keys that look like native app interfaces.""" |
|
|
return get_frameworks_by_tag("native") |
|
|
|
|
|
|
|
|
def get_ugc_frameworks() -> List[str]: |
|
|
"""Framework keys that look like user-generated content.""" |
|
|
return get_frameworks_by_tag("ugc") |
|
|
|
|
|
|
|
|
def get_alert_frameworks() -> List[str]: |
|
|
"""Framework keys that create urgency / alert style.""" |
|
|
return get_frameworks_by_tag("alert") |
|
|
|
|
|
|
|
|
def get_random_container_type_framework() -> Dict[str, Any]: |
|
|
"""Get a random framework that is a container-type (for ad format selection).""" |
|
|
container_frameworks = get_all_container_type_frameworks() |
|
|
if not container_frameworks: |
|
|
return get_random_framework() |
|
|
key = random.choice(list(container_frameworks.keys())) |
|
|
return {"key": key, **container_frameworks[key]} |
|
|
|
|
|
|