File size: 18,721 Bytes
6ab0e7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31a5a91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53e29c5
 
 
 
 
 
 
 
 
 
 
 
31a5a91
 
 
53e29c5
 
 
 
 
 
 
 
 
31a5a91
 
 
 
 
53e29c5
 
31a5a91
53e29c5
 
 
 
 
 
 
 
 
 
31a5a91
53e29c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31a5a91
53e29c5
 
 
 
31a5a91
 
 
 
 
 
 
 
53e29c5
 
 
 
 
 
31a5a91
53e29c5
 
 
31a5a91
53e29c5
 
 
 
 
 
 
 
31a5a91
53e29c5
 
 
 
31a5a91
53e29c5
6ab0e7c
 
53e29c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6ab0e7c
 
 
 
 
53e29c5
 
dc65432
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254aa3f
 
dc65432
 
 
 
 
 
 
53e29c5
c7c2115
0fa3208
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0eaa586
6ab0e7c
 
 
 
 
 
 
5b9a3d9
 
0c9ec73
6ab0e7c
 
 
 
 
 
0c9ec73
 
 
5b9a3d9
 
0c9ec73
5b9a3d9
0c9ec73
6ab0e7c
aa5496e
0eaa586
6ab0e7c
0eaa586
6ab0e7c
 
 
 
 
 
0eaa586
6ab0e7c
 
 
 
 
 
0eaa586
6ab0e7c
 
 
 
 
 
0eaa586
6ab0e7c
 
 
 
 
 
0eaa586
6ab0e7c
 
 
 
53e29c5
f3a33b4
 
 
64599b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3a33b4
bfb2c37
c9db07c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bfb2c37
f46c20a
e393388
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
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
offer_system_prompt = """You are a world-class expert copywriter, experienced in creating compelling offers that connect emotionally with the target audience.

OBJECTIVE:
- Generate a convincing offer in Spanish
- Connect emotionally with the audience
- Address real desires, problems, and motivations
- Maintain natural and conversational language

CRITICAL OUTPUT RULES:
- Output ONLY the offer itself with NO introductory text, explanations, or additional commentary
- Start directly with the attention hook or opening phrase
- The entire response should be ONLY the offer itself following the formula structure
- Do not include phrases like "Aquí tienes una oferta convincente" or "Esta es tu oferta"
"""

def extract_product_name(product_name_input):
    """
    Extracts the actual product name from user input, especially when it's enclosed in quotes.
    
    Args:
        product_name_input: The raw input string containing the product name
        
    Returns:
        str: The extracted product name, or empty string if generic
    """
    import re
    
    # If input is empty or None, return empty string
    if not product_name_input or product_name_input.strip() == "":
        return ""
    
    # Check if there's a name in quotes
    quote_pattern = r'"([^"]+)"'
    matches = re.findall(quote_pattern, product_name_input)
    
    if matches:
        # Return the first quoted string found
        return matches[0]
    
    # If no quotes but contains "llamado" or similar phrases, extract what follows
    called_patterns = [
        r'llamado\s+(.+?)(?:\s+que|\s+con|\s+para|\.$|$)',
        r'titulado\s+(.+?)(?:\s+que|\s+con|\s+para|\.$|$)',
        r'denominado\s+(.+?)(?:\s+que|\s+con|\s+para|\.$|$)',
        r'nombrado\s+(.+?)(?:\s+que|\s+con|\s+para|\.$|$)'
    ]
    
    for pattern in called_patterns:
        matches = re.search(pattern, product_name_input, re.IGNORECASE)
        if matches:
            extracted = matches.group(1).strip()
            # If the extracted text has quotes, remove them
            if extracted.startswith('"') and extracted.endswith('"'):
                extracted = extracted[1:-1]
            return extracted
    
    # Check if the input is generic (common course/product types without specific names)
    generic_patterns = [
        r'^(curso|taller|programa|webinar|entrenamiento|sistema|método|servicio|producto|aplicación|comunidad|masterclass)(\s+de\s+.+)?$',
        r'^(un|el|mi|nuestro)\s+(curso|taller|programa|webinar|entrenamiento|sistema|método|servicio|producto|aplicación|comunidad|masterclass)(\s+de\s+.+)?$'
    ]
    
    for pattern in generic_patterns:
        if re.match(pattern, product_name_input.lower(), re.IGNORECASE):
            # This is a generic description, return empty string to trigger creative name generation
            return ""
    
    # If no patterns match, return the original input
    return product_name_input.strip()


