File size: 21,087 Bytes
f201243
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
"""
Affiliate Marketing Angles Framework (Lite Version)
100 angles organized into 10 categories.
Angles answer: "Why should I care?" (Psychological WHY)
"""

from typing import Dict, List, Any, Optional
from enum import Enum
import random


class AngleCategory(str, Enum):
    """Angle categories."""
    EMOTIONAL = "emotional"
    FINANCIAL = "financial"
    CONVENIENCE = "convenience"
    IDENTITY = "identity"
    AUTHORITY = "authority"
    SOCIAL_PROOF = "social_proof"
    URGENCY = "urgency"
    INTELLECTUAL = "intellectual"
    CURIOSITY = "curiosity"
    PROBLEM_SOLUTION = "problem_solution"


# Complete angles framework - 100 angles (10 per category)
ANGLES = {
    AngleCategory.EMOTIONAL: {
        "name": "Emotional & Psychological",
        "angles": [
            {"key": "fear_loss", "name": "Fear / Loss Prevention", "trigger": "Fear", "example": "Don't lose your home to disaster"},
            {"key": "anxiety_reduction", "name": "Anxiety Reduction", "trigger": "Relief", "example": "Sleep better knowing you're protected"},
            {"key": "security_safety", "name": "Security / Safety", "trigger": "Security", "example": "Your family's safety is our priority"},
            {"key": "peace_of_mind", "name": "Peace of Mind", "trigger": "Relief", "example": "Peace of mind for just $X/month"},
            {"key": "stress_relief", "name": "Stress Relief", "trigger": "Relief", "example": "End the stress of [problem]"},
            {"key": "relief_escape", "name": "Relief / Escape", "trigger": "Relief", "example": "Finally escape [problem]"},
            {"key": "confidence_boost", "name": "Confidence Boost", "trigger": "Pride", "example": "Feel confident about your future"},
            {"key": "hope_optimism", "name": "Hope / Optimism", "trigger": "Hope", "example": "A brighter future starts today"},
            {"key": "guilt_responsibility", "name": "Guilt (Family)", "trigger": "Guilt", "example": "Do it for your family"},
            {"key": "pride_self_worth", "name": "Pride / Self-worth", "trigger": "Pride", "example": "You deserve the best"},
            {"key": "emotional_connection", "name": "Emotional Connection", "trigger": "Belonging", "example": "Feel connected to what matters"},
            {"key": "nostalgia", "name": "Nostalgia", "trigger": "Emotion", "example": "Remember when things were simpler"},
            {"key": "empowerment", "name": "Empowerment", "trigger": "Pride", "example": "Take control of your future"},
        ]
    },
    AngleCategory.FINANCIAL: {
        "name": "Financial",
        "angles": [
            {"key": "save_money", "name": "Save Money", "trigger": "Greed", "example": "Save $600/year"},
            {"key": "cut_hidden_costs", "name": "Cut Hidden Costs", "trigger": "Anger", "example": "Stop paying hidden fees"},
            {"key": "avoid_overpaying", "name": "Avoid Overpaying", "trigger": "Anger", "example": "Stop overpaying for [service]"},
            {"key": "financial_freedom", "name": "Financial Freedom", "trigger": "Desire", "example": "Achieve financial freedom"},
            {"key": "budget_control", "name": "Budget Control", "trigger": "Control", "example": "Take control of your budget"},
            {"key": "price_comparison", "name": "Price Comparison", "trigger": "Greed", "example": "Compare prices in 30 seconds"},
            {"key": "smart_spending", "name": "Smart Spending", "trigger": "Pride", "example": "Make smart financial choices"},
            {"key": "long_term_value", "name": "Long-Term Value", "trigger": "Greed", "example": "Invest in your future"},
            {"key": "roi_investment", "name": "ROI / Investment", "trigger": "Greed", "example": "Get 3x return on investment"},
            {"key": "cost_transparency", "name": "Cost Transparency", "trigger": "Trust", "example": "100% transparent pricing"},
            {"key": "hidden_fees_exposed", "name": "Hidden Fees Exposed", "trigger": "Anger", "example": "No hidden fees, ever"},
            {"key": "money_back", "name": "Money-Back Guarantee", "trigger": "Security", "example": "Get your money back if not satisfied"},
            {"key": "payment_flexibility", "name": "Payment Flexibility", "trigger": "Convenience", "example": "Pay your way, when you want"},
        ]
    },
    AngleCategory.CONVENIENCE: {
        "name": "Convenience & Ease",
        "angles": [
            {"key": "fast_instant", "name": "Fast / Instant", "trigger": "Convenience", "example": "Get a quote in 30 seconds"},
            {"key": "simple_easy", "name": "Simple / Easy", "trigger": "Convenience", "example": "It's that simple"},
            {"key": "no_paperwork", "name": "No Paperwork", "trigger": "Convenience", "example": "No paperwork required"},
            {"key": "no_phone_calls", "name": "No Phone Calls", "trigger": "Convenience", "example": "No phone calls needed"},
            {"key": "one_click", "name": "One-Click / Few Steps", "trigger": "Convenience", "example": "Get started in 3 steps"},
            {"key": "beginner_friendly", "name": "Beginner-Friendly", "trigger": "Security", "example": "Perfect for beginners"},
            {"key": "done_for_you", "name": "Done-For-You", "trigger": "Convenience", "example": "We handle everything"},
            {"key": "hassle_free", "name": "Hassle-Free", "trigger": "Convenience", "example": "100% hassle-free"},
            {"key": "low_effort", "name": "Low Effort", "trigger": "Convenience", "example": "Minimal effort, maximum results"},
            {"key": "time_saving", "name": "Time Saving", "trigger": "Convenience", "example": "Save 10 hours per week"},
            {"key": "automated_process", "name": "Automated Process", "trigger": "Convenience", "example": "Fully automated, zero work"},
            {"key": "instant_access", "name": "Instant Access", "trigger": "Convenience", "example": "Get instant access now"},
            {"key": "no_waiting", "name": "No Waiting", "trigger": "Convenience", "example": "No waiting, start immediately"},
        ]
    },
    AngleCategory.IDENTITY: {
        "name": "Identity & Personalization",
        "angles": [
            {"key": "age_based", "name": "Age-Based", "trigger": "Personalization", "example": "Special rates for seniors 65+"},
            {"key": "location_based", "name": "Location-Based", "trigger": "Personalization", "example": "Best rates in [location]"},
            {"key": "profession_specific", "name": "Profession-Specific", "trigger": "Personalization", "example": "Special rates for teachers"},
            {"key": "life_stage", "name": "Life Stage", "trigger": "Personalization", "example": "Perfect for new homeowners"},
            {"key": "lifestyle_match", "name": "Lifestyle Match", "trigger": "Personalization", "example": "Fits your lifestyle"},
            {"key": "people_like_you", "name": "People Like You", "trigger": "Social Proof", "example": "Join thousands like you"},
            {"key": "custom_fit", "name": "Custom Fit", "trigger": "Personalization", "example": "Customized just for you"},
            {"key": "personal_relevance", "name": "Personal Relevance", "trigger": "Personalization", "example": "Built specifically for you"},
            {"key": "niche_targeting", "name": "Niche Targeting", "trigger": "Personalization", "example": "Designed for [niche]"},
            {"key": "localized_offer", "name": "Localized Offer", "trigger": "Personalization", "example": "Best deals in [city]"},
            {"key": "behavioral_match", "name": "Behavioral Match", "trigger": "Personalization", "example": "Fits your lifestyle perfectly"},
            {"key": "preference_based", "name": "Preference-Based", "trigger": "Personalization", "example": "Tailored to your preferences"},
            {"key": "demographic_specific", "name": "Demographic-Specific", "trigger": "Personalization", "example": "Made for people like you"},
        ]
    },
    AngleCategory.AUTHORITY: {
        "name": "Authority & Trust",
        "angles": [
            {"key": "expert_backed", "name": "Expert-Backed", "trigger": "Authority", "example": "Recommended by experts"},
            {"key": "industry_standard", "name": "Industry Standard", "trigger": "Authority", "example": "The industry standard"},
            {"key": "government_related", "name": "Government-Related", "trigger": "Authority", "example": "Government-approved program"},
            {"key": "trusted_millions", "name": "Trusted by Millions", "trigger": "Social Proof", "example": "Trusted by 2M+ customers"},
            {"key": "years_experience", "name": "Years of Experience", "trigger": "Authority", "example": "20+ years of experience"},
            {"key": "certified_verified", "name": "Certified / Verified", "trigger": "Authority", "example": "Certified and verified"},
            {"key": "brand_reputation", "name": "Brand Reputation", "trigger": "Authority", "example": "Trusted brand name"},
            {"key": "compliance", "name": "Compliance / Regulation", "trigger": "Authority", "example": "Fully compliant and regulated"},
            {"key": "awards_recognition", "name": "Awards / Recognition", "trigger": "Authority", "example": "Award-winning service"},
            {"key": "risk_free", "name": "Risk-Free", "trigger": "Security", "example": "100% risk-free guarantee"},
            {"key": "industry_leader", "name": "Industry Leader", "trigger": "Authority", "example": "The industry leader"},
            {"key": "proven_track_record", "name": "Proven Track Record", "trigger": "Authority", "example": "Proven results over decades"},
        ]
    },
    AngleCategory.SOCIAL_PROOF: {
        "name": "Social Proof & Validation",
        "angles": [
            {"key": "testimonials", "name": "Testimonials", "trigger": "Social Proof", "example": "See what customers say"},
            {"key": "reviews_ratings", "name": "Reviews / Ratings", "trigger": "Social Proof", "example": "4.8/5 stars from 10K+ reviews"},
            {"key": "mass_adoption", "name": "Mass Adoption", "trigger": "Social Proof", "example": "Join 2M+ users"},
            {"key": "case_studies", "name": "Case Studies", "trigger": "Social Proof", "example": "See real success stories"},
            {"key": "word_of_mouth", "name": "Word of Mouth", "trigger": "Social Proof", "example": "Recommended by friends"},
            {"key": "community_trust", "name": "Community Trust", "trigger": "Social Proof", "example": "Trusted by our community"},
            {"key": "real_stories", "name": "Real Stories", "trigger": "Social Proof", "example": "Real stories from real customers"},
            {"key": "viral_popularity", "name": "Viral Popularity", "trigger": "FOMO", "example": "Going viral on [platform]"},
            {"key": "trending_now", "name": "Trending Now", "trigger": "FOMO", "example": "Trending now"},
            {"key": "most_chosen", "name": "Most Chosen", "trigger": "Social Proof", "example": "The most chosen option"},
            {"key": "peer_recommendation", "name": "Peer Recommendation", "trigger": "Social Proof", "example": "Recommended by your peers"},
            {"key": "success_rate", "name": "High Success Rate", "trigger": "Social Proof", "example": "95% success rate"},
        ]
    },
    AngleCategory.URGENCY: {
        "name": "Urgency & Scarcity",
        "angles": [
            {"key": "limited_time", "name": "Limited Time", "trigger": "FOMO", "example": "Limited time offer - ends Friday"},
            {"key": "ending_soon", "name": "Ending Soon", "trigger": "FOMO", "example": "Offer ending in 48 hours"},
            {"key": "price_increase", "name": "Price Increase Warning", "trigger": "FOMO", "example": "Prices increasing on [date]"},
            {"key": "seasonal_change", "name": "Seasonal Change", "trigger": "FOMO", "example": "Spring special - ends soon"},
            {"key": "renewal_reminder", "name": "Policy Renewal", "trigger": "FOMO", "example": "Renew before [date] to save"},
            {"key": "countdown", "name": "Countdown", "trigger": "FOMO", "example": "Only 24 hours left"},
            {"key": "last_chance", "name": "Last Chance", "trigger": "FOMO", "example": "Last chance to save"},
            {"key": "market_shift", "name": "Market Shift", "trigger": "FOMO", "example": "Market rates changing soon"},
            {"key": "deadline_pressure", "name": "Deadline Pressure", "trigger": "FOMO", "example": "Deadline: [date]"},
            {"key": "miss_out_avoidance", "name": "Miss-Out Avoidance", "trigger": "FOMO", "example": "Don't miss this opportunity"},
            {"key": "early_bird", "name": "Early Bird Special", "trigger": "FOMO", "example": "Early bird pricing ends soon"},
            {"key": "flash_sale", "name": "Flash Sale", "trigger": "FOMO", "example": "Flash sale - 24 hours only"},
        ]
    },
    AngleCategory.INTELLECTUAL: {
        "name": "Intellectual / Smart Choice",
        "angles": [
            {"key": "insider_knowledge", "name": "Insider Knowledge", "trigger": "Curiosity", "example": "Insider tip: [secret]"},
            {"key": "avoid_mistakes", "name": "Avoid Common Mistakes", "trigger": "Fear", "example": "Avoid these 5 common mistakes"},
            {"key": "educated_decision", "name": "Educated Decision", "trigger": "Pride", "example": "Make an educated decision"},
            {"key": "comparison_logic", "name": "Comparison Logic", "trigger": "Pride", "example": "Compare and choose wisely"},
            {"key": "transparency", "name": "Transparency", "trigger": "Trust", "example": "100% transparent pricing"},
            {"key": "informed_buyer", "name": "Informed Buyer", "trigger": "Pride", "example": "For informed buyers"},
            {"key": "data_driven", "name": "Data-Driven", "trigger": "Authority", "example": "Backed by data"},
            {"key": "rational_choice", "name": "Rational Choice", "trigger": "Pride", "example": "The rational choice"},
            {"key": "what_experts_do", "name": "What Experts Do", "trigger": "Authority", "example": "What experts do"},
            {"key": "optimization", "name": "Optimization", "trigger": "Pride", "example": "Optimize your [thing]"},
            {"key": "smart_investment", "name": "Smart Investment", "trigger": "Pride", "example": "The smart investment choice"},
            {"key": "evidence_based", "name": "Evidence-Based", "trigger": "Authority", "example": "Backed by research and data"},
        ]
    },
    AngleCategory.CURIOSITY: {
        "name": "Curiosity & Pattern Interrupt",
        "angles": [
            {"key": "shocking_stats", "name": "Shocking Stats", "trigger": "Curiosity", "example": "Shocking stat: [number]"},
            {"key": "did_you_know", "name": "Did You Know?", "trigger": "Curiosity", "example": "Did you know [fact]?"},
            {"key": "open_loops", "name": "Open Loops", "trigger": "Curiosity", "example": "Thousands doing THIS instead"},
            {"key": "contrarian", "name": "Contrarian Claims", "trigger": "Curiosity", "example": "Why everyone is wrong about [thing]"},
            {"key": "myth_busting", "name": "Myth Busting", "trigger": "Curiosity", "example": "Myth busted: [myth]"},
            {"key": "unexpected_truth", "name": "Unexpected Truth", "trigger": "Curiosity", "example": "The truth about [thing]"},
            {"key": "hidden_secrets", "name": "Hidden Secrets", "trigger": "Curiosity", "example": "The hidden secret to [thing]"},
            {"key": "scroll_stopper", "name": "Scroll Stopper", "trigger": "Curiosity", "example": "Stop scrolling - read this"},
            {"key": "pattern_break", "name": "Pattern Break", "trigger": "Curiosity", "example": "This breaks all patterns"},
            {"key": "curiosity_gap", "name": "Curiosity Gap", "trigger": "Curiosity", "example": "What is THIS?"},
            {"key": "reveal_secret", "name": "Reveal Secret", "trigger": "Curiosity", "example": "The secret they don't want you to know"},
            {"key": "unexpected_benefit", "name": "Unexpected Benefit", "trigger": "Curiosity", "example": "The benefit nobody talks about"},
        ]
    },
    AngleCategory.PROBLEM_SOLUTION: {
        "name": "Problem–Solution",
        "angles": [
            {"key": "pain_point", "name": "Pain Point Highlight", "trigger": "Anger", "example": "Tired of [problem]?"},
            {"key": "frustration_relief", "name": "Frustration Relief", "trigger": "Relief", "example": "End your frustration with [problem]"},
            {"key": "complexity_simplified", "name": "Complexity Simplified", "trigger": "Convenience", "example": "We make [thing] simple"},
            {"key": "confusion_clarity", "name": "Confusion → Clarity", "trigger": "Relief", "example": "From confusion to clarity"},
            {"key": "overwhelm_reduction", "name": "Overwhelm Reduction", "trigger": "Relief", "example": "Stop feeling overwhelmed"},
            {"key": "direct_fix", "name": "Direct Fix", "trigger": "Relief", "example": "The direct fix for [problem]"},
            {"key": "shortcut", "name": "Shortcut", "trigger": "Convenience", "example": "The shortcut to [goal]"},
            {"key": "better_alternative", "name": "Better Alternative", "trigger": "Desire", "example": "A better alternative to [current]"},
            {"key": "replace_old_way", "name": "Replace Old Way", "trigger": "Desire", "example": "Replace the old way"},
            {"key": "modern_solution", "name": "Modern Solution", "trigger": "Desire", "example": "The modern solution to [problem]"},
            {"key": "pain_elimination", "name": "Pain Elimination", "trigger": "Relief", "example": "Eliminate [problem] forever"},
            {"key": "simplified_complexity", "name": "Simplified Complexity", "trigger": "Convenience", "example": "We simplified the complex"},
            {"key": "one_click_solution", "name": "One-Click Solution", "trigger": "Convenience", "example": "Solve it in one click"},
        ]
    },
}


