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