JeCabrera commited on
Commit
d15a6cf
·
verified ·
1 Parent(s): 20e3acd

Upload 12 files

Browse files
Files changed (3) hide show
  1. app.py +506 -463
  2. formulas/webinar_formulas.py +321 -321
  3. styles/styles.css +42 -0
app.py CHANGED
@@ -1,463 +1,506 @@
1
- from dotenv import load_dotenv
2
- import streamlit as st
3
- import os
4
- import google.generativeai as genai
5
- import random
6
- import datetime
7
- from streamlit import session_state as state
8
- from angles import angles
9
- from formulas.webinar_formulas import webinar_formulas
10
- from formulas.webinar_name_formulas import webinar_name_formulas
11
- from formulas.angles_webinar_names import angles_webinar_names
12
-
13
- # Cargar las variables de entorno
14
- load_dotenv()
15
-
16
- # Configurar la API de Google
17
- genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
18
-
19
- # Create a reusable function for the UI input section
20
- def create_input_section(col, audience_key, product_key, formula_options, formula_key):
21
- audience = col.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key=audience_key)
22
- product = col.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key=product_key)
23
-
24
- selected_formula_key = col.selectbox(
25
- "Selecciona un framework de webinar" if "script" in audience_key else "Selecciona una fórmula para tus nombres de webinar",
26
- options=list(formula_options.keys()),
27
- key=formula_key
28
- )
29
-
30
- return audience, product, selected_formula_key
31
-
32
- # Create a reusable function for generation and display
33
- def generate_and_display(col, generator_func, audience, product, temperature, selected_formula, **kwargs):
34
- if validate_inputs(audience, product):
35
- try:
36
- with col:
37
- with st.spinner("Generando contenido...", show_time=True):
38
- # Extract only the parameters that the generator function accepts
39
- if generator_func.__name__ == "generate_webinar_script":
40
- generated_content = generator_func(
41
- audience=audience,
42
- topic=product,
43
- temperature=temperature,
44
- selected_formula=selected_formula
45
- )
46
- else:
47
- generated_content = generator_func(
48
- audience=audience,
49
- topic=product,
50
- temperature=temperature,
51
- selected_formula=selected_formula,
52
- **kwargs
53
- )
54
-
55
- # For webinar scripts, add download buttons
56
- if "script" in kwargs.get("content_type", ""):
57
- timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
58
- st.download_button(
59
- label="DESCARGAR GUION DE MI WEBINAR",
60
- data=generated_content,
61
- file_name=f"guion_webinar_{timestamp}.md",
62
- mime="text/markdown",
63
- key="download_top"
64
- )
65
-
66
- st.subheader("Tu " + ("guión de webinar:" if "script" in kwargs.get("content_type", "") else "nombres de webinar:"))
67
- st.markdown(generated_content)
68
-
69
- # Add bottom download button for scripts
70
- if "script" in kwargs.get("content_type", ""):
71
- st.download_button(
72
- label="DESCARGAR GUION DE MI WEBINAR",
73
- data=generated_content,
74
- file_name=f"guion_webinar_{timestamp}.md",
75
- mime="text/markdown",
76
- key="download_bottom"
77
- )
78
- except ValueError as e:
79
- col.error(f"Error: {str(e)}")
80
- else:
81
- col.error("Por favor, proporciona el público objetivo y el tema del webinar.")
82
-
83
- # Función para crear la configuración del modelo (evita duplicación)
84
- def create_model_config(temperature):
85
- return {
86
- "temperature": temperature,
87
- "top_p": 0.65,
88
- "top_k": 360,
89
- "max_output_tokens": 8196,
90
- }
91
-
92
- # Función para inicializar el modelo
93
- def initialize_model(temperature):
94
- config = create_model_config(temperature)
95
- return genai.GenerativeModel(
96
- model_name="gemini-2.0-flash",
97
- generation_config=config,
98
- )
99
-
100
- # Refactored model interaction function to reduce duplication
101
- def generate_content(prompt_instructions, temperature):
102
- model = initialize_model(temperature)
103
- chat_session = model.start_chat(
104
- history=[
105
- {
106
- "role": "user",
107
- "parts": [prompt_instructions],
108
- },
109
- ]
110
- )
111
- response = chat_session.send_message("Generate the content following exactly the provided instructions. All content must be in Spanish.")
112
- return response.text
113
-
114
- # Función para generar nombres de webinars
115
- def generate_webinar_names(number_of_names, target_audience, product, temperature, selected_formula, selected_angle=None):
116
- # Incluir las instrucciones del sistema en el prompt principal
117
- system_prompt = """You are a world-class copywriter, with expertise in crafting compelling webinar titles that immediately capture the audience's attention and drive registrations.
118
-
119
- FORMAT RULES:
120
- - Each webinar name must start with number and period
121
- - One webinar name per line
122
- - No explanations or categories
123
- - Add a line break between each name
124
- - Avoid unnecessary : symbols
125
- - Each webinar name must be a complete and intriguing title
126
- - WRITE ALL WEBINAR NAMES IN SPANISH
127
-
128
- FORMAT EXAMPLE:
129
- 1. Nombre del Webinar 1.
130
-
131
- 2. Nombre del Webinar 2.
132
-
133
- 3. Nombre del Webinar 3.
134
-
135
- 4. Nombre del Webinar 4.
136
-
137
- 5. Nombre del Webinar 5.
138
-
139
- IMPORTANT:
140
- - Each webinar name must be unique and memorable
141
- - Avoid clichés and generalities
142
- - Maintain an intriguing but credible tone
143
- - Adapt speaking language from the audience
144
- - Focus on transformative benefits
145
- - Follow the selected formula structure
146
- - WRITE ALL WEBINAR NAMES IN SPANISH"""
147
-
148
- # Iniciar el prompt con las instrucciones del sistema
149
- webinar_names_instruction = f"{system_prompt}\n\n"
150
-
151
- # Añadir instrucciones de ángulo solo si no es "NINGUNO" y se proporcionó un ángulo
152
- if selected_angle and selected_angle != "NINGUNO":
153
- webinar_names_instruction += f"""
154
- MAIN ANGLE: {selected_angle}
155
- SPECIFIC ANGLE INSTRUCTIONS:
156
- {angles_webinar_names[selected_angle]["instruction"]}
157
-
158
- IMPORTANT: The {selected_angle} angle should be applied as a "style layer" over the formula structure:
159
- 1. Keep the base structure of the formula intact
160
- 2. Apply the tone and style of the {selected_angle} angle
161
- 3. Ensure that each element of the formula reflects the angle
162
- 4. The angle affects "how" it is said, not "what" is said
163
-
164
- SUCCESSFUL EXAMPLES OF THE {selected_angle} ANGLE:
165
- """
166
- for example in angles_webinar_names[selected_angle]["examples"]:
167
- webinar_names_instruction += f"- {example}\n"
168
-
169
- # Instrucciones específicas para la tarea
170
- webinar_names_instruction += (
171
- f"\nYour task is to create {number_of_names} irresistible webinar names for {target_audience} "
172
- f"that instantly capture attention and generate registrations for a webinar about {product}. "
173
- f"Focus on awakening genuine interest and communicating the value they will get by registering."
174
- f"\n\n"
175
- f"IMPORTANT: Carefully study these examples of the selected formula. "
176
- f"Each example represents the style and structure to follow"
177
- f":\n\n"
178
- )
179
-
180
- # Agregar ejemplos aleatorios de la fórmula (keeping examples in Spanish)
181
- random_examples = random.sample(selected_formula['examples'], min(5, len(selected_formula['examples'])))
182
- webinar_names_instruction += "EXAMPLES OF THE FORMULA TO FOLLOW:\n"
183
- for i, example in enumerate(random_examples, 1):
184
- webinar_names_instruction += f"{i}. {example}\n"
185
-
186
- # Instrucciones específicas (translated to English)
187
- webinar_names_instruction += "\nSPECIFIC INSTRUCTIONS:\n"
188
- webinar_names_instruction += "1. Maintain the same structure and length as the previous examples\n"
189
- webinar_names_instruction += "2. Use the same tone and writing style\n"
190
- webinar_names_instruction += "3. Replicate the phrase construction patterns\n"
191
- webinar_names_instruction += "4. Preserve the level of specificity and detail\n"
192
- webinar_names_instruction += f"5. Adapt the content for {target_audience} while maintaining the essence of the examples\n\n"
193
- webinar_names_instruction += f"FORMULA TO FOLLOW:\n{selected_formula['description']}\n\n"
194
- webinar_names_instruction += f"""
195
- GENERATE NOW:
196
- Create {number_of_names} webinar names that faithfully follow the style and structure of the examples shown.
197
- """
198
-
199
- # Enviar el mensaje al modelo
200
- # Use the common generate_content function
201
- return generate_content(webinar_names_instruction, temperature)
202
-
203
- def generate_webinar_script(audience, topic, temperature, selected_formula):
204
- model = initialize_model(temperature)
205
-
206
- # Incluir las instrucciones del sistema en el prompt principal
207
- system_prompt = f"""You are a collaborative team of world-class experts working together to create an exceptional webinar script that converts audience into customers.
208
-
209
- THE EXPERT TEAM:
210
-
211
- 1. MASTER WEBINAR STRATEGIST:
212
- - Expert in webinar frameworks and conversion strategies
213
- - Trained in the Perfect Webinar methodology by Russell Brunson
214
- - Ensures the script follows the selected framework structure precisely
215
- - Focuses on strategic placement of key conversion elements
216
-
217
- 2. ELITE DIRECT RESPONSE COPYWRITER:
218
- - Trained by Gary Halbert, Gary Bencivenga, and David Ogilvy
219
- - Creates compelling hooks, stories, and persuasive elements
220
- - Crafts irresistible calls to action that drive conversions
221
- - Ensures the language resonates with the target audience
222
-
223
- 3. AUDIENCE PSYCHOLOGY SPECIALIST:
224
- - Expert in understanding audience motivations and objections
225
- - Creates content that builds genuine connection and trust
226
- - Identifies and addresses hidden fears and desires
227
- - Ensures the content feels personal and relevant
228
-
229
- 4. STORYTELLING MASTER:
230
- - Creates compelling narratives that illustrate key points
231
- - Develops relatable examples and case studies
232
- - Ensures stories support the transformation being offered
233
- - Makes complex concepts accessible through narrative
234
-
235
- 5. WEBINAR ENGAGEMENT EXPERT:
236
- - Specializes in maintaining audience attention throughout
237
- - Creates interactive elements and engagement hooks
238
- - Develops compelling transitions between sections
239
- - Ensures the webinar flows naturally and keeps interest high
240
-
241
- AUDIENCE UNDERSTANDING:
242
- You understand how real people interact with webinar content:
243
- - They quickly lose interest if the content feels generic or corporate
244
- - They only stay engaged when the content feels personal and sparks genuine curiosity
245
- - They respond to messages that seem delivered by a real person, not a corporation
246
- - They engage with content that hooks them from the first line and maintains interest throughout
247
-
248
- FORMAT RULES:
249
- - Create a complete webinar script with clear sections and subsections
250
- - Include specific talking points for each section
251
- - Write in a conversational, engaging tone
252
- - Include persuasive elements and calls to action
253
- - Follow the selected webinar framework structure exactly
254
- - WRITE THE ENTIRE SCRIPT IN SPANISH
255
- - DO NOT include any introductory text or explanations about the script
256
- - Start directly with the webinar content
257
-
258
- IMPORTANT:
259
- - The script must be comprehensive and ready to use
260
- - Include specific examples and stories relevant to the topic
261
- - Maintain a persuasive but authentic tone
262
- - Adapt language to match the target audience
263
- - Focus on transformative benefits and clear value proposition
264
- - Follow the selected formula structure precisely
265
- - WRITE THE ENTIRE SCRIPT IN SPANISH
266
- - DO NOT include phrases like "Aquí tienes un guion completo" or any other meta-commentary
267
-
268
- COLLABORATIVE PROCESS:
269
- As a team of experts, you will:
270
-
271
- 1. Analyze the framework '{selected_formula['description']}' to understand its core principles
272
- 2. Identify how to best adapt this framework for {audience} learning about {topic}
273
- 3. Determine the most effective storytelling opportunities within the framework
274
- 4. Create persuasive language that resonates with {audience}
275
- 5. Ensure the script maintains engagement throughout
276
- 6. Adapt the content to be accessible to beginners while still valuable to experienced individuals
277
- 7. Follow the exact structure provided in the framework
278
-
279
- Each expert will contribute their specialized knowledge to create a cohesive, compelling script that:
280
- - Follows the exact structure of the selected framework
281
- - Engages the audience from start to finish
282
- - Addresses audience pain points and desires
283
- - Presents {topic} in a clear, compelling way
284
- - Drives conversions through strategic calls to action"""
285
-
286
- # Iniciar el prompt con las instrucciones del sistema
287
- webinar_script_instruction = f"{system_prompt}\n\n"
288
-
289
- # Instrucciones específicas para la tarea
290
- webinar_script_instruction += (
291
- f"\nYour task is to create a complete webinar script IN SPANISH for {audience} "
292
- f"about {topic} that is persuasive and converts the audience into customers. "
293
- f"The script must follow exactly the structure of the framework '{selected_formula['description']}' "
294
- f"and must include all the necessary elements for a successful webinar."
295
- f"\n\n"
296
- )
297
-
298
- # Estructura del webinar
299
- webinar_script_instruction += "WEBINAR STRUCTURE TO FOLLOW:\n"
300
- for i, step in enumerate(selected_formula['structure'], 1):
301
- webinar_script_instruction += f"{i}. {step}\n"
302
-
303
- # Ejemplos de webinars exitosos
304
- webinar_script_instruction += "\n\nEXAMPLES OF SUCCESSFUL WEBINARS WITH THIS STRUCTURE:\n"
305
- for i, example in enumerate(selected_formula['examples'], 1):
306
- webinar_script_instruction += f"{i}. {example}\n"
307
-
308
- # Instrucciones específicas
309
- webinar_script_instruction += f"""
310
- SPECIFIC INSTRUCTIONS:
311
- 1. Create a complete script that follows exactly the provided structure
312
- 2. Include persuasive elements and clear calls to action
313
- 3. Adapt the language and examples specifically for {audience}
314
- 4. Focus on the transformative benefits of {topic}
315
- 5. Include relevant stories and examples that reinforce your points
316
- 6. Use a conversational but professional tone
317
- 7. Make sure each section fulfills its specific purpose in the framework
318
- 8. IMPORTANT: Write the entire script in Spanish
319
-
320
- GENERATE NOW:
321
- Create a complete webinar script following faithfully the structure of the selected framework.
322
- """
323
-
324
- # Enviar el mensaje al modelo
325
- chat_session = model.start_chat(
326
- history=[
327
- {
328
- "role": "user",
329
- "parts": [webinar_script_instruction],
330
- },
331
- ]
332
- )
333
- response = chat_session.send_message("Generate the webinar script IN SPANISH following exactly the provided structure. All content must be in Spanish.")
334
-
335
- return response.text
336
-
337
- # Función para validar entradas (evita duplicación)
338
- def validate_inputs(audience, product):
339
- has_audience = audience.strip() != ""
340
- has_product = product.strip() != ""
341
- return has_audience and has_product
342
-
343
- # Función para mostrar resultados (evita duplicación)
344
- def display_results(col, title, content, spinner_text):
345
- with col:
346
- with st.spinner(spinner_text, show_time=True):
347
- result = content
348
- st.subheader(title)
349
- st.markdown(result)
350
- return result
351
-
352
- # Configurar la interfaz de usuario con Streamlit
353
- st.set_page_config(page_title="Perfect Webinar Framework", layout="wide")
354
-
355
- # Leer el contenido del archivo manual.md
356
- with open("manual.md", "r", encoding="utf-8") as file:
357
- manual_content = file.read()
358
-
359
- # Mostrar el contenido del manual en el sidebar
360
- st.sidebar.markdown(manual_content)
361
-
362
- # Crear pestañas para la interfaz
363
- tab1, tab2 = st.tabs(["Guiones de Webinar", "Nombres de Webinar"])
364
-
365
- # Primera pestaña - Generador de Guiones de Webinar
366
- # First tab - update to use the function correctly
367
- with tab1:
368
- tab1.subheader("Script Webinar")
369
-
370
- # Crear columnas para la interfaz
371
- col1, col2 = tab1.columns([1, 2])
372
-
373
- # Columna de entrada usando la función reutilizable
374
- with col1:
375
- webinar_script_audience, webinar_script_product, selected_webinar_formula_key = create_input_section(
376
- col1,
377
- "webinar_script_audience",
378
- "webinar_script_product",
379
- webinar_formulas,
380
- "webinar_formula"
381
- )
382
-
383
- submit_webinar_script = st.button("Generar Guión de Webinar")
384
-
385
- # Opciones avanzadas
386
- with st.expander("Personaliza tu guión de webinar"):
387
- webinar_script_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_script_temp")
388
-
389
- selected_webinar_formula = webinar_formulas[selected_webinar_formula_key]
390
-
391
- # The structure display code has been removed
392
-
393
- # Generar y mostrar el guión usando la función reutilizable
394
- if submit_webinar_script:
395
- generate_and_display(
396
- col2,
397
- generate_webinar_script,
398
- webinar_script_audience,
399
- webinar_script_product,
400
- webinar_script_temperature,
401
- selected_webinar_formula,
402
- content_type="script"
403
- )
404
-
405
- # Segunda pestaña - Generador de Nombres de Webinar
406
- # Second tab - update to use the same function
407
- with tab2:
408
- tab2.subheader("Nombres de Webinar")
409
-
410
- # Crear columnas para la interfaz
411
- col1, col2 = tab2.columns([1, 2])
412
-
413
- # Columna de entrada usando la función reutilizable
414
- with col1:
415
- webinar_name_audience, webinar_name_product, selected_webinar_name_formula_key = create_input_section(
416
- col1,
417
- "webinar_name_audience",
418
- "webinar_name_product",
419
- webinar_name_formulas,
420
- "webinar_name_formula"
421
- )
422
-
423
- number_of_names = st.selectbox("Número de nombres", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4, key="number_of_names")
424
-
425
- submit_webinar_names = st.button("Generar Nombres de Webinar")
426
-
427
- # Opciones avanzadas
428
- with st.expander("Personaliza tus nombres de webinar"):
429
- webinar_name_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_name_temp")
430
-
431
- # Configurar opciones de ángulo
432
- angle_keys = ["NINGUNO"] + sorted([key for key in angles_webinar_names.keys() if key != "NINGUNO"])
433
- selected_angle = st.selectbox(
434
- "Selecciona el ángulo para tus nombres",
435
- options=angle_keys,
436
- key="webinar_name_angle"
437
- )
438
-
439
- selected_webinar_name_formula = webinar_name_formulas[selected_webinar_name_formula_key]
440
-
441
- # Generar y mostrar los nombres
442
- if submit_webinar_names:
443
- if validate_inputs(webinar_name_audience, webinar_name_product):
444
- try:
445
- with col2:
446
- with st.spinner("Generando tus nombres de webinar...", show_time=True):
447
- generated_webinar_names = generate_webinar_names(
448
- number_of_names,
449
- webinar_name_audience,
450
- webinar_name_product,
451
- webinar_name_temperature,
452
- selected_webinar_name_formula,
453
- selected_angle if selected_angle != "NINGUNO" else None
454
- )
455
- st.subheader("Tus nombres de webinar:")
456
- st.markdown(generated_webinar_names)
457
- except ValueError as e:
458
- col2.error(f"Error: {str(e)}")
459
- else:
460
- col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
461
-
462
- # Delete everything below this line - the duplicate functions
463
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ import streamlit as st
3
+ import os
4
+ import google.generativeai as genai
5
+ import random
6
+ import datetime
7
+ from streamlit import session_state as state
8
+ from angles import angles
9
+ from formulas.webinar_formulas import webinar_formulas
10
+ from formulas.webinar_name_formulas import webinar_name_formulas
11
+ from formulas.angles_webinar_names import angles_webinar_names
12
+
13
+ # Cargar las variables de entorno
14
+ load_dotenv()
15
+
16
+ # Configurar la API de Google
17
+ genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
18
+
19
+ # Create a reusable function for the UI input section
20
+ def create_input_section(col, audience_key, product_key, formula_options, formula_key):
21
+ audience = col.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key=audience_key)
22
+ product = col.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key=product_key)
23
+
24
+ selected_formula_key = col.selectbox(
25
+ "Selecciona un framework de webinar" if "script" in audience_key else "Selecciona una fórmula para tus nombres de webinar",
26
+ options=list(formula_options.keys()),
27
+ key=formula_key
28
+ )
29
+
30
+ return audience, product, selected_formula_key
31
+
32
+ # Create a reusable function for generation and display
33
+ def generate_and_display(col, generator_func, audience, product, temperature, selected_formula, **kwargs):
34
+ if validate_inputs(audience, product):
35
+ try:
36
+ with col:
37
+ with st.spinner("Generando contenido...", show_time=True):
38
+ # Extract only the parameters that the generator function accepts
39
+ if generator_func.__name__ == "generate_webinar_script":
40
+ generated_content = generator_func(
41
+ audience=audience,
42
+ topic=product,
43
+ temperature=temperature,
44
+ selected_formula=selected_formula
45
+ )
46
+ else:
47
+ generated_content = generator_func(
48
+ audience=audience,
49
+ topic=product,
50
+ temperature=temperature,
51
+ selected_formula=selected_formula,
52
+ **kwargs
53
+ )
54
+
55
+ # For webinar scripts, add download buttons
56
+ if "script" in kwargs.get("content_type", ""):
57
+ timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
58
+ st.download_button(
59
+ label="DESCARGAR GUION DE MI WEBINAR",
60
+ data=generated_content,
61
+ file_name=f"guion_webinar_{timestamp}.md",
62
+ mime="text/markdown",
63
+ key="download_top"
64
+ )
65
+
66
+ st.subheader("Tu " + ("guión de webinar:" if "script" in kwargs.get("content_type", "") else "nombres de webinar:"))
67
+ st.markdown(generated_content)
68
+
69
+ # Add bottom download button for scripts
70
+ if "script" in kwargs.get("content_type", ""):
71
+ st.download_button(
72
+ label="DESCARGAR GUION DE MI WEBINAR",
73
+ data=generated_content,
74
+ file_name=f"guion_webinar_{timestamp}.md",
75
+ mime="text/markdown",
76
+ key="download_bottom"
77
+ )
78
+ except ValueError as e:
79
+ col.error(f"Error: {str(e)}")
80
+ else:
81
+ col.error("Por favor, proporciona el público objetivo y el tema del webinar.")
82
+
83
+ # Función para crear la configuración del modelo (evita duplicación)
84
+ def create_model_config(temperature):
85
+ return {
86
+ "temperature": temperature,
87
+ "top_p": 0.65,
88
+ "top_k": 360,
89
+ "max_output_tokens": 8196,
90
+ }
91
+
92
+ # Función para inicializar el modelo
93
+ def initialize_model(temperature):
94
+ config = create_model_config(temperature)
95
+ return genai.GenerativeModel(
96
+ model_name="gemini-2.0-flash",
97
+ generation_config=config,
98
+ )
99
+
100
+ # Refactored model interaction function to reduce duplication
101
+ def generate_content(prompt_instructions, temperature):
102
+ model = initialize_model(temperature)
103
+ chat_session = model.start_chat(
104
+ history=[
105
+ {
106
+ "role": "user",
107
+ "parts": [prompt_instructions],
108
+ },
109
+ ]
110
+ )
111
+ response = chat_session.send_message("Generate the content following exactly the provided instructions. All content must be in Spanish.")
112
+ return response.text
113
+
114
+ # Función para generar nombres de webinars
115
+ def generate_webinar_names(number_of_names, target_audience, product, temperature, selected_formula, selected_angle=None):
116
+ # Incluir las instrucciones del sistema en el prompt principal
117
+ system_prompt = """You are a world-class copywriter, with expertise in crafting compelling webinar titles that immediately capture the audience's attention and drive registrations.
118
+
119
+ FORMAT RULES:
120
+ - Each webinar name must start with number and period
121
+ - One webinar name per line
122
+ - No explanations or categories
123
+ - Add a line break between each name
124
+ - Avoid unnecessary : symbols
125
+ - Each webinar name must be a complete and intriguing title
126
+ - WRITE ALL WEBINAR NAMES IN SPANISH
127
+
128
+ FORMAT EXAMPLE:
129
+ 1. Nombre del Webinar 1.
130
+
131
+ 2. Nombre del Webinar 2.
132
+
133
+ 3. Nombre del Webinar 3.
134
+
135
+ 4. Nombre del Webinar 4.
136
+
137
+ 5. Nombre del Webinar 5.
138
+
139
+ IMPORTANT:
140
+ - Each webinar name must be unique and memorable
141
+ - Avoid clichés and generalities
142
+ - Maintain an intriguing but credible tone
143
+ - Adapt speaking language from the audience
144
+ - Focus on transformative benefits
145
+ - Follow the selected formula structure
146
+ - WRITE ALL WEBINAR NAMES IN SPANISH"""
147
+
148
+ # Iniciar el prompt con las instrucciones del sistema
149
+ webinar_names_instruction = f"{system_prompt}\n\n"
150
+
151
+ # Añadir instrucciones de ángulo solo si no es "NINGUNO" y se proporcionó un ángulo
152
+ if selected_angle and selected_angle != "NINGUNO":
153
+ webinar_names_instruction += f"""
154
+ MAIN ANGLE: {selected_angle}
155
+ SPECIFIC ANGLE INSTRUCTIONS:
156
+ {angles_webinar_names[selected_angle]["instruction"]}
157
+
158
+ IMPORTANT: The {selected_angle} angle should be applied as a "style layer" over the formula structure:
159
+ 1. Keep the base structure of the formula intact
160
+ 2. Apply the tone and style of the {selected_angle} angle
161
+ 3. Ensure that each element of the formula reflects the angle
162
+ 4. The angle affects "how" it is said, not "what" is said
163
+
164
+ SUCCESSFUL EXAMPLES OF THE {selected_angle} ANGLE:
165
+ """
166
+ for example in angles_webinar_names[selected_angle]["examples"]:
167
+ webinar_names_instruction += f"- {example}\n"
168
+
169
+ # Instrucciones específicas para la tarea
170
+ webinar_names_instruction += (
171
+ f"\nYour task is to create {number_of_names} irresistible webinar names for {target_audience} "
172
+ f"that instantly capture attention and generate registrations for a webinar about {product}. "
173
+ f"Focus on awakening genuine interest and communicating the value they will get by registering."
174
+ f"\n\n"
175
+ f"IMPORTANT: Carefully study these examples of the selected formula. "
176
+ f"Each example represents the style and structure to follow"
177
+ f":\n\n"
178
+ )
179
+
180
+ # Agregar ejemplos aleatorios de la fórmula (keeping examples in Spanish)
181
+ random_examples = random.sample(selected_formula['examples'], min(5, len(selected_formula['examples'])))
182
+ webinar_names_instruction += "EXAMPLES OF THE FORMULA TO FOLLOW:\n"
183
+ for i, example in enumerate(random_examples, 1):
184
+ webinar_names_instruction += f"{i}. {example}\n"
185
+
186
+ # Instrucciones específicas (translated to English)
187
+ webinar_names_instruction += "\nSPECIFIC INSTRUCTIONS:\n"
188
+ webinar_names_instruction += "1. Maintain the same structure and length as the previous examples\n"
189
+ webinar_names_instruction += "2. Use the same tone and writing style\n"
190
+ webinar_names_instruction += "3. Replicate the phrase construction patterns\n"
191
+ webinar_names_instruction += "4. Preserve the level of specificity and detail\n"
192
+ webinar_names_instruction += f"5. Adapt the content for {target_audience} while maintaining the essence of the examples\n\n"
193
+ webinar_names_instruction += f"FORMULA TO FOLLOW:\n{selected_formula['description']}\n\n"
194
+ webinar_names_instruction += f"""
195
+ GENERATE NOW:
196
+ Create {number_of_names} webinar names that faithfully follow the style and structure of the examples shown.
197
+ """
198
+
199
+ # Enviar el mensaje al modelo
200
+ # Use the common generate_content function
201
+ return generate_content(webinar_names_instruction, temperature)
202
+
203
+ def generate_webinar_script(audience, topic, temperature, selected_formula):
204
+ model = initialize_model(temperature)
205
+
206
+ # Incluir las instrucciones del sistema en el prompt principal
207
+ system_prompt = f"""You are a collaborative team of world-class experts working together to create an exceptional webinar script that converts audience into customers.
208
+
209
+ THE EXPERT TEAM:
210
+
211
+ 1. MASTER WEBINAR STRATEGIST:
212
+ - Expert in webinar frameworks and conversion strategies
213
+ - Trained in the Perfect Webinar methodology by Russell Brunson
214
+ - Ensures the script follows the selected framework structure precisely
215
+ - Focuses on strategic placement of key conversion elements
216
+
217
+ 2. ELITE DIRECT RESPONSE COPYWRITER:
218
+ - Trained by Gary Halbert, Gary Bencivenga, and David Ogilvy
219
+ - Creates compelling hooks, stories, and persuasive elements
220
+ - Crafts irresistible calls to action that drive conversions
221
+ - Ensures the language resonates with the target audience
222
+
223
+ 3. AUDIENCE PSYCHOLOGY SPECIALIST:
224
+ - Expert in understanding audience motivations and objections
225
+ - Creates content that builds genuine connection and trust
226
+ - Identifies and addresses hidden fears and desires
227
+ - Ensures the content feels personal and relevant
228
+
229
+ 4. STORYTELLING MASTER:
230
+ - Creates compelling narratives that illustrate key points
231
+ - Develops relatable examples and case studies
232
+ - Ensures stories support the transformation being offered
233
+ - Makes complex concepts accessible through narrative
234
+
235
+ 5. WEBINAR ENGAGEMENT EXPERT:
236
+ - Specializes in maintaining audience attention throughout
237
+ - Creates interactive elements and engagement hooks
238
+ - Develops compelling transitions between sections
239
+ - Ensures the webinar flows naturally and keeps interest high
240
+
241
+ AUDIENCE UNDERSTANDING:
242
+ You understand how real people interact with webinar content:
243
+ - They quickly lose interest if the content feels generic or corporate
244
+ - They only stay engaged when the content feels personal and sparks genuine curiosity
245
+ - They respond to messages that seem delivered by a real person, not a corporation
246
+ - They engage with content that hooks them from the first line and maintains interest throughout
247
+
248
+ FORMAT RULES:
249
+ - Create a complete webinar script with clear sections and subsections
250
+ - Include specific talking points for each section
251
+ - Write in a conversational, engaging tone
252
+ - Include persuasive elements and calls to action
253
+ - Follow the selected webinar framework structure exactly
254
+ - WRITE THE ENTIRE SCRIPT IN SPANISH
255
+ - DO NOT include any introductory text or explanations about the script
256
+ - Start directly with the webinar content
257
+
258
+ IMPORTANT:
259
+ - The script must be comprehensive and ready to use
260
+ - Include specific examples and stories relevant to the topic
261
+ - Maintain a persuasive but authentic tone
262
+ - Adapt language to match the target audience
263
+ - Focus on transformative benefits and clear value proposition
264
+ - Follow the selected formula structure precisely
265
+ - WRITE THE ENTIRE SCRIPT IN SPANISH
266
+ - DO NOT include phrases like "Aquí tienes un guion completo" or any other meta-commentary
267
+
268
+ COLLABORATIVE PROCESS:
269
+ As a team of experts, you will:
270
+
271
+ 1. Analyze the framework '{selected_formula['description']}' to understand its core principles
272
+ 2. Identify how to best adapt this framework for {audience} learning about {topic}
273
+ 3. Determine the most effective storytelling opportunities within the framework
274
+ 4. Create persuasive language that resonates with {audience}
275
+ 5. Ensure the script maintains engagement throughout
276
+ 6. Adapt the content to be accessible to beginners while still valuable to experienced individuals
277
+ 7. Follow the exact structure provided in the framework
278
+
279
+ Each expert will contribute their specialized knowledge to create a cohesive, compelling script that:
280
+ - Follows the exact structure of the selected framework
281
+ - Engages the audience from start to finish
282
+ - Addresses audience pain points and desires
283
+ - Presents {topic} in a clear, compelling way
284
+ - Drives conversions through strategic calls to action"""
285
+
286
+ # Iniciar el prompt con las instrucciones del sistema
287
+ webinar_script_instruction = f"{system_prompt}\n\n"
288
+
289
+ # Instrucciones específicas para la tarea
290
+ webinar_script_instruction += (
291
+ f"\nYour task is to create a complete webinar script IN SPANISH for {audience} "
292
+ f"about {topic} that is persuasive and converts the audience into customers. "
293
+ f"The script must follow exactly the structure of the framework '{selected_formula['description']}' "
294
+ f"and must include all the necessary elements for a successful webinar."
295
+ f"\n\n"
296
+ )
297
+
298
+ # Estructura del webinar
299
+ webinar_script_instruction += "WEBINAR STRUCTURE TO FOLLOW:\n"
300
+ for i, step in enumerate(selected_formula['structure'], 1):
301
+ webinar_script_instruction += f"{i}. {step}\n"
302
+
303
+ # Ejemplos de webinars exitosos
304
+ webinar_script_instruction += "\n\nEXAMPLES OF SUCCESSFUL WEBINARS WITH THIS STRUCTURE:\n"
305
+ for i, example in enumerate(selected_formula['examples'], 1):
306
+ webinar_script_instruction += f"{i}. {example}\n"
307
+
308
+ # Instrucciones específicas
309
+ webinar_script_instruction += f"""
310
+ SPECIFIC INSTRUCTIONS:
311
+ 1. Create a complete script that follows exactly the provided structure
312
+ 2. Include persuasive elements and clear calls to action
313
+ 3. Adapt the language and examples specifically for {audience}
314
+ 4. Focus on the transformative benefits of {topic}
315
+ 5. Include relevant stories and examples that reinforce your points
316
+ 6. Use a conversational but professional tone
317
+ 7. Make sure each section fulfills its specific purpose in the framework
318
+ 8. IMPORTANT: Write the entire script in Spanish
319
+
320
+ GENERATE NOW:
321
+ Create a complete webinar script following faithfully the structure of the selected framework.
322
+ """
323
+
324
+ # Enviar el mensaje al modelo
325
+ chat_session = model.start_chat(
326
+ history=[
327
+ {
328
+ "role": "user",
329
+ "parts": [webinar_script_instruction],
330
+ },
331
+ ]
332
+ )
333
+ response = chat_session.send_message("Generate the webinar script IN NEUTRAL SPANISH following exactly the provided structure. All content must be in neutral Spanish (not Spain Spanish).")
334
+
335
+ return response.text
336
+
337
+ # Función para validar entradas (evita duplicación)
338
+ def validate_inputs(audience, product):
339
+ has_audience = audience.strip() != ""
340
+ has_product = product.strip() != ""
341
+ return has_audience and has_product
342
+
343
+ # Update the load_css function comment to be more descriptive
344
+ def load_css():
345
+ css_path = "styles/styles.css"
346
+ if os.path.exists(css_path):
347
+ try:
348
+ with open(css_path, "r") as f:
349
+ st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
350
+ except Exception as e:
351
+ st.warning(f"Error al cargar el archivo CSS: {str(e)}")
352
+ else:
353
+ st.warning(f"No se encontró el archivo CSS en {css_path}")
354
+
355
+ # Create a reusable function for custom buttons
356
+ def create_custom_button(label, button_key):
357
+ # Create the hidden Streamlit button
358
+ button_clicked = st.button(label, key=button_key)
359
+
360
+ # Create the custom styled button that references the CSS classes
361
+ st.markdown(
362
+ f"""
363
+ <style>
364
+ div[data-testid="stButton"] > button[kind="primaryButton"] {{
365
+ display: none;
366
+ }}
367
+ div.stButton > button:first-child {{
368
+ display: none;
369
+ }}
370
+ </style>
371
+ <div class="generate-webinar-button">
372
+ <button
373
+ type="button"
374
+ onclick="document.querySelector('button[key=\"{button_key}\"]') ?
375
+ document.querySelector('button[key=\"{button_key}\"]').click() :
376
+ document.querySelector('button[data-testid=\"baseButton-primaryButton\"]').click()">
377
+ {label}
378
+ </button>
379
+ </div>
380
+ """,
381
+ unsafe_allow_html=True
382
+ )
383
+
384
+ # Return the button state
385
+ return button_clicked
386
+
387
+ # Modify the page config section to include the CSS loading
388
+ st.set_page_config(page_title="Perfect Webinar Framework", layout="wide")
389
+ load_css()
390
+
391
+ # Leer el contenido del archivo manual.md
392
+ with open("manual.md", "r", encoding="utf-8") as file:
393
+ manual_content = file.read()
394
+
395
+ # Mostrar el contenido del manual en el sidebar
396
+ st.sidebar.markdown(manual_content)
397
+
398
+ # Crear pestañas para la interfaz
399
+ tab1, tab2 = st.tabs(["Guiones de Webinar", "Nombres de Webinar"])
400
+
401
+ # Primera pestaña - Generador de Guiones de Webinar
402
+ with tab1:
403
+ tab1.subheader("Script Webinar")
404
+
405
+ # Crear columnas para la interfaz
406
+ col1, col2 = tab1.columns([1, 2])
407
+
408
+ # Columna de entrada usando la función reutilizable
409
+ with col1:
410
+ webinar_script_audience, webinar_script_product, selected_webinar_formula_key = create_input_section(
411
+ col1,
412
+ "webinar_script_audience",
413
+ "webinar_script_product",
414
+ webinar_formulas,
415
+ "webinar_formula"
416
+ )
417
+
418
+ # Usar la función reutilizable para crear el botón personalizado
419
+ submit_webinar_script = create_custom_button("Generar Guión de Webinar", "generate_webinar_script")
420
+
421
+ # Opciones avanzadas
422
+ with st.expander("Personaliza tu guión de webinar"):
423
+ webinar_script_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_script_temp")
424
+
425
+ selected_webinar_formula = webinar_formulas[selected_webinar_formula_key]
426
+
427
+ # Generar y mostrar el guión usando la función reutilizable
428
+ if submit_webinar_script:
429
+ generate_and_display(
430
+ col2,
431
+ generate_webinar_script,
432
+ webinar_script_audience,
433
+ webinar_script_product,
434
+ webinar_script_temperature,
435
+ selected_webinar_formula,
436
+ content_type="script"
437
+ )
438
+
439
+ # Segunda pestaña - Generador de Nombres de Webinar
440
+ with tab2:
441
+ tab2.subheader("Nombres de Webinar")
442
+
443
+ # Crear columnas para la interfaz
444
+ col1, col2 = tab2.columns([1, 2])
445
+
446
+ # Columna de entrada usando la función reutilizable
447
+ with col1:
448
+ webinar_name_audience, webinar_name_product, selected_webinar_name_formula_key = create_input_section(
449
+ col1,
450
+ "webinar_name_audience",
451
+ "webinar_name_product",
452
+ webinar_name_formulas,
453
+ "webinar_name_formula"
454
+ )
455
+
456
+ number_of_names = st.selectbox("Número de nombres", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4, key="number_of_names")
457
+
458
+ # Usar la función reutilizable para crear el botón personalizado
459
+ submit_webinar_names = create_custom_button("Generar Nombres de Webinar", "generate_webinar_names")
460
+
461
+ # Opciones avanzadas
462
+ with st.expander("Personaliza tus nombres de webinar"):
463
+ webinar_name_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_name_temp")
464
+
465
+ # Configurar opciones de ángulo
466
+ angle_keys = ["NINGUNO"] + sorted([key for key in angles_webinar_names.keys() if key != "NINGUNO"])
467
+ selected_angle = st.selectbox(
468
+ "Selecciona el ángulo para tus nombres",
469
+ options=angle_keys,
470
+ key="webinar_name_angle"
471
+ )
472
+
473
+ selected_webinar_name_formula = webinar_name_formulas[selected_webinar_name_formula_key]
474
+
475
+ # Generar y mostrar los nombres usando la función reutilizable
476
+ if submit_webinar_names:
477
+ generate_and_display(
478
+ col2,
479
+ generate_webinar_names,
480
+ webinar_name_audience,
481
+ webinar_name_product,
482
+ webinar_name_temperature,
483
+ selected_webinar_name_formula,
484
+ content_type="names",
485
+ number_of_names=number_of_names,
486
+ selected_angle=selected_angle if selected_angle != "NINGUNO" else None
487
+ )
488
+ if validate_inputs(webinar_name_audience, webinar_name_product):
489
+ try:
490
+ with col2:
491
+ with st.spinner("Generando tus nombres de webinar...", show_time=True):
492
+ generated_webinar_names = generate_webinar_names(
493
+ number_of_names,
494
+ webinar_name_audience,
495
+ webinar_name_product,
496
+ webinar_name_temperature,
497
+ selected_webinar_name_formula,
498
+ selected_angle if selected_angle != "NINGUNO" else None
499
+ )
500
+ st.subheader("Tus nombres de webinar:")
501
+ st.markdown(generated_webinar_names)
502
+ except ValueError as e:
503
+ col2.error(f"Error: {str(e)}")
504
+ else:
505
+ col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
506
+
formulas/webinar_formulas.py CHANGED
@@ -1,322 +1,322 @@
1
- webinar_formulas = {
2
- "Perfect Webinar (Russell Brunson)": {
3
- "description": "Russell Brunson's time-tested framework for converting webinar attendees into loyal customers. It leverages a specific sequence of stories, offers, and engagement techniques to drive action. Uses a conversational, friendly tone throughout to create connection and trust with the audience.",
4
- "key_components": [
5
- "The Big Domino: Identifying and focusing on the single, most impactful belief that, once addressed, makes all other objections crumble.",
6
- "The Four Stories: A sequence of personal and relatable stories designed to build trust, demonstrate value, and overcome internal and external objections. These are: Origin Story, Vehicle Story, Internal Belief Story, External Belief Story.",
7
- "The Stack: Presenting a highly valuable and irresistible offer by stacking together numerous bonuses, features, and benefits, ultimately increasing the perceived worth far beyond the price.",
8
- "The Close: A structured closing sequence that includes addressing potential objections, creating scarcity/urgency, and providing a clear call to action.",
9
- "Conversational Approach: Using casual, friendly language throughout the webinar as if talking to a friend, avoiding corporate jargon, and creating a personal connection with the audience.",
10
- "Interactive Engagement: Strategically placed questions and interaction points to maintain audience attention and create a two-way conversation experience."
11
- ],
12
- "structure": [
13
- {
14
- "segment": "Introduction and Welcome (5 minutes)",
15
- "goals": [
16
- "Establish credibility and rapport with the audience.",
17
- "Set expectations for the webinar's content and value.",
18
- "Engage the audience with a compelling hook or question related to the core problem.",
19
- "Create a warm, friendly atmosphere from the start."
20
- ],
21
- "elements": [
22
- "Personal introduction (briefly highlighting expertise).",
23
- "Webinar agenda overview.",
24
- "Icebreaker question or poll to encourage participation.",
25
- "Introduce the pain points your audience is experiencing.",
26
- "Use casual language and personal pronouns (I, you, we) to create connection.",
27
- "Interactive check-in questions:",
28
- "- '¿Me pueden escuchar bien? Escribe SÍ en el chat si me escuchas claramente.'",
29
- "- '¿Desde dónde te estás conectando hoy? Me encantaría saber de dónde son todos.'",
30
- "- '¿Qué es lo que más te interesa aprender en este webinar? Compártelo en el chat.'",
31
- "- '¿Cuánto tiempo llevas intentando resolver este problema? ¿1 mes, 6 meses, más de un año?'"
32
- ]
33
- },
34
- {
35
- "segment": "Problem Identification and Big Domino Revelation (5 minutes)",
36
- "goals": [
37
- "Clearly define the problem the audience is facing.",
38
- "Introduce the 'Big Domino' belief that, if addressed, solves or mitigates the problem significantly.",
39
- "Create a sense of urgency and desire for a solution.",
40
- "Maintain a conversational tone while discussing serious problems."
41
- ],
42
- "elements": [
43
- "Statistics or data illustrating the problem's impact.",
44
- "Personal anecdote or relatable example of the problem.",
45
- "Introduce the 'Big Domino' and explain its significance.",
46
- "Reveal your Unique Mechanism as the one thing that will help them achieve their dreams.",
47
- "Use relatable metaphors and everyday language to explain complex concepts.",
48
- "Interactive validation questions:",
49
- "- '¿Te has sentido así alguna vez? Escribe un 1 en el chat si esto te suena familiar.'",
50
- "- '¿Cuál ha sido tu mayor obstáculo al intentar resolver este problema?'",
51
- "- 'En una escala del 1 al 10, ¿qué tanto impacto tiene este problema en tu vida/negocio?'",
52
- "- '¿Qué soluciones has intentado antes que no funcionaron? Compártelo brevemente en el chat.'"
53
- ]
54
- },
55
- {
56
- "segment": "Storytelling Based on the Four Stories (30 minutes)",
57
- "goals": [
58
- "Build trust and connection with the audience through relatable narratives.",
59
- "Demonstrate the effectiveness of the framework or solution through personal experience and client success stories.",
60
- "Address internal and external objections by showing how they were overcome.",
61
- "Tell stories in a casual, authentic way as if sharing with friends."
62
- ],
63
- "elements": [
64
- "Origin Story: Share your journey and the challenges you faced before discovering the framework.",
65
- "Vehicle Story: Explain how the 'vehicle' (your coaching program) helped you achieve success.",
66
- "Internal Belief Story: Describe the limiting belief you had to overcome to achieve your goals.",
67
- "External Belief Story: Share a story of how someone else (ideal client) overcame their pain points using your coaching program.",
68
- "Use conversational transitions between stories: 'Now, let me tell you about something that changed everything for me...'",
69
- "Include authentic emotions and reactions in your stories.",
70
- "Interactive reflection questions after key revelations:",
71
- "- 'Después de escuchar esta historia, ¿te sientes identificado/a? Escribe SÍ si es así.'",
72
- "- '¿Cuál de estos obstáculos es el que más te ha afectado a ti? ¿El 1, 2 o 3?'",
73
- "- 'Este descubrimiento cambió todo para mí. ¿Te sorprende? Escribe WOW si esto es nuevo para ti.'",
74
- "- '¿Puedes ver cómo esto podría aplicarse en tu situación? Escribe CLARO si lo ves.'",
75
- "- 'Antes de continuar, ¿hay algo que no haya quedado claro hasta ahora? Escribe tu pregunta.'"
76
- ]
77
- },
78
- {
79
- "segment": "Offer Presentation and Closing (10 minutes)",
80
- "goals": [
81
- "Present a clear and compelling offer that directly addresses the audience's needs.",
82
- "Increase the perceived value of the offer by 'stacking' bonuses and features.",
83
- "Create a sense of urgency and scarcity to encourage immediate action.",
84
- "Maintain the friendly, conversational tone even during the sales portion."
85
- ],
86
- "elements": [
87
- "Permission-based transition questions:",
88
- "- '¿Estás listo/a para conocer cómo puedes implementar esto en tu vida/negocio? Escribe SÍ si quieres que te muestre la solución.'",
89
- "- '¿Te gustaría saber exactamente cómo puedes lograr los mismos resultados? Escribe un 5 en el chat si estás listo/a.'",
90
- "- 'Antes de mostrarte la solución, ¿puedo preguntarte si estás buscando activamente resolver este problema ahora mismo?'",
91
- "Clearly outline the benefits and features of your 8-week coaching program.",
92
- "Visually present the 'Stack' of bonuses and added value.",
93
- "State the price and explain its justification in relation to the value provided.",
94
- "Create urgency by limiting the offer's availability or adding time-sensitive bonuses.",
95
- "Provide a clear call to action that emphasizes this is the only way to access your unique mechanism.",
96
- "Use friendly language when discussing price: 'I wanted to make this accessible for everyone who's serious about making a change.'",
97
- "Social proof questions during offer:",
98
- "- '¿Quién ya tomó acción y se unió al programa? Escribe DENTRO en el chat para que pueda felicitarte personalmente.'",
99
- "- 'Veo que Carlos acaba de unirse, ¡bienvenido al programa! ¿Alguien más se acaba de unir?'",
100
- "- '¿Qué te está impidiendo tomar acción ahora mismo? Compártelo en el chat para que pueda ayudarte.'",
101
- "- 'Si ya sabes que esto es para ti, escribe LISTO y te daré acceso inmediato.'"
102
- ]
103
- },
104
- {
105
- "segment": "Questions and Answers (10 minutes)",
106
- "goals": [
107
- "Address any remaining questions or concerns from the audience.",
108
- "Reinforce the value of the offer and the benefits of taking action.",
109
- "Provide a final opportunity for attendees to convert into customers.",
110
- "End with the same warm, friendly tone established at the beginning."
111
- ],
112
- "elements": [
113
- "Invite questions casually: 'What questions do you have? I'm an open book, so ask me anything!'",
114
- "Select and answer relevant questions from the audience.",
115
- "Address common objections or hesitations about joining a coaching program.",
116
- "Restate the core value proposition of the offer and how it solves their pain points.",
117
- "Remind them of your unique mechanism and reinforce the call to action.",
118
- "Provide contact information for follow-up inquiries.",
119
- "Express genuine appreciation: 'I've loved spending this time with you today, and I'm so excited for those of you joining us!'",
120
- "End with a personal touch: 'I can't wait to get to know each of you better in the program!'",
121
- "Final engagement questions:",
122
- "- '¿Cuál fue tu mayor aprendizaje de este webinar? Compártelo en el chat.'",
123
- "- '¿Te ha resultado valioso este tiempo juntos? Escribe SÍ si has aprendido algo nuevo hoy.'",
124
- "- '¿Hay algo más en lo que pueda ayudarte antes de terminar?'",
125
- "- 'Si te gustó este webinar, ¿podrías escribir GRACIAS en el chat? Me encantaría saber que fue útil para ti.'"
126
- ]
127
- }
128
- ],
129
- "tips": [
130
- "Practice your presentation to ensure a smooth and confident delivery.",
131
- "Use visuals to illustrate key concepts and keep the audience engaged.",
132
- "Maintain a high energy level and enthusiasm throughout the webinar.",
133
- "Engage with the audience through polls, questions, and chat.",
134
- "Follow up with attendees after the webinar to provide additional information and support.",
135
- "Clearly articulate how your coaching program transforms participants in 8 weeks.",
136
- "Emphasize your unique mechanism throughout the presentation.",
137
- "Speak as if you're having coffee with a friend, not delivering a formal presentation.",
138
- "Use contractions (I'm, you're, we'll) to sound more natural and conversational.",
139
- "Share personal anecdotes and be willing to be vulnerable to build connection.",
140
- "Address audience members by name when responding to comments or questions.",
141
- "Avoid industry jargon or explain it in simple terms when necessary.",
142
- "Use humor appropriately to keep the atmosphere light and engaging.",
143
- "Vary your tone, pace, and volume to maintain interest and emphasize key points.",
144
- "Ask rhetorical questions throughout to keep the audience mentally engaged.",
145
- "Plan your interaction points in advance and prepare specific questions for each section.",
146
- "Acknowledge responses by name to create a personal connection: 'Gracias María, excelente pregunta...'",
147
- "Create moments of collective agreement: 'Veo que muchos están escribiendo SÍ, esto es exactamente lo que pensaba.'",
148
- "Use audience responses to guide your presentation: 'Veo que varios mencionan el problema X, vamos a profundizar en eso...'",
149
- "Have a moderator help manage the chat if possible to highlight important questions and comments."
150
- ],
151
- "examples": [
152
- "How this simple webinar framework allowed me to generate $100,000 in sales in 90 minutes",
153
- "The Secret to Webinars that Convert: The Formula That Has Generated Millions for ClickFunnels",
154
- "Perfect Webinar: The 60-Minute Structure That Transforms Viewers into Customers",
155
- "Double your conversion rate with this story telling framework.",
156
- "The 8-Week Coaching Program That Transformed 1,000+ Entrepreneurs: Join Our Exclusive Masterclass"
157
- ]
158
- },
159
-
160
- "Webinar PASTOR": {
161
- "description": "A persuasive framework that follows the PASTOR method (Problem, Amplify, Story, Testimonial, Offer, Response) to address pain points and present your solution in a compelling way.",
162
- "key_components": [
163
- "Problem: Identifying the specific pain points and challenges your audience is facing.",
164
- "Amplify: Highlighting the consequences of not solving the problem to create urgency.",
165
- "Story: Using narrative to illustrate the problem and solution in a relatable way.",
166
- "Testimonial: Leveraging social proof from satisfied customers to build credibility.",
167
- "Offer: Presenting your product or service as the ideal solution to their problems.",
168
- "Response: Creating a clear call to action that encourages immediate purchase."
169
- ],
170
- "structure": [
171
- {
172
- "segment": "Problem Identification (10 minutes)",
173
- "goals": [
174
- "Clearly define the specific problem your audience is facing.",
175
- "Create resonance by showing you understand their challenges.",
176
- "Establish the importance of solving this problem."
177
- ],
178
- "elements": [
179
- "Research-backed statistics about the problem's prevalence.",
180
- "Common misconceptions about the problem.",
181
- "Direct questions to the audience about their experience with the problem.",
182
- "Brief overview of failed approaches to solving the problem."
183
- ]
184
- },
185
- {
186
- "segment": "Amplify the Consequences (10 minutes)",
187
- "goals": [
188
- "Highlight the negative impact of leaving the problem unsolved.",
189
- "Create emotional connection to the pain points.",
190
- "Build urgency for finding a solution."
191
- ],
192
- "elements": [
193
- "Short-term consequences of ignoring the problem.",
194
- "Long-term impact on personal/business growth.",
195
- "Financial implications of the problem.",
196
- "Emotional and psychological costs of the ongoing issue."
197
- ]
198
- },
199
- {
200
- "segment": "Story and Solution (15 minutes)",
201
- "goals": [
202
- "Share a compelling narrative that illustrates the problem-solution journey.",
203
- "Make the solution relatable through storytelling.",
204
- "Demonstrate transformation through narrative."
205
- ],
206
- "elements": [
207
- "Personal story or client journey that illustrates the problem.",
208
- "The turning point or discovery moment.",
209
- "Implementation of the solution within the story.",
210
- "Transformation and results achieved through the solution."
211
- ]
212
- },
213
- {
214
- "segment": "Testimonials and Social Proof (10 minutes)",
215
- "goals": [
216
- "Build credibility through third-party validation.",
217
- "Address potential objections through others' experiences.",
218
- "Demonstrate real-world results from diverse perspectives."
219
- ],
220
- "elements": [
221
- "Video testimonials from satisfied customers.",
222
- "Before-and-after case studies with specific results.",
223
- "Testimonials that address different objections or concerns.",
224
- "Industry recognition or endorsements if applicable."
225
- ]
226
- },
227
- {
228
- "segment": "Offer Presentation (10 minutes)",
229
- "goals": [
230
- "Present your product/service as the ideal solution.",
231
- "Clearly articulate the unique value proposition.",
232
- "Stack benefits and features to increase perceived value."
233
- ],
234
- "elements": [
235
- "Clear explanation of what the product/service includes.",
236
- "Highlight the unique mechanism or approach that makes it effective.",
237
- "Value stacking - present all components and their individual value.",
238
- "Price justification compared to the problem's cost and solution's value."
239
- ]
240
- },
241
- {
242
- "segment": "Response and Call to Action (5 minutes)",
243
- "goals": [
244
- "Create a clear path to purchase.",
245
- "Address final objections or hesitations.",
246
- "Establish urgency for immediate action."
247
- ],
248
- "elements": [
249
- "Recap of the main benefits and transformation offered.",
250
- "Limited-time bonuses or special pricing to create urgency.",
251
- "Clear, simple instructions for how to purchase.",
252
- "Final reminder of the cost of inaction versus the value of the solution."
253
- ]
254
- }
255
- ],
256
- "tips": [
257
- "Personalize the problem identification to your specific audience segment.",
258
- "Use concrete examples and specific numbers when amplifying consequences.",
259
- "Make your story authentic and relatable - avoid exaggeration.",
260
- "Select testimonials that represent your target audience demographics.",
261
- "Create a visually appealing presentation of your offer stack.",
262
- "Practice transitioning smoothly between each PASTOR element.",
263
- "End with a strong, clear call to action that's repeated multiple times."
264
- ],
265
- "examples": [
266
- "Del dolor crónico a la libertad total - El método que ha ayudado a 1,000+ personas sin cirugía",
267
- "Amplifica tu patrimonio con este sistema que generó $250,000 en 12 meses partiendo de cero",
268
- "La historia detrás de mi transformación y cómo perdí 30 kilos después de probar 15 métodos fallidos",
269
- "Testimonios que venden y el método que triplicó mis conversiones en solo 60 días",
270
- "Descubre el método que ayudó a 300+ fotógrafos a duplicar sus ingresos trabajando la mitad de horas"
271
- ]
272
- },
273
-
274
- "Webinar de Caso de Estudio": {
275
- "description": "Based on presenting real results through detailed case studies, showing the before, during, and after of the process.",
276
- "structure": [
277
- "Introduction of the case study (5 minutes)",
278
- "Initial situation and challenges (10 minutes)",
279
- "Step-by-step implementation process (20 minutes)",
280
- "Results and transformation (15 minutes)",
281
- "How to apply the same process (10 minutes)"
282
- ],
283
- "examples": [
284
- "Cómo María pasó de $0 a $10,000 mensuales con este método de Instagram en 60 días",
285
- "El caso de estudio de Empresa X: Cómo triplicaron sus conversiones en 90 días",
286
- "De principiante a experto: El viaje de Juan para dominar el trading con solo 1 hora al día"
287
- ]
288
- },
289
-
290
- "Webinar de Educación": {
291
- "description": "Centered on providing substantial educational value, establishing yourself as an authority and building trust before the offer.",
292
- "structure": [
293
- "Introduction to the topic and establishing credibility (5 minutes)",
294
- "Historical or theoretical context of the topic (10 minutes)",
295
- "Main educational content (30 minutes)",
296
- "Practical applications (10 minutes)",
297
- "Additional resources and offer (5 minutes)"
298
- ],
299
- "examples": [
300
- "Los 7 principios fundamentales del copywriting que todo emprendedor debe conocer",
301
- "Masterclass: Entendiendo el algoritmo de Instagram en 2023",
302
- "La ciencia detrás de la pérdida de peso: lo que tu médico no te dice"
303
- ]
304
- },
305
-
306
- # New formula template - ready to be filled in
307
- "Nueva Fórmula de Webinar": {
308
- "description": "Description of the new webinar formula goes here.",
309
- "structure": [
310
- "First segment (X minutes)",
311
- "Second segment (X minutes)",
312
- "Third segment (X minutes)",
313
- "Fourth segment (X minutes)",
314
- "Fifth segment (X minutes)"
315
- ],
316
- "examples": [
317
- "Example title 1",
318
- "Example title 2",
319
- "Example title 3"
320
- ]
321
- }
322
  }
 