def create_offer_instruction(avatar_description, product_name, selected_formula_name):
    """
    Creates instructions for generating an offer based on the selected formula.
    
    Args:
        avatar_description: Description of the target audience
        product_name: Name of the product or service
        selected_formula_name: Name of the formula to use ("Fórmula Sueño-Obstáculo" or "Oferta Dorada")
        
    Returns:
        str: Complete instruction for generating the offer
    """
    # Extract the actual product name if it's in quotes or after "llamado"
    extracted_name = extract_product_name(product_name)
    
    # Get the selected formula
    selected_formula = offer_formulas[selected_formula_name]
    
    # Add specific instructions for each formula
    additional_instructions = ""
    if selected_formula_name == "Fórmula Sueño-Obstáculo":
        additional_instructions = """
SPECIFIC INSTRUCTIONS FOR THIS FORMULA:
1. PRODUCT/SERVICE NAME HANDLING:
   - CRITICAL: If a product name is provided in quotes or after words like "llamado", "titulado", etc., 
     YOU MUST USE THAT EXACT NAME. This is non-negotiable.
   - The extracted product name is: "{extracted_name}"
   - If this extracted name is not empty, use it EXACTLY as provided with no modifications
   - Only create a new name if the extracted name is empty or contains generic placeholders

2. Analyze ALL available information:
   - Product/service name (use the extracted name provided above)
   - Target audience description (avatar_description)
   - Content from uploaded files (if any)

3. Determine the most appropriate type (curso, webinar, entrenamiento, etc.) based on:
   - Any type mentioned in product_name
   - The nature of the solution described in avatar_description
   - The most suitable format for the target audience's needs

4. Create a comprehensive offer by combining:
   - The appropriate type (determined in step 3)
   - The EXACT product name as extracted (if provided)
   - A compelling dream based on avatar_description
   - A relevant obstacle based on avatar_description

5. The dream should be ambitious but believable, incorporating:
   - Target audience desires from avatar_description
   - Explicit goals mentioned in uploaded content (if any)

6. The obstacle should reflect:
   - Real problems mentioned in avatar_description
   - Challenges that would normally prevent achieving the dream

7. IMPORTANT: Vary the way you start the phrase. Instead of always using "Se trata de un...", use different openings such as:
   - "Presentamos un..."
   - "Te ofrecemos un..."
   - "Descubre nuestro..."
   - "Conoce el..."
   - "Hemos creado un..."
   - "Imagina tener acceso a un..."
   - "Por fin existe un..."
   - "Ahora puedes acceder a un..."
   - "Tenemos para ti un..."
   - "Disfruta de un..."
""".format(extracted_name=extracted_name)
    
    elif selected_formula_name == "Oferta Dorada":
        additional_instructions = """
SPECIFIC INSTRUCTIONS FOR THIS FORMULA:
1. PRODUCT/SERVICE NAME HANDLING:
   - CRITICAL: If a product name is provided in quotes or after words like "llamado", "titulado", etc., 
     YOU MUST USE THAT EXACT NAME. This is non-negotiable.
   - The extracted product name is: "{extracted_name}"
   - If this extracted name is not empty, use it EXACTLY as provided with no modifications
   - Only create a new name if the extracted name is empty or contains generic placeholders

2. ATTENTION HOOK HANDLING:
   - Analyze the avatar_description DEEPLY to understand their specific pain points, frustrations, and desires
   - Select a powerful attention hook that DIRECTLY connects with the avatar's current reality
   - DO NOT use questions as hooks - use statements, statistics, or shocking revelations instead
   - CUSTOMIZE the hook specifically for this avatar - don't use generic examples
   - The hook MUST address the SAME problem that your promise will solve

3. MAINTAIN THEMATIC CONSISTENCY:
   - The attention hook, quantifiable promise, and benefit statement MUST all address the SAME problem
   - Create a LOGICAL PROGRESSION from problem (hook) to solution (promise) to implementation (benefit)

4. Create a compelling QUANTIFIABLE PROMISE that:
   - Is written COMPLETELY IN CAPITAL LETTERS
   - Includes concrete numbers (money, time, results)
   - Uses powerful action verbs (EARN, MULTIPLY, ACHIEVE, MASTER)
   - Specifies the exact result they will obtain
   - Optionally includes time or effort required
   - NEVER uses exclamation marks (!)
   - DIRECTLY addresses the same problem mentioned in the hook

5. Craft a benefit statement that:
   - Clearly explains the result they will obtain
   - Includes an authority element (proven method, studies, experience)
   - Establishes a realistic timeframe or effort needed
   - CONTINUES the same theme established in the hook and promise
""".format(extracted_name=extracted_name)
    
    # Create the instruction using the system prompt at the beginning
    instruction = f"""{offer_system_prompt}

FORMULA TO USE:
{selected_formula["description"]}

{additional_instructions}

PRODUCT/SERVICE:
{product_name}

TARGET AUDIENCE:
{avatar_description}

Create a compelling offer following the formula structure exactly.
"""
    
    # Add examples if available
    if selected_formula.get("examples") and len(selected_formula["examples"]) > 0:
        examples_text = "\n\n".join([f"Example {i+1}:\n{example}" for i, example in enumerate(selected_formula["examples"][:3])])
        instruction += f"\n\nGet inspired by these examples:\n{examples_text}"
    
    return instruction

