""" 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 # Complete list of 10 ad frameworks with detailed configurations 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-specific framework preferences 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"], } # Get preferred frameworks or use all preferred_keys = niche_preferences.get(niche_lower, list(FRAMEWORKS.keys())) # Shuffle so we don't always pick the first (e.g. GLP-1 was always getting before_after when count=1) 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 # Take first count from the shuffled list (random variety per niche) selected = all_keys[:count] return [{"key": k, **FRAMEWORKS[k]} for k in selected] # --------------------------------------------------------------------------- # Container-type framework helpers (visual format / "container" = framework with container_type=True) # --------------------------------------------------------------------------- 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]}