1
+ webinar_formulas = {
2
+ "Perfect Webinar (Russell Brunson)": {
3
+ "description": "Russell Brunson's time-tested framework for converting webinar attendees into loyal customers. It leverages a specific sequence of stories, offers, and engagement techniques to drive action. Uses a conversational, friendly tone throughout to create connection and trust with the audience.",
4
+ "key_components": [
5
+ "The Big Domino: Identifying and focusing on the single, most impactful belief that, once addressed, makes all other objections crumble.",
6
+ "The Four Stories: A sequence of personal and relatable stories designed to build trust, demonstrate value, and overcome internal and external objections. These are: Origin Story, Vehicle Story, Internal Belief Story, External Belief Story.",
7
+ "The Stack: Presenting a highly valuable and irresistible offer by stacking together numerous bonuses, features, and benefits, ultimately increasing the perceived worth far beyond the price.",
8
+ "The Close: A structured closing sequence that includes addressing potential objections, creating scarcity/urgency, and providing a clear call to action.",
9
+ "Conversational Approach: Using casual, friendly language throughout the webinar as if talking to a friend, avoiding corporate jargon, and creating a personal connection with the audience.",
10
+ "Interactive Engagement: Strategically placed questions and interaction points to maintain audience attention and create a two-way conversation experience."
11
+ ],
12
+ "structure": [
13
+ {
14
+ "segment": "Introduction and Welcome (5 minutes)",
15
+ "goals": [
16
+ "Establish credibility and rapport with the audience.",
17
+ "Set expectations for the webinar's content and value.",
18
+ "Engage the audience with a compelling hook or question related to the core problem.",
19
+ "Create a warm, friendly atmosphere from the start."
20
+ ],
21
+ "elements": [
22
+ "Personal introduction (briefly highlighting expertise).",
23
+ "Webinar agenda overview.",
24
+ "Icebreaker question or poll to encourage participation.",
25
+ "Introduce the pain points your audience is experiencing.",
26
+ "Use casual language and personal pronouns (I, you, we) to create connection.",
27
+ "Interactive check-in questions:",
28
+ "- '¿Me pueden escuchar bien? Escribe SÍ en el chat si me escuchas claramente.'",
29
+ "- '¿Desde dónde te estás conectando hoy? Me encantaría saber de dónde son todos.'",
30
+ "- '¿Qué es lo que más te interesa aprender en este webinar? Compártelo en el chat.'",
31
+ "- '¿Cuánto tiempo llevas intentando resolver este problema? ¿1 mes, 6 meses, más de un año?'"
32
+ ]
33
+ },
34
+ {
35
+ "segment": "Problem Identification and Big Domino Revelation (5 minutes)",
36
+ "goals": [
37
+ "Clearly define the problem the audience is facing.",
38
+ "Introduce the 'Big Domino' belief that, if addressed, solves or mitigates the problem significantly.",
39
+ "Create a sense of urgency and desire for a solution.",
40
+ "Maintain a conversational tone while discussing serious problems."
41
+ ],
42
+ "elements": [
43
+ "Statistics or data illustrating the problem's impact.",
44
+ "Personal anecdote or relatable example of the problem.",
45
+ "Introduce the 'Big Domino' and explain its significance.",
46
+ "Reveal your Unique Mechanism as the one thing that will help them achieve their dreams.",
47
+ "Use relatable metaphors and everyday language to explain complex concepts.",
48
+ "Interactive validation questions:",
49
+ "- '¿Te has sentido así alguna vez? Escribe un 1 en el chat si esto te suena familiar.'",
50
+ "- '¿Cuál ha sido tu mayor obstáculo al intentar resolver este problema?'",
51
+ "- 'En una escala del 1 al 10, ¿qué tanto impacto tiene este problema en tu vida/negocio?'",
52
+ "- '¿Qué soluciones has intentado antes que no funcionaron? Compártelo brevemente en el chat.'"
53
+ ]
54
+ },
55
+ {
56
+ "segment": "Storytelling Based on the Four Stories (30 minutes)",
57
+ "goals": [
58
+ "Build trust and connection with the audience through relatable narratives.",
59
+ "Demonstrate the effectiveness of the framework or solution through personal experience and client success stories.",
60
+ "Address internal and external objections by showing how they were overcome.",
61
+ "Tell stories in a casual, authentic way as if sharing with friends."
62
+ ],
63
+ "elements": [
64
+ "Origin Story: Share your journey and the challenges you faced before discovering the framework.",
65
+ "Vehicle Story: Explain how the 'vehicle' (your coaching program) helped you achieve success.",
66
+ "Internal Belief Story: Describe the limiting belief you had to overcome to achieve your goals.",
67
+ "External Belief Story: Share a story of how someone else (ideal client) overcame their pain points using your coaching program.",
68
+ "Use conversational transitions between stories: 'Now, let me tell you about something that changed everything for me...'",
69
+ "Include authentic emotions and reactions in your stories.",
70
+ "Interactive reflection questions after key revelations:",
71
+ "- 'Después de escuchar esta historia, ¿te sientes identificado/a? Escribe SÍ si es así.'",
72
+ "- '¿Cuál de estos obstáculos es el que más te ha afectado a ti? ¿El 1, 2 o 3?'",
73
+ "- 'Este descubrimiento cambió todo para mí. ¿Te sorprende? Escribe WOW si esto es nuevo para ti.'",
74
+ "- '¿Puedes ver cómo esto podría aplicarse en tu situación? Escribe CLARO si lo ves.'",
75
+ "- 'Antes de continuar, ¿hay algo que no haya quedado claro hasta ahora? Escribe tu pregunta.'"
76
+ ]
77
+ },
78
+ {
79
+ "segment": "Offer Presentation and Closing (10 minutes)",
80
+ "goals": [
81
+ "Present a clear and compelling offer that directly addresses the audience's needs.",
82
+ "Increase the perceived value of the offer by 'stacking' bonuses and features.",
83
+ "Create a sense of urgency and scarcity to encourage immediate action.",
84
+ "Maintain the friendly, conversational tone even during the sales portion."
85
+ ],
86
+ "elements": [
87
+ "Permission-based transition questions:",
88
+ "- '¿Estás listo/a para conocer cómo puedes implementar esto en tu vida/negocio? Escribe SÍ si quieres que te muestre la solución.'",
89
+ "- '¿Te gustaría saber exactamente cómo puedes lograr los mismos resultados? Escribe un 5 en el chat si estás listo/a.'",
90
+ "- 'Antes de mostrarte la solución, ¿puedo preguntarte si estás buscando activamente resolver este problema ahora mismo?'",
91
+ "Clearly outline the benefits and features of your 8-week coaching program.",
92
+ "Visually present the 'Stack' of bonuses and added value.",
93
+ "State the price and explain its justification in relation to the value provided.",
94
+ "Create urgency by limiting the offer's availability or adding time-sensitive bonuses.",
95
+ "Provide a clear call to action that emphasizes this is the only way to access your unique mechanism.",
96
+ "Use friendly language when discussing price: 'I wanted to make this accessible for everyone who's serious about making a change.'",
97
+ "Social proof questions during offer:",
98
+ "- '¿Quién ya tomó acción y se unió al programa? Escribe DENTRO en el chat para que pueda felicitarte personalmente.'",
99
+ "- 'Veo que Carlos acaba de unirse, ¡bienvenido al programa! ¿Alguien más se acaba de unir?'",
100
+ "- '¿Qué te está impidiendo tomar acción ahora mismo? Compártelo en el chat para que pueda ayudarte.'",
101
+ "- 'Si ya sabes que esto es para ti, escribe LISTO y te daré acceso inmediato.'"
102
+ ]
103
+ },
104
+ {
105
+ "segment": "Questions and Answers (10 minutes)",
106
+ "goals": [
107
+ "Address any remaining questions or concerns from the audience.",
108
+ "Reinforce the value of the offer and the benefits of taking action.",
109
+ "Provide a final opportunity for attendees to convert into customers.",
110
+ "End with the same warm, friendly tone established at the beginning."
111
+ ],
112
+ "elements": [
113
+ "Invite questions casually: 'What questions do you have? I'm an open book, so ask me anything!'",
114
+ "Select and answer relevant questions from the audience.",
115
+ "Address common objections or hesitations about joining a coaching program.",
116
+ "Restate the core value proposition of the offer and how it solves their pain points.",
117
+ "Remind them of your unique mechanism and reinforce the call to action.",
118
+ "Provide contact information for follow-up inquiries.",
119
+ "Express genuine appreciation: 'I've loved spending this time with you today, and I'm so excited for those of you joining us!'",
120
+ "End with a personal touch: 'I can't wait to get to know each of you better in the program!'",
121
+ "Final engagement questions:",
122
+ "- '¿Cuál fue tu mayor aprendizaje de este webinar? Compártelo en el chat.'",
123
+ "- '¿Te ha resultado valioso este tiempo juntos? Escribe SÍ si has aprendido algo nuevo hoy.'",
124
+ "- '¿Hay algo más en lo que pueda ayudarte antes de terminar?'",
125
+ "- 'Si te gustó este webinar, ¿podrías escribir GRACIAS en el chat? Me encantaría saber que fue útil para ti.'"
126
+ ]
127
+ }
128
+ ],
129
+ "tips": [
130
+ "Practice your presentation to ensure a smooth and confident delivery.",
131
+ "Use visuals to illustrate key concepts and keep the audience engaged.",
132
+ "Maintain a high energy level and enthusiasm throughout the webinar.",
133
+ "Engage with the audience through polls, questions, and chat.",
134
+ "Follow up with attendees after the webinar to provide additional information and support.",
135
+ "Clearly articulate how your coaching program transforms participants in 8 weeks.",
136
+ "Emphasize your unique mechanism throughout the presentation.",
137
+ "Speak as if you're having coffee with a friend, not delivering a formal presentation.",
138
+ "Use contractions (I'm, you're, we'll) to sound more natural and conversational.",
139
+ "Share personal anecdotes and be willing to be vulnerable to build connection.",
140
+ "Address audience members by name when responding to comments or questions.",
141
+ "Avoid industry jargon or explain it in simple terms when necessary.",
142
+ "Use humor appropriately to keep the atmosphere light and engaging.",
143
+ "Vary your tone, pace, and volume to maintain interest and emphasize key points.",
144
+ "Ask rhetorical questions throughout to keep the audience mentally engaged.",
145
+ "Plan your interaction points in advance and prepare specific questions for each section.",
146
+ "Acknowledge responses by name to create a personal connection: 'Gracias María, excelente pregunta...'",
147
+ "Create moments of collective agreement: 'Veo que muchos están escribiendo SÍ, esto es exactamente lo que pensaba.'",
148
+ "Use audience responses to guide your presentation: 'Veo que varios mencionan el problema X, vamos a profundizar en eso...'",
149
+ "Have a moderator help manage the chat if possible to highlight important questions and comments."
150
+ ],
151
+ "examples": [
152
+ "How this simple webinar framework allowed me to generate $100,000 in sales in 90 minutes",
153
+ "The Secret to Webinars that Convert: The Formula That Has Generated Millions for ClickFunnels",
154
+ "Perfect Webinar: The 60-Minute Structure That Transforms Viewers into Customers",
155
+ "Double your conversion rate with this story telling framework.",
156
+ "The 8-Week Coaching Program That Transformed 1,000+ Entrepreneurs: Join Our Exclusive Masterclass"
157
+ ]
158
+ },
159
+
160
+ "Webinar PASTOR": {
161
+ "description": "A persuasive framework that follows the PASTOR method (Problem, Amplify, Story, Testimonial, Offer, Response) to address pain points and present your solution in a compelling way.",
162
+ "key_components": [
163
+ "Problem: Identifying the specific pain points and challenges your audience is facing.",
164
+ "Amplify: Highlighting the consequences of not solving the problem to create urgency.",
165
+ "Story: Using narrative to illustrate the problem and solution in a relatable way.",
166
+ "Testimonial: Leveraging social proof from satisfied customers to build credibility.",
167
+ "Offer: Presenting your product or service as the ideal solution to their problems.",
168
+ "Response: Creating a clear call to action that encourages immediate purchase."
169
+ ],
170
+ "structure": [
171
+ {
172
+ "segment": "Problem Identification (10 minutes)",
173
+ "goals": [
174
+ "Clearly define the specific problem your audience is facing.",
175
+ "Create resonance by showing you understand their challenges.",
176
+ "Establish the importance of solving this problem."
177
+ ],
178
+ "elements": [
179
+ "Research-backed statistics about the problem's prevalence.",
180
+ "Common misconceptions about the problem.",
181
+ "Direct questions to the audience about their experience with the problem.",
182
+ "Brief overview of failed approaches to solving the problem."
183
+ ]
184
+ },
185
+ {
186
+ "segment": "Amplify the Consequences (10 minutes)",
187
+ "goals": [
188
+ "Highlight the negative impact of leaving the problem unsolved.",
189
+ "Create emotional connection to the pain points.",
190
+ "Build urgency for finding a solution."
191
+ ],
192
+ "elements": [
193
+ "Short-term consequences of ignoring the problem.",
194
+ "Long-term impact on personal/business growth.",
195
+ "Financial implications of the problem.",
196
+ "Emotional and psychological costs of the ongoing issue."
197
+ ]
198
+ },
199
+ {
200
+ "segment": "Story and Solution (15 minutes)",
201
+ "goals": [
202
+ "Share a compelling narrative that illustrates the problem-solution journey.",
203
+ "Make the solution relatable through storytelling.",
204
+ "Demonstrate transformation through narrative."
205
+ ],
206
+ "elements": [
207
+ "Personal story or client journey that illustrates the problem.",
208
+ "The turning point or discovery moment.",
209
+ "Implementation of the solution within the story.",
210
+ "Transformation and results achieved through the solution."
211
+ ]
212
+ },
213
+ {
214
+ "segment": "Testimonials and Social Proof (10 minutes)",
215
+ "goals": [
216
+ "Build credibility through third-party validation.",
217
+ "Address potential objections through others' experiences.",
218
+ "Demonstrate real-world results from diverse perspectives."
219
+ ],
220
+ "elements": [
221
+ "Video testimonials from satisfied customers.",
222
+ "Before-and-after case studies with specific results.",
223
+ "Testimonials that address different objections or concerns.",
224
+ "Industry recognition or endorsements if applicable."
225
+ ]
226
+ },
227
+ {
228
+ "segment": "Offer Presentation (10 minutes)",
229
+ "goals": [
230
+ "Present your product/service as the ideal solution.",
231
+ "Clearly articulate the unique value proposition.",
232
+ "Stack benefits and features to increase perceived value."
233
+ ],
234
+ "elements": [
235
+ "Clear explanation of what the product/service includes.",
236
+ "Highlight the unique mechanism or approach that makes it effective.",
237
+ "Value stacking - present all components and their individual value.",
238
+ "Price justification compared to the problem's cost and solution's value."
239
+ ]
240
+ },
241
+ {
242
+ "segment": "Response and Call to Action (5 minutes)",
243
+ "goals": [
244
+ "Create a clear path to purchase.",
245
+ "Address final objections or hesitations.",
246
+ "Establish urgency for immediate action."
247
+ ],
248
+ "elements": [
249
+ "Recap of the main benefits and transformation offered.",
250
+ "Limited-time bonuses or special pricing to create urgency.",
251
+ "Clear, simple instructions for how to purchase.",
252
+ "Final reminder of the cost of inaction versus the value of the solution."
253
+ ]
254
+ }
255
+ ],
256
+ "tips": [
257
+ "Personalize the problem identification to your specific audience segment.",
258
+ "Use concrete examples and specific numbers when amplifying consequences.",
259
+ "Make your story authentic and relatable - avoid exaggeration.",
260
+ "Select testimonials that represent your target audience demographics.",
261
+ "Create a visually appealing presentation of your offer stack.",
262
+ "Practice transitioning smoothly between each PASTOR element.",
263
+ "End with a strong, clear call to action that's repeated multiple times."
264
+ ],
265
+ "examples": [
266
+ "Del dolor crónico a la libertad total - El método que ha ayudado a 1,000+ personas sin cirugía",
267
+ "Amplifica tu patrimonio con este sistema que generó $250,000 en 12 meses partiendo de cero",
268
+ "La historia detrás de mi transformación y cómo perdí 30 kilos después de probar 15 métodos fallidos",
269
+ "Testimonios que venden y el método que triplicó mis conversiones en solo 60 días",
270
+ "Descubre el método que ayudó a 300+ fotógrafos a duplicar sus ingresos trabajando la mitad de horas"
271
+ ]
272
+ },
273
+
274
+ "Webinar de Caso de Estudio": {
275
+ "description": "Based on presenting real results through detailed case studies, showing the before, during, and after of the process.",
276
+ "structure": [
277
+ "Introduction of the case study (5 minutes)",
278
+ "Initial situation and challenges (10 minutes)",
279
+ "Step-by-step implementation process (20 minutes)",
280
+ "Results and transformation (15 minutes)",
281
+ "How to apply the same process (10 minutes)"
282
+ ],
283
+ "examples": [
284
+ "Cómo María pasó de $0 a $10,000 mensuales con este método de Instagram en 60 días",
285
+ "El caso de estudio de Empresa X: Cómo triplicaron sus conversiones en 90 días",
286
+ "De principiante a experto: El viaje de Juan para dominar el trading con solo 1 hora al día"
287
+ ]
288
+ },
289
+
290
+ "Webinar de Educación": {
291
+ "description": "Centered on providing substantial educational value, establishing yourself as an authority and building trust before the offer.",
292
+ "structure": [
293
+ "Introduction to the topic and establishing credibility (5 minutes)",
294
+ "Historical or theoretical context of the topic (10 minutes)",
295
+ "Main educational content (30 minutes)",
296
+ "Practical applications (10 minutes)",
297
+ "Additional resources and offer (5 minutes)"
298
+ ],
299
+ "examples": [
300
+ "Los 7 principios fundamentales del copywriting que todo emprendedor debe conocer",
301
+ "Masterclass: Entendiendo el algoritmo de Instagram en 2023",
302
+ "La ciencia detrás de la pérdida de peso: lo que tu médico no te dice"
303
+ ]
304
+ },
305
+
306
+ # New formula template - ready to be filled in
307
+ "Nueva Fórmula de Webinar": {
308
+ "description": "Description of the new webinar formula goes here.",
309
+ "structure": [
310
+ "First segment (X minutes)",
311
+ "Second segment (X minutes)",
312
+ "Third segment (X minutes)",
313
+ "Fourth segment (X minutes)",
314
+ "Fifth segment (X minutes)"
315
+ ],
316
+ "examples": [
317
+ "Example title 1",
318
+ "Example title 2",
319
+ "Example title 3"
320
+ ]
321
+ }
322
  }