def generate_complete_offer(avatar_description, product_name, selected_formula_name, include_bonuses=True):
    """
    Generates a complete offer including the main offer and optional bonuses.
    
    Args:
        avatar_description: Description of the target audience
        product_name: Name of the product or service
        selected_formula_name: Name of the formula to use
        include_bonuses: Whether to include bonuses in the offer
        
    Returns:
        dict: Instructions for generating the complete offer
    """
    # Create main offer instruction
    main_offer_instruction = create_offer_instruction(avatar_description, product_name, selected_formula_name)
    
    # Create bonus instruction if requested
    bonus_instruction = None
    if include_bonuses:
        # Import the bonus generator from the new module
        from bonuses.generator import create_bonus_instruction
        bonus_instruction = create_bonus_instruction(avatar_description, product_name, selected_formula_name)
    
    return {
        "main_offer_instruction": main_offer_instruction,
        "bonus_instruction": bonus_instruction
    }

# The rest of your offer_formulas dictionary remains unchanged
offer_formulas = {
    "Oferta Dorada": {
        "description": """
Formula: [Attention Hook + QUANTIFIABLE PROMISE IN ALL CAPS + Benefit + Authority + Time or Effort]

This formula is designed to speak directly to the avatar, capturing their attention immediately, reflecting their current situation, and showing the transformation they desire.

### **How to apply it?**

#### 1 **Attention Hook**  
The first step is to capture the avatar's attention with a powerful hook that can be a shocking revelation, an unexpected question, or a dramatic fact. IMPORTANT: CUSTOMIZE THE HOOK BASED ON THE AVATAR AND THEIR SPECIFIC PROBLEMS. Don't use generic examples, but adapt them to the client's situation.

Analyze first:
- What is the avatar's biggest pain or frustration?
- What are they trying to achieve without success?
- What limiting beliefs do they have?

---

#### 2 **QUANTIFIABLE PROMISE IN ALL CAPS**  
This is the most important part. You must create a specific, quantifiable promise written COMPLETELY IN CAPITAL LETTERS that immediately captures attention. It must include:
- Concrete numbers (money, time, results)
- Powerful action verbs (EARN, MULTIPLY, ACHIEVE, MASTER)
- The specific result they will obtain
- Optionally, the time or effort required
- IMPORTANT: DO NOT USE EXCLAMATION MARKS (!) IN THIS SECTION UNDER ANY CIRCUMSTANCES

**Incorrect example:**  
"Improve your sales with our system." (Vague, no numbers, no impact).  
"¡MULTIPLY YOUR SALES IN RECORD TIME!" (Uses exclamation marks, NEVER use them).

**Correct example:**  
"FACTURA MAS DE $1.000 USD USANDO 15 EMAILS ESCRITOS EN 15 MINUTOS CADA UNO" (Specific, quantifiable, impactful).
"MULTIPLICA POR 3 TUS INTERACCIONES EN REDES SOCIALES EN SOLO 2 SEMANAS" (Clear, measurable, with defined time).

---

#### 3 **Benefit + Authority + Time or Effort**  
In this part, we explain the result they will obtain, supported by an authority factor (proven method, studies, experience, validations) and establishing a time frame or necessary effort to achieve it.  

**Structure Formats:**
1. "[Feature] para que puedas [Benefit] con lo que [Meaning]"
2. "Con [Feature] podrás [Benefit] permitiéndote [Meaning]"
3. "Gracias a [Feature] lograrás [Benefit] haciendo que [Meaning]"
4. "Mediante [Feature] conseguirás [Benefit] lo que significa [Meaning]"
5. "Usando [Feature] alcanzarás [Benefit] transformando [Meaning]"

**Incorrect example:**  
"Grow your business with our strategy." (Doesn't say how long it will take or how reliable the strategy is).  

**Correct examples:**  
"El Sistema de emails persuasivos para que puedas convertir lectores en clientes con lo que multiplicarás tus ventas en solo 30 días."
"Con nuestra metodología de copywriting podrás crear ofertas irresistibles permitiéndote aumentar tu tasa de conversión en un 200% con solo 15 minutos al día."
"Gracias a nuestro framework de contenido lograrás posicionarte como autoridad haciendo que tu audiencia te busque a ti en lugar de a tu competencia."
"Mediante nuestro sistema de automatización conseguirás generar ventas mientras duermes lo que significa libertad financiera real en menos de 90 días."
"Usando nuestra estrategia de redes sociales alcanzarás 10.000 seguidores cualificados transformando tu presencia digital en una máquina de generación de leads."

---

### **Fixed structure:**  
"[Varied Attention Hook]  

[QUANTIFIABLE PROMISE IN ALL CAPS]  

[Choose one of the 5 structure formats for Benefit + Authority + Time or Effort]"  
""",
        "examples": [
            # Example 1
            """El 83% de los emprendedores pierden dinero en anuncios que nadie convierte.  
    
    CONVIERTE EL 30% DE TUS VISITANTES EN COMPRADORES Y REDUCE TU COSTO DE ADQUISICIÓN A LA MITAD EN SOLO 14 DÍAS.  
    
    El Sistema de copywriting persuasivo para que puedas transformar visitantes en clientes con lo que multiplicarás tu ROI en menos de dos semanas.""",
    
            # Example 2
            """Tu lista de email está tan muerta que hasta los mensajes de spam tienen más aperturas.  
    
    AUMENTA TU TASA DE APERTURA AL 35% Y GENERA $2.500 EN VENTAS CON CADA CAMPAÑA DE EMAIL QUE ENVIES.  
    
    Con nuestra metodología de asuntos irresistibles podrás captar la atención inmediata permitiéndote convertir suscriptores dormidos en compradores activos en solo 30 minutos por campaña.""",
    
            # Example 3
            """Mientras algunos facturan $10,000 al mes, tú sigues preguntándote por qué nadie compra.  
    
    FACTURA EL DOBLE SIN BAJAR TUS PRECIOS Y CONVIERTE EL 80% DE TUS PROPUESTAS EN CLIENTES PAGANDO.  
    
    Gracias a nuestro framework de propuestas de alto valor lograrás posicionarte como la opción premium haciendo que los clientes te elijan a ti sin cuestionar tus tarifas.""",
    
            # Example 4
            """Lo que nadie te dice sobre el marketing de contenidos es que el 95% nunca genera un solo cliente.  
    
    MULTIPLICA POR 5 TUS COMENTARIOS Y CONSIGUE 3 CLIENTES NUEVOS CADA SEMANA CON SOLO 20 MINUTOS DE TRABAJO DIARIO.  
    
    Mediante nuestro sistema de contenido estratégico conseguirás crear publicaciones que convierten lo que significa un flujo constante de leads cualificados sin invertir en publicidad.""",
    
            # Example 5
            """Ah, otro día más publicando en redes sociales y hablándole a las paredes... Qué divertido.  
    
    CONSIGUE 100 NUEVOS SEGUIDORES CUALIFICADOS POR SEMANA Y CONVIERTE EL 10% EN LEADS INTERESADOS EN TUS SERVICIOS.  
    
    Usando nuestra estrategia de contenido viral alcanzarás visibilidad exponencial transformando tu presencia en redes en un canal de captación automático en menos de 30 días."""
        ]
    },
    "Fórmula Sueño-Obstáculo": {
        "description": """
Formula: [Type + Name + Dream + Obstacle]

This formula connects directly with the client's desires and concerns:

1. Type: The type of solution (training, product, or service)
2. Name: The name of your solution
3. Dream: The big dream or result that the client wants to achieve
4. Obstacle: The obstacle that would normally prevent achieving that dream

**Suggested solution types:**
- Online course
- Webinar
- Training
- Program
- Workshop
- Mentorship
- Consulting
- Membership
- System
- Method
- Service
- Product
- Application
- Community
- Masterclass

**Suggested opening variations:**
- "Se trata de un..."
- "Presentamos un..."
- "Te ofrecemos un..."
- "Descubre nuestro..."
- "Conoce el..."
- "Hemos creado un..."
- "Imagina tener acceso a un..."
- "Por fin existe un..."
- "Ahora puedes acceder a un..."
- "Tenemos para ti un..."
- "Disfruta de un..."

**Structure Format (Classic example):**
"Se trata de un (training, product or service) llamado ("name of your solution") que te va a permitir (big dream) aún y cuando (big obstacle)"
""",
        "examples": [
            # Example 1 - Sales Training
            """Se trata de mi exclusivo entrenamiento llamado "Venta Express 3.0" con el que te convertirás en todo un Rockstar de las ventas con el que conectarás con tus clientes para inspirarlos al cierre de una forma fácil y divertida aún y cuando sea la primera vez que escuchen de ti.""",
            
            # Example 2 - Fitness Program
            """Presentamos un programa de transformación física llamado "Metabolismo Activado" que te permitirá perder hasta 10 kilos en 8 semanas aún y cuando hayas intentado todas las dietas sin éxito.""",
            
            # Example 3 - Digital Marketing
            """Descubre nuestro sistema de marketing digital llamado "Tráfico Convertidor" que te ayudará a multiplicar tus ventas online sin necesidad de gastar fortunas en publicidad aún y cuando no tengas experiencia previa en marketing.""",
            
            # Example 4 - Personal Finance
            """Tenemos para ti un método financiero llamado "Libertad Financiera Acelerada" que te permitirá generar ingresos pasivos y construir patrimonio aún y cuando partas desde cero o tengas deudas actualmente.""",
            
            # Example 5 - Language Learning
            """Imagina tener acceso a un curso de idiomas llamado "Inglés Sin Barreras Pro" con el que dominarás el inglés conversacional en solo 90 días aún y cuando hayas fracasado con métodos tradicionales en el pasado.""",
            
            # Example 6 - Productivity
            """Hemos creado un workshop intensivo llamado "Productividad Imparable" que te enseñará a duplicar tus resultados trabajando menos horas aún y cuando tengas una agenda completamente saturada.""",
            
            # Example 7 - Relationships
            """Por fin existe un programa de coaching llamado "Conexiones Profundas" que te ayudará a encontrar y mantener relaciones saludables y satisfactorias aún y cuando hayas tenido experiencias dolorosas en el pasado."""
        ]
    }
}