def get_all_angles() -> List[Dict[str, Any]]:
    """Get all angles as a flat list."""
    all_angles = []
    for category, data in ANGLES.items():
        for angle in data["angles"]:
            angle_copy = angle.copy()
            angle_copy["category"] = data["name"]
            angle_copy["category_key"] = category
            all_angles.append(angle_copy)
    return all_angles


def get_angles_by_category(category: AngleCategory) -> List[Dict[str, Any]]:
    """Get angles for a specific category."""
    return ANGLES.get(category, {}).get("angles", [])


def get_angle_by_key(key: str) -> Optional[Dict[str, Any]]:
    """Get a specific angle by key."""
    for category, data in ANGLES.items():
        for angle in data["angles"]:
            if angle["key"] == key:
                angle_copy = angle.copy()
                angle_copy["category"] = data["name"]
                angle_copy["category_key"] = category
                return angle_copy
    return None


def get_random_angles(count: int = 6, diverse: bool = True) -> List[Dict[str, Any]]:
    """Get random angles, optionally ensuring diversity across categories."""
    if diverse:
        # Select one from each category first
        selected = []
        categories = list(ANGLES.keys())
        random.shuffle(categories)
        
        for category in categories[:count]:
            angles = ANGLES[category]["angles"]
            angle = random.choice(angles).copy()
            angle["category"] = ANGLES[category]["name"]
            angle["category_key"] = category
            selected.append(angle)
        
        return selected[:count]
    else:
        all_angles = get_all_angles()
        return random.sample(all_angles, min(count, len(all_angles)))