styles/styles.css ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Custom button styles for Perfect Webinar Framework */
2
+
3
+ /* Generate Webinar Script button - yellow/red gradient */
4
+ .generate-webinar-button button {
5
+ width: 100%;
6
+ margin-top: 1rem;
7
+ border-radius: 5px;
8
+ height: 3em;
9
+ background: linear-gradient(135deg, #FFD700 0%, #FF4500 100%);
10
+ color: black;
11
+ font-weight: bold;
12
+ border: 1px solid black;
13
+ transition: all 0.3s ease;
14
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2);
15
+ }
16
+
17
+ .generate-webinar-button button:hover {
18
+ background: linear-gradient(135deg, #FFDF33 0%, #FF5722 100%);
19
+ transform: translateY(-2px);
20
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3);
21
+ border: 1px solid black;
22
+ }
23
+
24
+ /* Download buttons - green/blue gradient */
25
+ .stDownloadButton button {
26
+ width: 100%;
27
+ border-radius: 5px;
28
+ height: 3em;
29
+ background: linear-gradient(135deg, #32CD32 0%, #1E90FF 100%);
30
+ color: white !important;
31
+ font-weight: bold !important;
32
+ transition: all 0.3s ease !important;
33
+ border: 1px solid black !important;
34
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;
35
+ }
36
+
37
+ .stDownloadButton button:hover {
38
+ background: linear-gradient(135deg, #3ED83E 0%, #4169E1 100%);
39
+ transform: translateY(-2px) !important;
40
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
41
+ border: 1px solid black !important;
42
+ }