""" Psychological Triggers - Core emotional drivers that make ads convert. """ from typing import Dict, Any, List, Optional import random PSYCHOLOGICAL_TRIGGERS: Dict[str, Dict[str, Any]] = { "fear": { "name": "Fear / Loss Aversion", "description": "Fear of losing what you have or missing out on protection", "copy_angles": ["Don't risk losing your home", "Protect what matters most", "Before disaster strikes"], "visual_cues": ["warning signs", "protection imagery", "security elements"], "color_palette": "warning", "best_for": ["insurance", "security", "protection services"], }, "greed": { "name": "Greed / Savings", "description": "Desire to save money, get more value, maximize gain", "copy_angles": ["Save $500+ per year", "Get more for less", "Maximize your savings"], "visual_cues": ["money imagery", "savings charts", "discount badges"], "color_palette": "savings", "best_for": ["financial products", "deals", "discounts"], }, "fomo": { "name": "FOMO (Fear of Missing Out)", "description": "Anxiety about missing a limited opportunity", "copy_angles": ["Limited time offer", "Only 50 spots left", "Offer expires soon"], "visual_cues": ["countdown timers", "urgency badges", "scarcity indicators"], "color_palette": "urgency", "best_for": ["sales", "launches", "limited offers"], }, "authority": { "name": "Authority / Expertise", "description": "Trust in experts, credentials, and established institutions", "copy_angles": ["Doctor recommended", "Expert approved", "Industry leading"], "visual_cues": ["credentials", "certifications", "professional imagery"], "color_palette": "trust", "best_for": ["health", "professional services", "premium products"], }, "social_proof": { "name": "Social Proof", "description": "Following what others are doing, trust in numbers", "copy_angles": ["Join 50,000+ customers", "5-star rated", "Most popular choice"], "visual_cues": ["star ratings", "customer counts", "testimonials"], "color_palette": "trust", "best_for": ["consumer products", "services", "subscriptions"], }, "curiosity": { "name": "Curiosity", "description": "Desire to learn, discover, and fill knowledge gaps", "copy_angles": ["The secret they don't want you to know", "Discover how", "What they won't tell you"], "visual_cues": ["mystery elements", "reveal moments", "hidden information"], "color_palette": "premium", "best_for": ["educational content", "reveals", "discoveries"], }, "belonging": { "name": "Belonging / Community", "description": "Desire to be part of a group, tribe, or community", "copy_angles": ["Join the community", "Be part of something", "Welcome to the family"], "visual_cues": ["group imagery", "community symbols", "togetherness"], "color_palette": "calm", "best_for": ["memberships", "communities", "brands"], }, "transformation": { "name": "Transformation", "description": "Desire for change, improvement, and becoming better", "copy_angles": ["Transform your life", "Become the best version", "Change everything"], "visual_cues": ["before/after", "progression imagery", "improvement indicators"], "color_palette": "energy", "best_for": ["fitness", "personal development", "lifestyle"], }, "relief": { "name": "Relief / Pain Relief", "description": "Escaping pain, stress, or uncomfortable situations", "copy_angles": ["End the stress", "Finally get relief", "Stop the pain"], "visual_cues": ["relaxation imagery", "relief moments", "calm scenes"], "color_palette": "calm", "best_for": ["health", "stress relief", "solutions"], }, "pride": { "name": "Pride / Self-Worth", "description": "Feeling good about oneself, achievements, and status", "copy_angles": ["You deserve the best", "Treat yourself", "You've earned it"], "visual_cues": ["success imagery", "achievement symbols", "premium elements"], "color_palette": "premium", "best_for": ["luxury", "premium products", "self-care"], }, "urgency": { "name": "Urgency / Time Pressure", "description": "Need to act quickly before time runs out", "copy_angles": ["Act now", "Today only", "Time is running out"], "visual_cues": ["clocks", "timers", "urgent badges"], "color_palette": "urgency", "best_for": ["sales", "deadlines", "limited offers"], }, "exclusivity": { "name": "Exclusivity", "description": "Desire for special access, VIP treatment, insider status", "copy_angles": ["Exclusive offer", "VIP access", "By invitation only"], "visual_cues": ["VIP badges", "exclusive tags", "premium styling"], "color_palette": "premium", "best_for": ["premium products", "memberships", "exclusive deals"], }, } # Trigger combinations that work well together TRIGGER_COMBINATIONS: List[Dict[str, Any]] = [ {"primary": "fear", "secondary": "urgency", "name": "Fear + Urgency", "description": "Creates immediate action through fear of loss"}, {"primary": "greed", "secondary": "fomo", "name": "Savings + FOMO", "description": "Limited-time savings opportunity"}, {"primary": "social_proof", "secondary": "authority", "name": "Proof + Authority", "description": "Expert-backed with customer validation"}, {"primary": "transformation", "secondary": "curiosity", "name": "Transform + Curiosity", "description": "Discover the secret to transformation"}, {"primary": "relief", "secondary": "social_proof", "name": "Relief + Proof", "description": "Join thousands who found relief"}, {"primary": "exclusivity", "secondary": "urgency", "name": "Exclusive + Urgent", "description": "Limited VIP opportunity"}, ] def get_all_triggers() -> Dict[str, Dict[str, Any]]: return PSYCHOLOGICAL_TRIGGERS def get_trigger(key: str) -> Optional[Dict[str, Any]]: return PSYCHOLOGICAL_TRIGGERS.get(key) def get_random_trigger() -> Dict[str, Any]: key = random.choice(list(PSYCHOLOGICAL_TRIGGERS.keys())) return {"key": key, **PSYCHOLOGICAL_TRIGGERS[key]} def get_trigger_combination() -> Dict[str, Any]: return random.choice(TRIGGER_COMBINATIONS) def get_triggers_for_niche(niche: str) -> List[Dict[str, Any]]: niche_lower = niche.lower().replace(" ", "_").replace("-", "_") niche_triggers = { "home_insurance": ["fear", "greed", "social_proof", "authority", "relief"], "glp1": ["transformation", "pride", "social_proof", "authority", "relief"], "auto_insurance": ["fear", "greed", "social_proof", "authority", "relief"], } trigger_keys = niche_triggers.get(niche_lower, list(PSYCHOLOGICAL_TRIGGERS.keys())[:5]) return [{"key": k, **PSYCHOLOGICAL_TRIGGERS[k]} for k in trigger_keys if k in PSYCHOLOGICAL_TRIGGERS] def get_copy_angles_for_trigger(trigger_key: str) -> List[str]: trigger = get_trigger(trigger_key) return trigger.get("copy_angles", []) if trigger else []