def get_angles_for_niche(niche: str) -> List[Dict[str, Any]]:
    """Get angles best suited for a niche."""
    niche_lower = niche.lower()
    
    # Niche-specific angle recommendations
    if "insurance" in niche_lower:
        recommended_keys = [
            "fear_loss", "peace_of_mind", "save_money", "price_comparison",
            "trusted_millions", "limited_time", "avoid_mistakes", "pain_point"
        ]
    elif "glp" in niche_lower or "weight" in niche_lower:
        recommended_keys = [
            "confidence_boost", "pride_self_worth", "before_after_shock",
            "testimonials", "trending_now", "modern_solution", "shortcut"
        ]
    else:
        # Default mix
        recommended_keys = [
            "save_money", "fast_instant", "testimonials", "limited_time",
            "shocking_stats", "pain_point"
        ]
    
    angles = []
    for key in recommended_keys:
        angle = get_angle_by_key(key)
        if angle:
            angles.append(angle)
    
    return angles


# Top performing angles for initial testing
TOP_ANGLES = [
    "save_money", "fear_loss", "fast_instant", "expert_backed",
    "testimonials", "limited_time", "age_based", "pain_point"
]


def get_top_angles() -> List[Dict[str, Any]]:
    """Get top performing angles for initial testing."""
    return [get_angle_by_key(key) for key in TOP_ANGLES if get_angle_by_key(key)]