| | """ |
| | 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: 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 [] |
| |
|