JeCabrera commited on
Commit
02aec1e
·
verified ·
1 Parent(s): 790edf7

Upload 11 files

Browse files
README.md CHANGED
@@ -1,13 +1,28 @@
1
- ---
2
- sdk: streamlit
3
- colorFrom: yellow
4
- colorTo: gray
5
- pinned: true
6
- title: Perfect Webinar CopyXpert 1G
7
- license: afl-3.0
8
- emoji: ⚡
9
- thumbnail: >-
10
- https://cdn-uploads.huggingface.co/production/uploads/66c41fa62777c050701989a9/OEls58L2rZkpSDJvRmESs.png
11
- short_description: Conjure enchanting titles effortlessly with AI Magic
12
- sdk_version: 1.44.0
13
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ sdk: streamlit
3
+ colorFrom: yellow
4
+ colorTo: gray
5
+ pinned: false
6
+ title: Multi hookgenerator 2 Reto RoboCopy 2G
7
+ license: afl-3.0
8
+ emoji: ⚡
9
+ thumbnail: >-
10
+ https://cdn-uploads.huggingface.co/production/uploads/66c41fa62777c050701989a9/D4k6XvaEzAaSJkNb01JTU.png
11
+ short_description: Conjure enchanting titles effortlessly with AI Magic
12
+ sdk_version: 1.44.0
13
+ ---
14
+
15
+ ## Generador de Titulares
16
+
17
+ Este Space utiliza la API de Geminis para generar titulares atractivos basados en los parámetros que proporcionas.
18
+
19
+ ### Cómo Usar
20
+
21
+ 1. Introduce el número de titulares que deseas generar.
22
+ 2. Especifica el público objetivo.
23
+ 3. Proporciona el nombre del producto o servicio.
24
+ 4. Haz clic en "Generar Titulares" para obtener tus titulares.
25
+
26
+ ### Contacto
27
+
28
+ Para más información, revisa la documentación del modelo y la interfaz en Hugging Face.
app.py CHANGED
@@ -1,511 +1,337 @@
1
- from dotenv import load_dotenv
2
- import streamlit as st
3
- import os
4
- import google.generativeai as genai
5
- import random
6
- from streamlit import session_state as state
7
- from formulas import headline_formulas
8
- from angles import angles
9
- from formulas.webinar_formulas import webinar_formulas
10
- from formulas.webinar_names import webinar_names
11
-
12
- # Cargar las variables de entorno
13
- load_dotenv()
14
-
15
- # Configurar la API de Google
16
- genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
17
-
18
- # Fórmulas con ejemplos y explicaciones
19
- # headline_formulas dictionary has been moved to formulas/headline_formulas.py
20
-
21
- def generate_headlines(number_of_headlines, target_audience, product, temperature, selected_formula, selected_angle):
22
- # Crear la configuración del modelo
23
- generation_config = {
24
- "temperature": temperature,
25
- "top_p": 0.65,
26
- "top_k": 360,
27
- "max_output_tokens": 8196,
28
- }
29
-
30
- model = genai.GenerativeModel(
31
- model_name="gemini-2.0-flash",
32
- generation_config=generation_config,
33
- )
34
-
35
- # Incluir las instrucciones del sistema en el prompt principal (en inglés)
36
- system_prompt = f"""You are a world-class copywriter, with expertise in crafting hooks, headlines, and subject lines that immediately capture the reader's attention, prompting them to open the email or continue reading.
37
-
38
- FORMAT RULES:
39
- - Each headline must start with number and period
40
- - One headline per line
41
- - No explanations or categories
42
- - Add a line break between each headline
43
- - Avoid unnecessary : symbols
44
- - Each headline must be a complete and intriguing sentence
45
- - WRITE ALL HEADLINES IN SPANISH
46
-
47
- IMPORTANT ANGLE INSTRUCTIONS:
48
- - The selected angle MUST be applied to EVERY headline
49
- - The angle modifies HOW the formula is expressed, not its structure
50
- - Think of the angle as a "tone overlay" on the formula
51
- - The formula provides the structure, the angle provides the style
52
- - Both must work together seamlessly
53
-
54
- FORMAT EXAMPLE:
55
- 1. Titular 1.
56
-
57
- 2. Titular 2.
58
-
59
- 3. Titular 3.
60
-
61
- 4. Titular 4.
62
-
63
- 5. Titular 5.
64
-
65
- IMPORTANT:
66
- - Each headline must be unique and memorable
67
- - Avoid clichés and generalities
68
- - Maintain an intriguing but credible tone
69
- - Adapt speaking language from the audience
70
- - Focus on transformative benefits
71
- - Follow the selected angle style while maintaining formula structure
72
- - WRITE ALL HEADLINES IN SPANISH"""
73
-
74
- # Iniciar el prompt con las instrucciones del sistema (en inglés)
75
- headlines_instruction = f"{system_prompt}\n\n"
76
-
77
- # Añadir instrucciones de ángulo solo si no es "NINGUNO" (en inglés)
78
- if selected_angle != "NINGUNO":
79
- headlines_instruction += f"""
80
- MAIN ANGLE: {selected_angle}
81
- SPECIFIC ANGLE INSTRUCTIONS:
82
- {angles[selected_angle]["instruction"]}
83
-
84
- IMPORTANT: The {selected_angle} angle should be applied as a "style layer" over the formula structure:
85
- 1. Keep the base structure of the formula intact
86
- 2. Apply the tone and style of the {selected_angle} angle
87
- 3. Ensure that each element of the formula reflects the angle
88
- 4. The angle affects "how" it is said, not "what" is said
89
-
90
- SUCCESSFUL EXAMPLES OF THE {selected_angle} ANGLE:
91
- """
92
- for example in angles[selected_angle]["examples"]:
93
- headlines_instruction += f"- {example}\n"
94
-
95
- headlines_instruction += (
96
- f"\nYour task is to create {number_of_headlines} irresistible headlines IN SPANISH for {target_audience} "
97
- f"that instantly capture attention and generate curiosity about {product}. "
98
- )
99
-
100
- if selected_angle != "NINGUNO":
101
- headlines_instruction += f"IMPORTANTE: Cada titular DEBE seguir el ángulo {selected_angle} de manera clara y consistente.\n\n"
102
-
103
- headlines_instruction += (
104
- f"Evita menciones obvias de {product} y enfócate en despertar interés genuino"
105
- )
106
-
107
- if selected_angle != "NINGUNO":
108
- headlines_instruction += f" usando el ángulo seleccionado"
109
-
110
- headlines_instruction += ".\n\n"
111
-
112
- headlines_instruction += (
113
- f"IMPORTANTE: Estudia cuidadosamente estos ejemplos de la fórmula seleccionada. "
114
- f"Cada ejemplo representa el estilo y estructura a seguir"
115
- )
116
-
117
- if selected_angle != "NINGUNO":
118
- headlines_instruction += f", adaptados al ángulo {selected_angle}"
119
-
120
- headlines_instruction += ":\n\n"
121
-
122
- # Agregar 5 ejemplos aleatorios de la fórmula
123
- random_examples = random.sample(selected_formula['examples'], min(5, len(selected_formula['examples'])))
124
-
125
- headlines_instruction += "EJEMPLOS DE LA FÓRMULA A SEGUIR:\n"
126
- for i, example in enumerate(random_examples, 1):
127
- headlines_instruction += f"{i}. {example}\n"
128
-
129
- headlines_instruction += "\nINSTRUCCIONES ESPECÍFICAS:\n"
130
- headlines_instruction += "1. Mantén la misma estructura y longitud que los ejemplos anteriores\n"
131
- headlines_instruction += "2. Usa el mismo tono y estilo de escritura\n"
132
- headlines_instruction += "3. Replica los patrones de construcción de frases\n"
133
- headlines_instruction += "4. Conserva el nivel de especificidad y detalle\n"
134
- headlines_instruction += f"5. Adapta el contenido para {target_audience} manteniendo la esencia de los ejemplos\n\n"
135
-
136
- headlines_instruction += f"FÓRMULA A SEGUIR:\n{selected_formula['description']}\n\n"
137
-
138
- # CORRECTO (con indentación):
139
- if selected_angle != "NINGUNO":
140
- headlines_instruction += f"""
141
- RECORDATORIO FINAL:
142
- 1. Sigue la estructura de la fórmula seleccionada
143
- 2. Aplica el ángulo como una "capa de estilo"
144
- 3. Mantén la coherencia entre fórmula y ángulo
145
- 4. Asegura que cada titular refleje ambos elementos
146
-
147
- GENERA AHORA:
148
- Crea {number_of_headlines} titulares que sigan fielmente el estilo y estructura de los ejemplos mostrados.
149
- """
150
- else:
151
- headlines_instruction += f"""
152
- GENERA AHORA:
153
- Crea {number_of_headlines} titulares que sigan fielmente el estilo y estructura de los ejemplos mostrados.
154
- """
155
-
156
- # Enviar el mensaje al modelo (en inglés)
157
- chat_session = model.start_chat(
158
- history=[
159
- {
160
- "role": "user",
161
- "parts": [headlines_instruction],
162
- },
163
- ]
164
- )
165
- response = chat_session.send_message("Genera los titulares siguiendo exactamente el estilo de los ejemplos mostrados.")
166
-
167
- return response.text
168
-
169
- # Función para generar nombres de webinars
170
- def generate_webinar_names(number_of_names, target_audience, product, temperature, selected_formula, selected_angle=None):
171
- # Crear la configuración del modelo
172
- generation_config = {
173
- "temperature": temperature,
174
- "top_p": 0.65,
175
- "top_k": 360,
176
- "max_output_tokens": 8196,
177
- }
178
-
179
- model = genai.GenerativeModel(
180
- model_name="gemini-2.0-flash",
181
- generation_config=generation_config,
182
- )
183
-
184
- # Incluir las instrucciones del sistema en el prompt principal
185
- system_prompt = f"""You are a world-class copywriter, with expertise in crafting compelling webinar titles that immediately capture the audience's attention and drive registrations.
186
-
187
- FORMAT RULES:
188
- - Each webinar name must start with number and period
189
- - One webinar name per line
190
- - No explanations or categories
191
- - Add a line break between each name
192
- - Avoid unnecessary : symbols
193
- - Each webinar name must be a complete and intriguing title
194
- - WRITE ALL WEBINAR NAMES IN SPANISH
195
-
196
- FORMAT EXAMPLE:
197
- 1. Nombre del Webinar 1.
198
-
199
- 2. Nombre del Webinar 2.
200
-
201
- 3. Nombre del Webinar 3.
202
-
203
- 4. Nombre del Webinar 4.
204
-
205
- 5. Nombre del Webinar 5.
206
-
207
- IMPORTANT:
208
- - Each webinar name must be unique and memorable
209
- - Avoid clichés and generalities
210
- - Maintain an intriguing but credible tone
211
- - Adapt speaking language from the audience
212
- - Focus on transformative benefits
213
- - Follow the selected formula structure
214
- - WRITE ALL WEBINAR NAMES IN SPANISH"""
215
-
216
- # Iniciar el prompt con las instrucciones del sistema
217
- webinar_names_instruction = f"{system_prompt}\n\n"
218
-
219
- # Añadir instrucciones de ángulo solo si no es "NINGUNO" y se proporcionó un ángulo
220
- if selected_angle and selected_angle != "NINGUNO":
221
- webinar_names_instruction += f"""
222
- MAIN ANGLE: {selected_angle}
223
- SPECIFIC ANGLE INSTRUCTIONS:
224
- {angles[selected_angle]["instruction"]}
225
-
226
- IMPORTANT: The {selected_angle} angle should be applied as a "style layer" over the formula structure:
227
- 1. Keep the base structure of the formula intact
228
- 2. Apply the tone and style of the {selected_angle} angle
229
- 3. Ensure that each element of the formula reflects the angle
230
- 4. The angle affects "how" it is said, not "what" is said
231
-
232
- SUCCESSFUL EXAMPLES OF THE {selected_angle} ANGLE:
233
- """
234
- for example in angles[selected_angle]["examples"]:
235
- webinar_names_instruction += f"- {example}\n"
236
-
237
- webinar_names_instruction += (
238
- f"\nTu tarea es crear {number_of_names} nombres de webinar irresistibles para {target_audience} "
239
- f"que capturen la atención instantáneamente y generen registros para un webinar sobre {product}. "
240
- )
241
-
242
- webinar_names_instruction += (
243
- f"Enfócate en despertar interés genuino y comunicar el valor que obtendrán al registrarse."
244
- )
245
-
246
- webinar_names_instruction += ".\n\n"
247
-
248
- webinar_names_instruction += (
249
- f"IMPORTANTE: Estudia cuidadosamente estos ejemplos de la fórmula seleccionada. "
250
- f"Cada ejemplo representa el estilo y estructura a seguir"
251
- )
252
-
253
- webinar_names_instruction += ":\n\n"
254
-
255
- # Agregar 5 ejemplos aleatorios de la fórmula
256
- random_examples = random.sample(selected_formula['examples'], min(5, len(selected_formula['examples'])))
257
-
258
- webinar_names_instruction += "EJEMPLOS DE LA FÓRMULA A SEGUIR:\n"
259
- for i, example in enumerate(random_examples, 1):
260
- webinar_names_instruction += f"{i}. {example}\n"
261
-
262
- webinar_names_instruction += "\nINSTRUCCIONES ESPECÍFICAS:\n"
263
- webinar_names_instruction += "1. Mantén la misma estructura y longitud que los ejemplos anteriores\n"
264
- webinar_names_instruction += "2. Usa el mismo tono y estilo de escritura\n"
265
- webinar_names_instruction += "3. Replica los patrones de construcción de frases\n"
266
- webinar_names_instruction += "4. Conserva el nivel de especificidad y detalle\n"
267
- webinar_names_instruction += f"5. Adapta el contenido para {target_audience} manteniendo la esencia de los ejemplos\n\n"
268
-
269
- webinar_names_instruction += f"FÓRMULA A SEGUIR:\n{selected_formula['description']}\n\n"
270
-
271
- webinar_names_instruction += f"""
272
- GENERA AHORA:
273
- Crea {number_of_names} nombres de webinar que sigan fielmente el estilo y estructura de los ejemplos mostrados.
274
- """
275
-
276
- # Enviar el mensaje al modelo
277
- chat_session = model.start_chat(
278
- history=[
279
- {
280
- "role": "user",
281
- "parts": [webinar_names_instruction],
282
- },
283
- ]
284
- )
285
- response = chat_session.send_message("Genera los nombres de webinar siguiendo exactamente el estilo de los ejemplos mostrados.")
286
-
287
- return response.text
288
-
289
- def generate_webinar_script(audience, topic, temperature, selected_formula):
290
- # Crear la configuración del modelo
291
- generation_config = {
292
- "temperature": temperature,
293
- "top_p": 0.65,
294
- "top_k": 360,
295
- "max_output_tokens": 8196,
296
- }
297
-
298
- model = genai.GenerativeModel(
299
- model_name="gemini-2.0-flash",
300
- generation_config=generation_config,
301
- )
302
-
303
- # Incluir las instrucciones del sistema en el prompt principal (en inglés)
304
- system_prompt = f"""You are a world-class webinar script writer, with expertise in crafting persuasive and engaging webinar scripts that convert audience into customers.
305
-
306
- FORMAT RULES:
307
- - Create a complete webinar script with clear sections
308
- - Use markdown formatting for headings and structure
309
- - Include specific talking points for each section
310
- - Write in a conversational, engaging tone
311
- - Include persuasive elements and calls to action
312
- - Follow the selected webinar framework structure exactly
313
- - WRITE THE ENTIRE SCRIPT IN SPANISH
314
-
315
- IMPORTANT:
316
- - The script must be comprehensive and ready to use
317
- - Include specific examples and stories relevant to the topic
318
- - Maintain a persuasive but authentic tone
319
- - Adapt language to match the target audience
320
- - Focus on transformative benefits and clear value proposition
321
- - Follow the selected formula structure precisely
322
- - WRITE THE ENTIRE SCRIPT IN SPANISH"""
323
-
324
- # Iniciar el prompt con las instrucciones del sistema (en inglés)
325
- webinar_script_instruction = f"{system_prompt}\n\n"
326
-
327
- webinar_script_instruction += (
328
- f"\nYour task is to create a complete webinar script IN SPANISH for {audience} "
329
- f"about {topic} that is persuasive and converts the audience into customers. "
330
- )
331
-
332
- webinar_script_instruction += (
333
- f"The script must follow exactly the structure of the framework '{selected_formula['description']}' "
334
- f"and must include all the necessary elements for a successful webinar."
335
- )
336
-
337
- webinar_script_instruction += "\n\n"
338
-
339
- webinar_script_instruction += "WEBINAR STRUCTURE TO FOLLOW:\n"
340
- for i, step in enumerate(selected_formula['structure'], 1):
341
- webinar_script_instruction += f"{i}. {step}\n"
342
-
343
- webinar_script_instruction += "\n\nEXAMPLES OF SUCCESSFUL WEBINARS WITH THIS STRUCTURE:\n"
344
- for i, example in enumerate(selected_formula['examples'], 1):
345
- webinar_script_instruction += f"{i}. {example}\n"
346
-
347
- webinar_script_instruction += f"""
348
- SPECIFIC INSTRUCTIONS:
349
- 1. Create a complete script that follows exactly the provided structure
350
- 2. Include persuasive elements and clear calls to action
351
- 3. Adapt the language and examples specifically for {audience}
352
- 4. Focus on the transformative benefits of {topic}
353
- 5. Include relevant stories and examples that reinforce your points
354
- 6. Use a conversational but professional tone
355
- 7. Make sure each section fulfills its specific purpose in the framework
356
- 8. IMPORTANT: Write the entire script in Spanish
357
-
358
- GENERATE NOW:
359
- Create a complete webinar script following faithfully the structure of the selected framework.
360
- """
361
-
362
- # Enviar el mensaje al modelo (en inglés)
363
- chat_session = model.start_chat(
364
- history=[
365
- {
366
- "role": "user",
367
- "parts": [webinar_script_instruction],
368
- },
369
- ]
370
- )
371
- response = chat_session.send_message("Generate the webinar script IN SPANISH following exactly the provided structure. All content must be in Spanish.")
372
-
373
- return response.text
374
-
375
- # Configurar la interfaz de usuario con Streamlit
376
- st.set_page_config(page_title="Perfect Webinar Framework", layout="wide")
377
-
378
- # Leer el contenido del archivo manual.md
379
- with open("manual.md", "r", encoding="utf-8") as file:
380
- manual_content = file.read()
381
-
382
- # Mostrar el contenido del manual en el sidebar
383
- st.sidebar.markdown(manual_content)
384
-
385
- # Crear pestañas para la interfaz
386
- tab1, tab2 = st.tabs(["Guiones de Webinar", "Nombres de Webinar"])
387
-
388
- # Primera pestaña - Generador de Guiones de Webinar
389
- with tab1:
390
- tab1.subheader("Script Webinar")
391
-
392
- # Crear columnas para la interfaz
393
- col1, col2 = tab1.columns([1, 2])
394
-
395
- # Columna de entrada
396
- with col1:
397
- webinar_script_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="webinar_script_audience")
398
- webinar_script_product = st.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key="webinar_script_product")
399
-
400
- selected_webinar_formula_key = st.selectbox(
401
- "Selecciona un framework de webinar",
402
- options=list(webinar_formulas.keys()),
403
- key="webinar_formula"
404
- )
405
-
406
- submit_webinar_script = st.button("Generar Guión de Webinar")
407
-
408
- # Opciones avanzadas
409
- with st.expander("Personaliza tu guión de webinar"):
410
- webinar_script_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_script_temp")
411
-
412
- selected_webinar_formula = webinar_formulas[selected_webinar_formula_key]
413
-
414
- # Mostrar la estructura del webinar seleccionado
415
- st.markdown("### Estructura del webinar:")
416
- for i, step in enumerate(selected_webinar_formula["structure"], 1):
417
- st.markdown(f"{i}. {step}")
418
-
419
- # Generar y mostrar el guión
420
- if submit_webinar_script:
421
- # Validar entradas
422
- has_webinar_script_product = webinar_script_product.strip() != ""
423
- has_webinar_script_audience = webinar_script_audience.strip() != ""
424
-
425
- valid_webinar_script_inputs = has_webinar_script_product and has_webinar_script_audience
426
-
427
- if valid_webinar_script_inputs:
428
- try:
429
- # Usar el spinner directamente en col2 con show_time=True
430
- with col2:
431
- with st.spinner("Generando tu guión de webinar...", show_time=True):
432
- generated_webinar_script = generate_webinar_script(
433
- webinar_script_audience,
434
- webinar_script_product,
435
- webinar_script_temperature,
436
- selected_webinar_formula
437
- )
438
-
439
- # Mostrar resultados después del spinner en la misma columna
440
- st.subheader("Tu guión de webinar:")
441
- st.markdown(generated_webinar_script)
442
- except ValueError as e:
443
- col2.error(f"Error: {str(e)}")
444
- else:
445
- col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
446
-
447
- # Segunda pestaña - Generador de Nombres de Webinar
448
- with tab2:
449
- tab2.subheader("Nombres de Webinar")
450
-
451
- # Crear columnas para la interfaz
452
- col1, col2 = tab2.columns([1, 2])
453
-
454
- # Columna de entrada
455
- with col1:
456
- webinar_name_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="webinar_name_audience")
457
- webinar_name_product = st.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key="webinar_name_product")
458
- 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")
459
-
460
- selected_webinar_name_formula_key = st.selectbox(
461
- "Selecciona una fórmula para tus nombres de webinar",
462
- options=list(webinar_names.keys()),
463
- key="webinar_name_formula"
464
- )
465
-
466
- submit_webinar_names = st.button("Generar Nombres de Webinar")
467
-
468
- # Opciones avanzadas
469
- with st.expander("Personaliza tus nombres de webinar"):
470
- webinar_name_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_name_temp")
471
-
472
- # Configurar opciones de ángulo
473
- angle_keys = ["NINGUNO"] + sorted([key for key in angles.keys() if key != "NINGUNO"])
474
- selected_angle = st.selectbox(
475
- "Selecciona el ángulo para tus nombres",
476
- options=angle_keys,
477
- key="webinar_name_angle"
478
- )
479
-
480
- selected_webinar_name_formula = webinar_names[selected_webinar_name_formula_key]
481
-
482
- # Generar y mostrar los nombres
483
- if submit_webinar_names:
484
- # Validar entradas
485
- has_webinar_name_product = webinar_name_product.strip() != ""
486
- has_webinar_name_audience = webinar_name_audience.strip() != ""
487
-
488
- valid_webinar_name_inputs = has_webinar_name_product and has_webinar_name_audience
489
-
490
- if valid_webinar_name_inputs:
491
- try:
492
- # Usar el spinner directamente en col2 con show_time=True
493
- with col2:
494
- with st.spinner("Generando tus nombres de webinar...", show_time=True):
495
- generated_webinar_names = generate_webinar_names(
496
- number_of_names,
497
- webinar_name_audience,
498
- webinar_name_product,
499
- webinar_name_temperature,
500
- selected_webinar_name_formula,
501
- selected_angle
502
- )
503
-
504
- # Mostrar resultados después del spinner en la misma columna
505
- st.subheader("Tus nombres de webinar:")
506
- st.markdown(generated_webinar_names)
507
- except ValueError as e:
508
- col2.error(f"Error: {str(e)}")
509
- else:
510
- col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
511
-
 
1
+ from dotenv import load_dotenv
2
+ import streamlit as st
3
+ import os
4
+ import google.generativeai as genai
5
+ import random
6
+ from streamlit import session_state as state
7
+ from angles import angles
8
+ from formulas.webinar_formulas import webinar_formulas
9
+ from formulas.webinar_name_formulas import webinar_name_formulas
10
+ from formulas.angles_webinar_names import angles_webinar_names
11
+
12
+ # Cargar las variables de entorno
13
+ load_dotenv()
14
+
15
+ # Configurar la API de Google
16
+ genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
17
+
18
+ # Función para crear la configuración del modelo (evita duplicación)
19
+ def create_model_config(temperature):
20
+ return {
21
+ "temperature": temperature,
22
+ "top_p": 0.65,
23
+ "top_k": 360,
24
+ "max_output_tokens": 8196,
25
+ }
26
+
27
+ # Función para inicializar el modelo
28
+ def initialize_model(temperature):
29
+ config = create_model_config(temperature)
30
+ return genai.GenerativeModel(
31
+ model_name="gemini-2.0-flash",
32
+ generation_config=config,
33
+ )
34
+
35
+ # Función para generar nombres de webinars
36
+ def generate_webinar_names(number_of_names, target_audience, product, temperature, selected_formula, selected_angle=None):
37
+ model = initialize_model(temperature)
38
+
39
+ # Incluir las instrucciones del sistema en el prompt principal
40
+ 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.
41
+
42
+ FORMAT RULES:
43
+ - Each webinar name must start with number and period
44
+ - One webinar name per line
45
+ - No explanations or categories
46
+ - Add a line break between each name
47
+ - Avoid unnecessary : symbols
48
+ - Each webinar name must be a complete and intriguing title
49
+ - WRITE ALL WEBINAR NAMES IN SPANISH
50
+
51
+ FORMAT EXAMPLE:
52
+ 1. Nombre del Webinar 1.
53
+
54
+ 2. Nombre del Webinar 2.
55
+
56
+ 3. Nombre del Webinar 3.
57
+
58
+ 4. Nombre del Webinar 4.
59
+
60
+ 5. Nombre del Webinar 5.
61
+
62
+ IMPORTANT:
63
+ - Each webinar name must be unique and memorable
64
+ - Avoid clichés and generalities
65
+ - Maintain an intriguing but credible tone
66
+ - Adapt speaking language from the audience
67
+ - Focus on transformative benefits
68
+ - Follow the selected formula structure
69
+ - WRITE ALL WEBINAR NAMES IN SPANISH"""
70
+
71
+ # Iniciar el prompt con las instrucciones del sistema
72
+ webinar_names_instruction = f"{system_prompt}\n\n"
73
+
74
+ # Añadir instrucciones de ángulo solo si no es "NINGUNO" y se proporcionó un ángulo
75
+ if selected_angle and selected_angle != "NINGUNO":
76
+ webinar_names_instruction += f"""
77
+ MAIN ANGLE: {selected_angle}
78
+ SPECIFIC ANGLE INSTRUCTIONS:
79
+ {angles_webinar_names[selected_angle]["instruction"]}
80
+
81
+ IMPORTANT: The {selected_angle} angle should be applied as a "style layer" over the formula structure:
82
+ 1. Keep the base structure of the formula intact
83
+ 2. Apply the tone and style of the {selected_angle} angle
84
+ 3. Ensure that each element of the formula reflects the angle
85
+ 4. The angle affects "how" it is said, not "what" is said
86
+
87
+ SUCCESSFUL EXAMPLES OF THE {selected_angle} ANGLE:
88
+ """
89
+ for example in angles_webinar_names[selected_angle]["examples"]:
90
+ webinar_names_instruction += f"- {example}\n"
91
+
92
+ # Instrucciones específicas para la tarea
93
+ webinar_names_instruction += (
94
+ f"\nYour task is to create {number_of_names} irresistible webinar names for {target_audience} "
95
+ f"that instantly capture attention and generate registrations for a webinar about {product}. "
96
+ f"Focus on awakening genuine interest and communicating the value they will get by registering."
97
+ f"\n\n"
98
+ f"IMPORTANT: Carefully study these examples of the selected formula. "
99
+ f"Each example represents the style and structure to follow"
100
+ f":\n\n"
101
+ )
102
+
103
+ # Agregar ejemplos aleatorios de la fórmula (keeping examples in Spanish)
104
+ random_examples = random.sample(selected_formula['examples'], min(5, len(selected_formula['examples'])))
105
+ webinar_names_instruction += "EXAMPLES OF THE FORMULA TO FOLLOW:\n"
106
+ for i, example in enumerate(random_examples, 1):
107
+ webinar_names_instruction += f"{i}. {example}\n"
108
+
109
+ # Instrucciones específicas (translated to English)
110
+ webinar_names_instruction += "\nSPECIFIC INSTRUCTIONS:\n"
111
+ webinar_names_instruction += "1. Maintain the same structure and length as the previous examples\n"
112
+ webinar_names_instruction += "2. Use the same tone and writing style\n"
113
+ webinar_names_instruction += "3. Replicate the phrase construction patterns\n"
114
+ webinar_names_instruction += "4. Preserve the level of specificity and detail\n"
115
+ webinar_names_instruction += f"5. Adapt the content for {target_audience} while maintaining the essence of the examples\n\n"
116
+ webinar_names_instruction += f"FORMULA TO FOLLOW:\n{selected_formula['description']}\n\n"
117
+ webinar_names_instruction += f"""
118
+ GENERATE NOW:
119
+ Create {number_of_names} webinar names that faithfully follow the style and structure of the examples shown.
120
+ """
121
+
122
+ # Enviar el mensaje al modelo
123
+ chat_session = model.start_chat(
124
+ history=[
125
+ {
126
+ "role": "user",
127
+ "parts": [webinar_names_instruction],
128
+ },
129
+ ]
130
+ )
131
+ response = chat_session.send_message("Genera los nombres de webinar siguiendo exactamente el estilo de los ejemplos mostrados.")
132
+
133
+ return response.text
134
+
135
+ def generate_webinar_script(audience, topic, temperature, selected_formula):
136
+ model = initialize_model(temperature)
137
+
138
+ # Incluir las instrucciones del sistema en el prompt principal
139
+ system_prompt = """You are a world-class webinar script writer, with expertise in crafting persuasive and engaging webinar scripts that convert audience into customers.
140
+
141
+ FORMAT RULES:
142
+ - Create a complete webinar script with clear sections
143
+ - Use markdown formatting for headings and structure
144
+ - Include specific talking points for each section
145
+ - Write in a conversational, engaging tone
146
+ - Include persuasive elements and calls to action
147
+ - Follow the selected webinar framework structure exactly
148
+ - WRITE THE ENTIRE SCRIPT IN SPANISH
149
+
150
+ IMPORTANT:
151
+ - The script must be comprehensive and ready to use
152
+ - Include specific examples and stories relevant to the topic
153
+ - Maintain a persuasive but authentic tone
154
+ - Adapt language to match the target audience
155
+ - Focus on transformative benefits and clear value proposition
156
+ - Follow the selected formula structure precisely
157
+ - WRITE THE ENTIRE SCRIPT IN SPANISH"""
158
+
159
+ # Iniciar el prompt con las instrucciones del sistema
160
+ webinar_script_instruction = f"{system_prompt}\n\n"
161
+
162
+ # Instrucciones específicas para la tarea
163
+ webinar_script_instruction += (
164
+ f"\nYour task is to create a complete webinar script IN SPANISH for {audience} "
165
+ f"about {topic} that is persuasive and converts the audience into customers. "
166
+ f"The script must follow exactly the structure of the framework '{selected_formula['description']}' "
167
+ f"and must include all the necessary elements for a successful webinar."
168
+ f"\n\n"
169
+ )
170
+
171
+ # Estructura del webinar
172
+ webinar_script_instruction += "WEBINAR STRUCTURE TO FOLLOW:\n"
173
+ for i, step in enumerate(selected_formula['structure'], 1):
174
+ webinar_script_instruction += f"{i}. {step}\n"
175
+
176
+ # Ejemplos de webinars exitosos
177
+ webinar_script_instruction += "\n\nEXAMPLES OF SUCCESSFUL WEBINARS WITH THIS STRUCTURE:\n"
178
+ for i, example in enumerate(selected_formula['examples'], 1):
179
+ webinar_script_instruction += f"{i}. {example}\n"
180
+
181
+ # Instrucciones específicas
182
+ webinar_script_instruction += f"""
183
+ SPECIFIC INSTRUCTIONS:
184
+ 1. Create a complete script that follows exactly the provided structure
185
+ 2. Include persuasive elements and clear calls to action
186
+ 3. Adapt the language and examples specifically for {audience}
187
+ 4. Focus on the transformative benefits of {topic}
188
+ 5. Include relevant stories and examples that reinforce your points
189
+ 6. Use a conversational but professional tone
190
+ 7. Make sure each section fulfills its specific purpose in the framework
191
+ 8. IMPORTANT: Write the entire script in Spanish
192
+
193
+ GENERATE NOW:
194
+ Create a complete webinar script following faithfully the structure of the selected framework.
195
+ """
196
+
197
+ # Enviar el mensaje al modelo
198
+ chat_session = model.start_chat(
199
+ history=[
200
+ {
201
+ "role": "user",
202
+ "parts": [webinar_script_instruction],
203
+ },
204
+ ]
205
+ )
206
+ response = chat_session.send_message("Generate the webinar script IN SPANISH following exactly the provided structure. All content must be in Spanish.")
207
+
208
+ return response.text
209
+
210
+ # Función para validar entradas (evita duplicación)
211
+ def validate_inputs(audience, product):
212
+ has_audience = audience.strip() != ""
213
+ has_product = product.strip() != ""
214
+ return has_audience and has_product
215
+
216
+ # Función para mostrar resultados (evita duplicación)
217
+ def display_results(col, title, content, spinner_text):
218
+ with col:
219
+ with st.spinner(spinner_text, show_time=True):
220
+ result = content
221
+ st.subheader(title)
222
+ st.markdown(result)
223
+ return result
224
+
225
+ # Configurar la interfaz de usuario con Streamlit
226
+ st.set_page_config(page_title="Perfect Webinar Framework", layout="wide")
227
+
228
+ # Leer el contenido del archivo manual.md
229
+ with open("manual.md", "r", encoding="utf-8") as file:
230
+ manual_content = file.read()
231
+
232
+ # Mostrar el contenido del manual en el sidebar
233
+ st.sidebar.markdown(manual_content)
234
+
235
+ # Crear pestañas para la interfaz
236
+ tab1, tab2 = st.tabs(["Guiones de Webinar", "Nombres de Webinar"])
237
+
238
+ # Primera pestaña - Generador de Guiones de Webinar
239
+ with tab1:
240
+ tab1.subheader("Script Webinar")
241
+
242
+ # Crear columnas para la interfaz
243
+ col1, col2 = tab1.columns([1, 2])
244
+
245
+ # Columna de entrada
246
+ with col1:
247
+ webinar_script_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="webinar_script_audience")
248
+ webinar_script_product = st.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key="webinar_script_product")
249
+
250
+ selected_webinar_formula_key = st.selectbox(
251
+ "Selecciona un framework de webinar",
252
+ options=list(webinar_formulas.keys()),
253
+ key="webinar_formula"
254
+ )
255
+
256
+ submit_webinar_script = st.button("Generar Guión de Webinar")
257
+
258
+ # Opciones avanzadas
259
+ with st.expander("Personaliza tu guión de webinar"):
260
+ webinar_script_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_script_temp")
261
+
262
+ selected_webinar_formula = webinar_formulas[selected_webinar_formula_key]
263
+
264
+ # Mostrar la estructura del webinar seleccionado
265
+ st.markdown("### Estructura del webinar:")
266
+ for i, step in enumerate(selected_webinar_formula["structure"], 1):
267
+ st.markdown(f"{i}. {step}")
268
+
269
+ # Generar y mostrar el guión
270
+ if submit_webinar_script:
271
+ if validate_inputs(webinar_script_audience, webinar_script_product):
272
+ try:
273
+ generated_webinar_script = generate_webinar_script(
274
+ webinar_script_audience,
275
+ webinar_script_product,
276
+ webinar_script_temperature,
277
+ selected_webinar_formula
278
+ )
279
+ display_results(col2, "Tu guión de webinar:", generated_webinar_script, "Generando tu guión de webinar...")
280
+ except ValueError as e:
281
+ col2.error(f"Error: {str(e)}")
282
+ else:
283
+ col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
284
+
285
+ # Segunda pestaña - Generador de Nombres de Webinar
286
+ with tab2:
287
+ tab2.subheader("Nombres de Webinar")
288
+
289
+ # Crear columnas para la interfaz
290
+ col1, col2 = tab2.columns([1, 2])
291
+
292
+ # Columna de entrada
293
+ with col1:
294
+ webinar_name_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="webinar_name_audience")
295
+ webinar_name_product = st.text_input("¿Sobre qué tema es tu webinar?", placeholder="Ejemplo: Marketing en redes sociales", key="webinar_name_product")
296
+ 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")
297
+
298
+ selected_webinar_name_formula_key = st.selectbox(
299
+ "Selecciona una fórmula para tus nombres de webinar",
300
+ options=list(webinar_name_formulas.keys()),
301
+ key="webinar_name_formula"
302
+ )
303
+
304
+ submit_webinar_names = st.button("Generar Nombres de Webinar")
305
+
306
+ # Opciones avanzadas
307
+ with st.expander("Personaliza tus nombres de webinar"):
308
+ webinar_name_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="webinar_name_temp")
309
+
310
+ # Configurar opciones de ángulo
311
+ angle_keys = ["NINGUNO"] + sorted([key for key in angles_webinar_names.keys() if key != "NINGUNO"])
312
+ selected_angle = st.selectbox(
313
+ "Selecciona el ángulo para tus nombres",
314
+ options=angle_keys,
315
+ key="webinar_name_angle"
316
+ )
317
+
318
+ selected_webinar_name_formula = webinar_name_formulas[selected_webinar_name_formula_key]
319
+
320
+ # Generar y mostrar los nombres
321
+ if submit_webinar_names:
322
+ if validate_inputs(webinar_name_audience, webinar_name_product):
323
+ try:
324
+ generated_webinar_names = generate_webinar_names(
325
+ number_of_names,
326
+ webinar_name_audience,
327
+ webinar_name_product,
328
+ webinar_name_temperature,
329
+ selected_webinar_name_formula,
330
+ selected_angle if selected_angle != "NINGUNO" else None
331
+ )
332
+ display_results(col2, "Tus nombres de webinar:", generated_webinar_names, "Generando tus nombres de webinar...")
333
+ except ValueError as e:
334
+ col2.error(f"Error: {str(e)}")
335
+ else:
336
+ col2.error("Por favor, proporciona el público objetivo y el tema del webinar.")
337
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
formulas/angles_webinar_names.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ángulos para nombres de webinar
2
+ angles_webinar_names = {
3
+ "Exclusividad": {
4
+ "instruction": """
5
+ Enfatiza la naturaleza exclusiva, limitada o restringida del webinar.
6
+ Destaca que es una oportunidad única o que solo está disponible para un grupo selecto.
7
+ Crea sensación de privilegio y acceso especial.
8
+ """,
9
+ "examples": [
10
+ "Acceso Exclusivo: Estrategias de inversión que solo conoce el 1% más rico",
11
+ "Solo Para 100 Personas: El método secreto de copywriting que triplicará tus ventas",
12
+ "Webinar Privado: Las 5 tácticas de SEO que Google no quiere que conozcas",
13
+ "Acceso VIP: Descubre el sistema de productividad de los CEOs más exitosos"
14
+ ]
15
+ },
16
+ "Urgencia": {
17
+ "instruction": """
18
+ Crea una sensación de tiempo limitado o oportunidad que se desvanece.
19
+ Enfatiza que actuar rápido es esencial para no perderse los beneficios.
20
+ Utiliza elementos temporales como fechas límite o disponibilidad limitada.
21
+ """,
22
+ "examples": [
23
+ "Última Oportunidad: Cómo crear un embudo de ventas que convierte al 15%",
24
+ "Solo Esta Semana: Masterclass sobre cómo lanzar tu podcast exitoso desde cero",
25
+ "Antes Del Cambio De Algoritmo: Estrategias de TikTok que aún funcionan",
26
+ "Webinar Único: La estrategia de email marketing que desaparecerá en 2023"
27
+ ]
28
+ },
29
+ "Transformación": {
30
+ "instruction": """
31
+ Enfoca el nombre en el cambio dramático o la transformación que experimentará el asistente.
32
+ Destaca el contraste entre la situación actual y el resultado después del webinar.
33
+ Utiliza palabras que evoquen metamorfosis, evolución o cambio radical.
34
+ """,
35
+ "examples": [
36
+ "De Principiante a Experto: Domina WordPress en un solo webinar",
37
+ "Transforma tu Negocio: El sistema que convierte seguidores en clientes fieles",
38
+ "Reinventa tu Carrera: Cómo pasar de empleado a consultor independiente en 90 días",
39
+ "Evoluciona tu Marketing: El nuevo paradigma de las ventas digitales"
40
+ ]
41
+ },
42
+ "Curiosidad": {
43
+ "instruction": """
44
+ Crea intriga y despierta la curiosidad sin revelar completamente el contenido.
45
+ Utiliza preguntas intrigantes o afirmaciones sorprendentes.
46
+ Sugiere información valiosa sin revelarla completamente.
47
+ """,
48
+ "examples": [
49
+ "El Secreto Mejor Guardado: Lo que los gurús de marketing nunca te dirán",
50
+ "¿Por Qué El 90% Falla? Descubre el factor invisible del éxito empresarial",
51
+ "La Estrategia Contraintuitiva que está revolucionando las ventas online",
52
+ "Lo Que Descubrí Analizando 1000 Campañas Exitosas (y nadie más sabe)"
53
+ ]
54
+ },
55
+ "Transformación y Resultados": {
56
+ "instruction": """
57
+ Enfatiza la transformación y los resultados concretos que obtendrá la audiencia.
58
+ Destaca el cambio de estado y los beneficios tangibles.
59
+ Utiliza métricas, tiempos específicos y promesas claras de resultados.
60
+ """,
61
+ "examples": [
62
+ "Cómo [Lograr Resultado Deseado] en [Periodo de Tiempo] sin [Obstáculo Común]",
63
+ "El método de [Número] pasos para [Resultado Transformador] incluso si [Limitación]",
64
+ "La fórmula probada para [Beneficio Principal] en solo [Tiempo Corto]",
65
+ "Descubre cómo [Audiencia] están [Resultado Impresionante] utilizando este [Sistema/Método]",
66
+ "El camino definitivo hacia [Resultado Deseado]: [Número] estrategias que funcionan"
67
+ ]
68
+ },
69
+ "Secretos y Revelaciones": {
70
+ "instruction": """
71
+ Sugiere información privilegiada o poco conocida que será revelada.
72
+ Crea la sensación de acceder a conocimiento exclusivo o restringido.
73
+ Utiliza palabras como "secreto", "revelado", "descubierto" para generar interés.
74
+ """,
75
+ "examples": [
76
+ "Los [Número] secretos que [Expertos/Competencia] no quieren que sepas sobre [Tema]",
77
+ "Revelado: El método oculto para [Resultado] que [Autoridad] ha estado guardando",
78
+ "La verdad no contada sobre [Tema/Industria]: Cómo [Beneficio] sin [Método Tradicional]",
79
+ "Por fin al descubierto: El sistema [Nombre] para [Resultado] que revoluciona [Industria]",
80
+ "Secretos internos: Cómo [Audiencia] están silenciosamente [Resultado] mientras otros [Problema]"
81
+ ]
82
+ },
83
+ "Masterclass y Autoridad": {
84
+ "instruction": """
85
+ Posiciona el webinar como una clase magistral impartida por una autoridad.
86
+ Enfatiza el nivel avanzado del contenido y la experiencia del presentador.
87
+ Utiliza términos como "masterclass", "experto", "profesional" para elevar la percepción.
88
+ """,
89
+ "examples": [
90
+ "Masterclass: [Tema] - Cómo [Resultado Principal] como un verdadero profesional",
91
+ "[Tema] Masterclass: El método [Nombre] para [Transformación] en [Tiempo]",
92
+ "Masterclass exclusiva: [Número] estrategias avanzadas para [Objetivo] que solo los expertos conocen",
93
+ "Masterclass [Tema]: De principiante a experto en [Tiempo] con el sistema [Nombre]",
94
+ "La Masterclass definitiva de [Tema]: Domina [Habilidad] y [Resultado]"
95
+ ]
96
+ },
97
+ "Caso de Estudio y Prueba Social": {
98
+ "instruction": """
99
+ Utiliza casos de estudio y pruebas sociales como gancho principal.
100
+ Demuestra resultados reales a través de ejemplos concretos y verificables.
101
+ Enfatiza la transformación de situaciones específicas como evidencia de efectividad.
102
+ """,
103
+ "examples": [
104
+ "Caso de estudio: Cómo [Persona/Empresa] pasó de [Situación Inicial] a [Resultado] en [Tiempo]",
105
+ "Caso de estudio en vivo: El método exacto que usó [Persona] para [Resultado]",
106
+ "Cómo [Cliente] logró [Resultado Impresionante] sin [Método Tradicional] - Caso de estudio completo",
107
+ "[Número] casos de estudio revelados: La fórmula común que transformó [Problema] en [Solución]",
108
+ "De [Situación Negativa] a [Situación Positiva]: El caso de estudio de [Persona/Empresa] al descubierto"
109
+ ]
110
+ },
111
+ "Urgencia y Escasez": {
112
+ "instruction": """
113
+ Crea un sentido de urgencia o escasez para motivar la participación inmediata.
114
+ Enfatiza la naturaleza limitada de la oportunidad, ya sea en tiempo o plazas.
115
+ Utiliza términos como "última oportunidad", "acceso limitado", "evento único" para impulsar la acción.
116
+ """,
117
+ "examples": [
118
+ "Evento único: [Tema] - La oportunidad que solo aparece una vez para [Resultado]",
119
+ "Última oportunidad: El webinar de [Tema] que cambiará tu [Área] para siempre",
120
+ "Acceso limitado: [Tema] - Solo [Número] personas descubrirán cómo [Resultado]",
121
+ "Webinar especial por tiempo limitado: La fórmula [Nombre] para [Resultado]",
122
+ "Evento irrepetible: Cómo [Resultado] antes de que [Consecuencia Negativa/Deadline]"
123
+ ]
124
+ }
125
+ }
formulas/webinar_name_formulas.py ADDED
@@ -0,0 +1,402 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Fórmulas con ejemplos y explicaciones
2
+ webinar_name_formulas = {
3
+ "GPS": {
4
+ "description": """
5
+ La fórmula GPS (Goal-Period-Solution) crea titulares persuasivos mezclando humor y seriedad, usando lenguaje simple y directo:
6
+
7
+ 1. **Meta** (Goal):
8
+ ¿Qué desea lograr el lector?
9
+ - Resultado deseable
10
+ - Transformación llamativa
11
+ - Logro interesante
12
+ - Mejora notable
13
+
14
+ 2. **Periodo** (Period):
15
+ ¿En qué marco temporal?
16
+ - Momento cotidiano
17
+ - Rutina diaria
18
+ - Actividad común
19
+ - Situación familiar
20
+
21
+ 3. **Superación de Obstáculo** (Solution):
22
+ Conectores variados con toque de humor:
23
+ - sin (ausencia)
24
+ - incluso si (desafío)
25
+ - aunque (contraste)
26
+ - a pesar de (adversidad)
27
+ - cuando (circunstancia)
28
+ - aun con (limitación)
29
+ - mientras (simultaneidad)
30
+ - por más que (intensidad)
31
+
32
+ El titular debe ser comprensible y ocasionalmente divertido.
33
+ """,
34
+ "examples": [
35
+ # Humor + Cotidiano
36
+ "Domina el arte de la inversión mientras te cepillas los dientes incluso si confundes Excel con PowerPoint",
37
+
38
+ # Situación Graciosa
39
+ "Aprende un nuevo idioma durante tus visitas al baño aunque solo sepas decir gracias y por favor",
40
+
41
+ # Exageración Divertida
42
+ "Conquista el miedo a hablar en público durante el desayuno a pesar de que te tiemblen hasta las pestañas",
43
+
44
+ # Contraste Humorístico
45
+ "Desarrolla músculos preparando café cuando levantar la taza te parece ejercicio extremo",
46
+
47
+ # Situación Relatable
48
+ "Domina la fotografía profesional en el supermercado aun con ese celular que sobrevivió tres caídas",
49
+
50
+ # Humor Cotidiano
51
+ "Cultiva un huerto mientras contestas emails aunque tu única planta sobreviviente sea de plástico",
52
+
53
+ # Autorreferencial
54
+ "Escribe tu bestseller mientras te duchas por más que tu gato sea tu único fan",
55
+
56
+ # Situación Común
57
+ "Aprende meditación lavando platos ni siquiera necesitas ponerte en pose pretzel",
58
+
59
+ # Exageración
60
+ "Domina el trading paseando al perro incluso si las matemáticas te dan alergia",
61
+
62
+ # Contraste Divertido
63
+ "Transforma tu postura en videollamadas aunque tu silla parezca instrumento de tortura medieval",
64
+
65
+ # Situación Familiar
66
+ "Aprende a tocar la guitarra cocinando aunque tus vecinos amenacen con mudarse",
67
+
68
+ # Humor Autoderrisivo
69
+ "Mejora tu inglés cantando en la ducha a pesar de que suenes como gato en febrero",
70
+
71
+ # Realidad Común
72
+ "Desarrolla tu marca personal haciendo la colada cuando Instagram te parece ciencia espacial",
73
+
74
+ # Situación Real
75
+ "Domina el networking comprando el pan aun con tu talento para olvidar nombres",
76
+
77
+ # Humor + Verdad
78
+ "Construye tu portfolio mientras ves series aunque tu sofá tenga poderes hipnóticos",
79
+
80
+ # Exageración Graciosa
81
+ "Aprende programación jugando con tus hijos por más que tu computadora sea del jurásico",
82
+
83
+ # Situación Cotidiana
84
+ "Domina la cocina saludable ordenando tu escritorio incluso si hervir agua es tu especialidad",
85
+
86
+ # Realidad + Humor
87
+ "Conquista Instagram esperando el metro hasta con fotos de tu almuerzo congelado",
88
+
89
+ # Contraste Gracioso
90
+ "Transforma tu rutina de ejercicios contestando emails incluso si tu idea de deporte es buscar el control remoto",
91
+
92
+ # Humor + Aspiración
93
+ "Desarrolla músculos de acero haciendo las compras aunque las bolsas del super sean tu único peso"
94
+ ]
95
+ },
96
+ "Númerica Suprema": {
97
+ "description": """
98
+ La Fórmula Suprema de Istvanova combina 5 elementos clave más artículos plurales para crear titulares persuasivos:
99
+
100
+ 1. **Artículos Plurales** (Art):
101
+ - Los (para masculino plural)
102
+ - Las (para femenino plural)
103
+ - Dan naturalidad y autoridad al texto
104
+ - Ejemplos: "Los 7 métodos...", "Las 3 técnicas..."
105
+
106
+ 2. **Números** (N):
107
+ - Específicos y creíbles (3, 5, 7, 10...)
108
+ - Crean estructura y expectativas claras
109
+ - Se combinan con artículos: "Los 5...", "Las 3..."
110
+
111
+ 3. **Adjetivo** (A):
112
+ - Emocionales y descriptivos
113
+ - Conectan con deseos/miedos
114
+ - Ejemplos: poderosos, simples, efectivos, revolucionarios
115
+
116
+ 4. **Palabra Clave** (P):
117
+ - Término central del beneficio en plural
118
+ - Fácil de entender y recordar
119
+ - Ejemplos: métodos, estrategias, técnicas, secretos
120
+
121
+ 5. **Razón** (R):
122
+ - Justifica el beneficio
123
+ - Añade credibilidad
124
+ - Conecta con la motivación del lector
125
+
126
+ 6. **Promesa** (P):
127
+ - Resultado específico y medible
128
+ - Timeframe realista
129
+ - Beneficio final atractivo
130
+
131
+ Formatos:
132
+ - Corto: Art plural + N + A + P + P
133
+ - Medio: Art plural + N + A + P + R + P
134
+ - Largo: Art plural + N + A + P + R detallada + P específica
135
+ """,
136
+ "examples": [
137
+ "Los 3 rituales probados para dormir mejor.",
138
+ "Las 5 rutinas efectivas para fortalecer tu core.",
139
+ "Los 7 hábitos esenciales para aumentar productividad.",
140
+ "Las 3 técnicas comprobadas para dormir mejor basadas en neurociencia.",
141
+ "Los 5 movimientos efectivos para fortalecer tu core sin equipamiento.",
142
+ "Las 7 estrategias esenciales para aumentar productividad sin estrés.",
143
+ "Los 3 métodos científicos para dormir mejor basados en los últimos descubrimientos de la neurociencia del sueño que transformarán tus noches.",
144
+ "Las 5 secuencias efectivas para fortalecer tu core descubiertas por fisioterapeutas olímpicos que puedes hacer en casa.",
145
+ "Los 7 sistemas revolucionarios para aumentar productividad desarrollados por CEOs que duplicarán tus resultados."
146
+ ],
147
+ "variaciones_estructura": {
148
+ "básica": "Art plural + N + A + P + P",
149
+ "intermedia": "Art plural + N + A + P + R + P",
150
+ "avanzada": "Art plural + N + A + P + R detallada + P específica"
151
+ },
152
+ "uso_articulos_plurales": {
153
+ "masculino_plural": {
154
+ "artículo": "los",
155
+ "ejemplos_palabras": "métodos, sistemas, pasos, secretos, trucos, hábitos"
156
+ },
157
+ "femenino_plural": {
158
+ "artículo": "las",
159
+ "ejemplos_palabras": "técnicas, estrategias, rutinas, tácticas, claves"
160
+ }
161
+ },
162
+ "consejos_uso": [
163
+ "Usa siempre la forma plural para mayor impacto",
164
+ "Alterna entre 'los' y 'las' según la palabra clave",
165
+ "Mantén coherencia en el género a lo largo del bullet",
166
+ "Combina artículos con números de forma natural",
167
+ "Asegura que la palabra clave esté en plural"
168
+ ]
169
+ },
170
+ "AIDA": {
171
+ "description": """
172
+ La fórmula AIDA se aplica de manera flexible y estratégica, combinando 1-4 elementos para titulares impactantes y naturales:
173
+
174
+ 1. **Atención** (A):
175
+ Ganchos de apertura poderosos:
176
+ - "¿Sabías que...?" + dato sorprendente
177
+ - Mini-historia disruptiva
178
+ - Idea contraintuitiva
179
+ - Descubrimiento inesperado
180
+ - Analogía poderosa
181
+ - "La mayoría no sabe que..."
182
+ - "Contrario a lo que piensas..."
183
+ - "Me sorprendió descubrir que..."
184
+
185
+ 2. **Interés** (I):
186
+ Desarrollo del gancho inicial:
187
+ - Detalles específicos y relevantes
188
+ - Conexión problema-solución inesperada
189
+ - Beneficios únicos y memorables
190
+ - Puente situación actual-resultado
191
+ - "La razón es simple..."
192
+ - "Lo fascinante es que..."
193
+ - "Y lo mejor de todo..."
194
+ - "Lo que hace la diferencia es..."
195
+
196
+ 3. **Deseo** (D):
197
+ Amplificación emocional:
198
+ - Imagen vivida del resultado
199
+ - Experiencia personalizada
200
+ - Prueba social natural
201
+ - Toque de exclusividad
202
+ - Conexión emocional profunda
203
+ - "Imagina poder..."
204
+ - "Piensa cómo sería..."
205
+ - "Esto significa que podrás..."
206
+
207
+ 4. **Acción** (A):
208
+ Cierre natural:
209
+ - Siguiente paso simple
210
+ - Baja fricción para comenzar
211
+ - Gratificación inmediata
212
+ - Primer paso sencillo
213
+ - Seguridad fluida
214
+ - "Pruébalo hoy mismo..."
215
+ - "Comienza con un simple..."
216
+ - "Solo necesitas..."
217
+
218
+ Combinaciones estratégicas:
219
+ - A + I: Para despertar curiosidad y explicar el valor
220
+ - A + D: Para conectar problema con deseo
221
+ - I + D: Para construir deseo desde la lógica
222
+ - I + D + A: Para construir convicción y motivar
223
+ - A + I + D: Para educar, intrigar y crear anhelo
224
+
225
+ Cada titular debe mantener un tono conversacional y evitar parecer una fórmula obvia.
226
+ """,
227
+ "examples": [
228
+ # A (dato sorprendente) + I (conexión) + D (prueba social) + A (paso simple)
229
+ "¿Sabías que el 83% de los emprendedores exitosos dedican menos de 2 horas al día a reuniones? Lo fascinante es que usan un método japonés de gestión que les permite triplicar su productividad, y puedes empezar hoy mismo.",
230
+
231
+ # A (contraintuitivo) + I (beneficio) + D (resultado) + A (inicio)
232
+ "La mayoría no sabe que existe una técnica de ventas basada en videojuegos, está revolucionando el mercado B2B, genera resultados inmediatos y puedes aprenderla en 20 minutos.",
233
+
234
+ # A (disruptivo) + I (detalle) + D (resultado)
235
+ "Contrario a lo que piensas, el momento más productivo del día no es por la mañana, sino durante una ventana de tiempo inesperada que duplicará tu capacidad de concentración.",
236
+
237
+ # A (descubrimiento) + I (solución) + D (prueba)
238
+ "Me sorprendió descubrir que los mejores vendedores nunca memorizan scripts, usan una técnica secreta de improvisación.",
239
+
240
+ # I (método único) + D (transformación) + A (acción)
241
+ "Esta técnica revolucionaria de aprendizaje está transformando cómo los profesionales dominan nuevas habilidades, pruébala hoy con solo 10 minutos.",
242
+
243
+ # I (innovación) + D (beneficio) + A (inicio)
244
+ "El método del empresario silencioso cambia las reglas del networking moderno, empieza con un simple ejercicio.",
245
+
246
+ # A (pregunta gancho) + D (resultado) + A (implementación)
247
+ "¿Sabías que existe un ritual zen que está transformando la productividad en Silicon Valley? Implementalo mañana mismo.",
248
+
249
+ # A (analogía) + D (promesa) + A (descubrimiento)
250
+ "Como el bambú japonés, este método crece silenciosamente hasta que explota en resultados, descubre cómo en 5 minutos.",
251
+
252
+ # A (mayoría) + I (validación) + A (acción)
253
+ "La mayoría desconoce el mejor momento para tomar decisiones importantes, la ciencia lo confirma, implementa este descubrimiento hoy.",
254
+
255
+ # A (mini-cambio) + I (resultado) + A (inicio)
256
+ "Un pequeño cambio en tu rutina de email desencadenará mejoras exponenciales, comienza ahora.",
257
+
258
+ # A + I + D + A (metáfora natural)
259
+ "Como el bambú japonés, este método crece invisible hasta explotar en resultados que transformarán tu negocio",
260
+
261
+ # A + I + D + A (analogía deportiva)
262
+ "Los atletas olímpicos entrenan menos horas pero logran más que sus rivales gracias a esta técnica de productividad japonesa",
263
+
264
+ # A + I + D (metáfora de naturaleza)
265
+ "Al igual que las abejas construyen colmenas perfectas, este sistema organiza tu tiempo en patrones de máxima eficiencia",
266
+
267
+ # A + I + D (analogía artística)
268
+ "Como un director de orquesta que guía sin palabras, este método de ventas fluye naturalmente en cada conversación",
269
+
270
+ # I + D + A (metáfora de agua)
271
+ "Este sistema de aprendizaje fluye como un río, adaptándose naturalmente a tu estilo mientras potencia tus habilidades",
272
+
273
+ # I + D + A (analogía arquitectónica)
274
+ "Como los antiguos arquitectos japoneses que construían sin clavos, este método de networking conecta sin forzar relaciones",
275
+
276
+ # A + D + A (metáfora zen)
277
+ "Similar al jardín zen que revela su belleza gradualmente, esta rutina matutina despliega tu potencial día tras día",
278
+
279
+ # A + D + A (analogía natural)
280
+ "Como el roble que crece firme ante las tormentas, este método fortalece tu productividad en tiempos de caos",
281
+
282
+ # A + I + A (metáfora lunar)
283
+ "Al igual que la luna influye en las mareas, la neurociencia revela los ciclos naturales de tu productividad máxima",
284
+
285
+ # A + I + A (analogía culinaria)
286
+ "Como un chef que transforma ingredientes simples en obras maestras, este sistema eleva tu rutina diaria a resultados extraordinarios"
287
+ ]
288
+ },
289
+ "4U": {
290
+ "description": """
291
+ La fórmula 4U se aplica de manera flexible y estratégica, combinando 1-4 elementos para crear titulares impactantes y naturales:
292
+
293
+ 1. **Útil** (Useful):
294
+ Beneficios prácticos y tangibles:
295
+ - "Cómo conseguir..." + resultado específico
296
+ - "La guía paso a paso para..."
297
+ - "El método probado que..."
298
+ - "Descubre la forma de..."
299
+ - "Aprende a..." + beneficio concreto
300
+ - "La solución definitiva para..."
301
+ - "El sistema que te permite..."
302
+ - "La estrategia que garantiza..."
303
+
304
+ 2. **Urgente** (Urgent):
305
+ Motivadores de acción inmediata:
306
+ - "Última oportunidad para..."
307
+ - "Solo disponible hasta..."
308
+ - "Antes de que sea tarde..."
309
+ - "Mientras aún hay tiempo..."
310
+ - "No esperes a que..."
311
+ - "Aprovecha ahora..."
312
+ - "La oferta expira en..."
313
+ - "Date prisa antes de que..."
314
+
315
+ 3. **Único** (Unique):
316
+ Diferenciadores memorables:
317
+ - "El método poco conocido..."
318
+ - "La técnica contraintuitiva..."
319
+ - "El descubrimiento sorprendente..."
320
+ - "La estrategia secreta..."
321
+ - "El sistema revolucionario..."
322
+ - "El enfoque innovador..."
323
+ - "La solución inesperada..."
324
+ - "El método exclusivo..."
325
+
326
+ 4. **Ultra-específico** (Ultra-specific):
327
+ Detalles precisos y medibles:
328
+ - Números exactos: "27 técnicas..."
329
+ - Tiempos concretos: "13 minutos..."
330
+ - Resultados medibles: "63% más..."
331
+ - Pasos definidos: "3 pasos..."
332
+ - Datos precisos: "8.3 veces más..."
333
+ - Métricas claras: "2.5x más rápido..."
334
+ - Cantidades específicas: "97 personas..."
335
+ - Plazos definidos: "21 días..."
336
+
337
+ Combinaciones estratégicas:
338
+ - Útil + Ultra-específico: Para audiencias prácticas y orientadas a resultados
339
+ - Urgente + Único: Para ofertas especiales y lanzamientos
340
+ - Único + Ultra-específico: Para diferenciación basada en datos
341
+ - Útil + Urgente: Para motivar acción inmediata
342
+ - Útil + Único + Ultra-específico: Para establecer autoridad y credibilidad
343
+ - Útil + Urgente + Ultra-específico: Para ofertas con beneficios medibles
344
+ - Único + Urgente + Ultra-específico: Para lanzamientos exclusivos
345
+ - Útil + Único + Urgente: Para ofertas transformadoras
346
+ - Las 4U juntas: Para máximo impacto en ofertas premium
347
+
348
+ Cada titular debe mantener un tono conversacional y evitar parecer una fórmula obvia.
349
+ """,
350
+ "examples": [
351
+ # Útil + Ultra-específico (Para audiencias prácticas y orientadas a resultados)
352
+ "Aprende 347 palabras en alemán memorizando solo 12 minutos al día mientras cocinas",
353
+ "Cultiva 27 tipos de hierbas aromáticas en 1.5 metros cuadrados de balcón generando 180 euros mensuales",
354
+ "Automatiza 89% de tus tareas administrativas dedicando 31 minutos cada lunes",
355
+
356
+ # Urgente + Único (Para ofertas especiales y lanzamientos)
357
+ "Un cartero rural comparte su sistema de gestión del tiempo antes de su retiro definitivo",
358
+ "La última clase del profesor más longevo de Oxford revela su método de memorización",
359
+ "El manuscrito perdido de un monje escriba sale a la luz tras 80 años en el Vaticano",
360
+
361
+ # Único + Ultra-específico (Para diferenciación basada en datos)
362
+ "Un grupo de 1457 abuelas italianas entrena una IA para reconocer pasta al dente con 99.7% de precisión",
363
+ "La técnica de un bibliotecario jubilado cataloga 47893 libros en 73 días usando fichas de colores",
364
+ "Un taxista noruego fotografía 12437 auroras boreales usando un iPhone 6 y tres filtros caseros",
365
+
366
+ # Útil + Urgente (Para motivar acción inmediata)
367
+ "Aprende a crear tu huerto urbano antes de que suban los precios de las verduras",
368
+ "Asegura tu plaza en el programa de ahorro energético antes del aumento de tarifas",
369
+ "Registra tu marca personal mientras el dominio premium sigue disponible",
370
+
371
+ # Útil + Único + Ultra-específico (Para establecer autoridad y credibilidad)
372
+ "La técnica de un cartero rural ayuda a 1893 personas a organizar su tiempo usando solo 17 minutos cada mañana",
373
+ "Un bibliotecario retirado genera 12437 euros vendiendo libros antiguos por menos de 3 euros cada uno",
374
+ "Una abuela italiana entrena algoritmos que reducen el tiempo de cocción un 82% manteniendo el sabor tradicional",
375
+
376
+ # Útil + Urgente + Ultra-específico (Para ofertas con beneficios medibles)
377
+ "Aprende 478 palabras en japonés en 21 días antes del aumento de precio del programa",
378
+ "Automatiza 95% de tu contabilidad en 7 días previo a la nueva normativa fiscal",
379
+ "Genera 7 fuentes de ingresos pasivos en 30 días antes del cambio en las regulaciones",
380
+
381
+ # Único + Urgente + Ultra-específico (Para lanzamientos exclusivos)
382
+ "El sistema de un monje copista digitaliza 7345 manuscritos en 31 días últimas plazas disponibles",
383
+ "La fórmula de un taxista fotografía 893 auroras boreales perfectas registro exclusivo esta semana",
384
+ "El método de un bibliotecario jubilado organiza 47893 archivos en 73 días acceso limitado",
385
+
386
+ # Útil + Único + Urgente (Para ofertas transformadoras)
387
+ "La técnica de un cartero rural transforma tu productividad antes del fin de semana",
388
+ "El sistema de una abuela italiana revoluciona tu forma de cocinar registro beta por 24 horas",
389
+ "El método de un bibliotecario maximiza tu capacidad de aprendizaje plazas limitadas"
390
+ ],
391
+ "consejos_uso": [
392
+ "Asegura que cada elemento U refuerce a los demás",
393
+ "Mantén un equilibrio entre urgencia y credibilidad",
394
+ "Usa datos específicos para aumentar la confianza",
395
+ "Adapta el orden de los elementos según tu audiencia",
396
+ "Evita exageraciones que puedan generar desconfianza",
397
+ "Combina los elementos de forma natural y fluida",
398
+ "Asegúrate de que cada elemento añada valor real",
399
+ "Prueba diferentes combinaciones para encontrar las más efectivas"
400
+ ]
401
+ }
402
+ }
styles/main.css CHANGED
@@ -1,94 +1,94 @@
1
- /* Main container styling */
2
- .block-container {
3
- padding-top: 1rem;
4
- padding-bottom: 5rem;
5
- }
6
-
7
- /* Title spacing */
8
- h1 {
9
- margin-top: -2rem;
10
- padding-top: 0.5rem;
11
- }
12
-
13
- /* Subtitle spacing */
14
- h4 {
15
- margin-top: 0.5rem;
16
- padding-top: 0rem;
17
- }
18
-
19
- /* Custom button styling */
20
- /* Estilo personalizado para el botón de generar */
21
- [data-testid="stButton"] > button {
22
- background: linear-gradient(90deg, #FFD700, #FFA500) !important;
23
- color: #333 !important;
24
- padding: 8px 15px !important; /* Relleno reducido */
25
- border-radius: 8px !important;
26
- border: none !important;
27
- font-weight: bold !important;
28
- width: 100% !important;
29
- text-align: center !important;
30
- cursor: pointer !important;
31
- transition: all 0.3s ease !important;
32
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
33
- margin-top: 10px !important; /* Margen superior reducido */
34
- margin-bottom: 10px !important; /* Margen inferior reducido */
35
- }
36
-
37
- [data-testid="stButton"] > button:hover {
38
- background: linear-gradient(90deg, #FFA500, #FFD700) !important;
39
- box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15) !important;
40
- transform: translateY(-2px) !important;
41
- }
42
-
43
- [data-testid="stButton"] > button:active {
44
- transform: translateY(1px) !important;
45
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
46
- }
47
-
48
- /* Contenedor de resultados */
49
- .results-container {
50
- border: 1px solid #000000;
51
- padding: 15px;
52
- border-radius: 8px;
53
- background-color: #ffffff;
54
- margin-top: 10px;
55
- }
56
-
57
- /* Estilos adicionales al final del archivo CSS existente */
58
-
59
- .webinar-names {
60
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
61
- line-height: 1.8;
62
- font-size: 1.1em;
63
- background-color: #f9f9f9;
64
- padding: 20px;
65
- border-radius: 8px;
66
- border-left: 4px solid #4CAF50;
67
- white-space: pre-wrap;
68
- display: block !important;
69
- visibility: visible !important;
70
- }
71
-
72
- .webinar-script {
73
- max-height: 70vh;
74
- overflow-y: auto;
75
- padding: 15px;
76
- background-color: #f9f9f9;
77
- border-radius: 8px;
78
- border-left: 4px solid #4CAF50;
79
- white-space: pre-wrap;
80
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
81
- line-height: 1.6;
82
- display: block !important;
83
- visibility: visible !important;
84
- }
85
-
86
- .webinar-script h1, .webinar-script h2, .webinar-script h3 {
87
- color: #2E7D32;
88
- margin-top: 20px;
89
- display: block !important;
90
- }
91
-
92
- .webinar-script ul, .webinar-script ol {
93
- padding-left: 25px;
94
  }
 
1
+ /* Main container styling */
2
+ .block-container {
3
+ padding-top: 1rem;
4
+ padding-bottom: 5rem;
5
+ }
6
+
7
+ /* Title spacing */
8
+ h1 {
9
+ margin-top: -2rem;
10
+ padding-top: 0.5rem;
11
+ }
12
+
13
+ /* Subtitle spacing */
14
+ h4 {
15
+ margin-top: 0.5rem;
16
+ padding-top: 0rem;
17
+ }
18
+
19
+ /* Custom button styling */
20
+ /* Estilo personalizado para el botón de generar */
21
+ [data-testid="stButton"] > button {
22
+ background: linear-gradient(90deg, #FFD700, #FFA500) !important;
23
+ color: #333 !important;
24
+ padding: 8px 15px !important; /* Relleno reducido */
25
+ border-radius: 8px !important;
26
+ border: none !important;
27
+ font-weight: bold !important;
28
+ width: 100% !important;
29
+ text-align: center !important;
30
+ cursor: pointer !important;
31
+ transition: all 0.3s ease !important;
32
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
33
+ margin-top: 10px !important; /* Margen superior reducido */
34
+ margin-bottom: 10px !important; /* Margen inferior reducido */
35
+ }
36
+
37
+ [data-testid="stButton"] > button:hover {
38
+ background: linear-gradient(90deg, #FFA500, #FFD700) !important;
39
+ box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15) !important;
40
+ transform: translateY(-2px) !important;
41
+ }
42
+
43
+ [data-testid="stButton"] > button:active {
44
+ transform: translateY(1px) !important;
45
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
46
+ }
47
+
48
+ /* Contenedor de resultados */
49
+ .results-container {
50
+ border: 1px solid #000000;
51
+ padding: 15px;
52
+ border-radius: 8px;
53
+ background-color: #ffffff;
54
+ margin-top: 10px;
55
+ }
56
+
57
+ /* Estilos adicionales al final del archivo CSS existente */
58
+
59
+ .webinar-names {
60
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
61
+ line-height: 1.8;
62
+ font-size: 1.1em;
63
+ background-color: #f9f9f9;
64
+ padding: 20px;
65
+ border-radius: 8px;
66
+ border-left: 4px solid #4CAF50;
67
+ white-space: pre-wrap;
68
+ display: block !important;
69
+ visibility: visible !important;
70
+ }
71
+
72
+ .webinar-script {
73
+ max-height: 70vh;
74
+ overflow-y: auto;
75
+ padding: 15px;
76
+ background-color: #f9f9f9;
77
+ border-radius: 8px;
78
+ border-left: 4px solid #4CAF50;
79
+ white-space: pre-wrap;
80
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
81
+ line-height: 1.6;
82
+ display: block !important;
83
+ visibility: visible !important;
84
+ }
85
+
86
+ .webinar-script h1, .webinar-script h2, .webinar-script h3 {
87
+ color: #2E7D32;
88
+ margin-top: 20px;
89
+ display: block !important;
90
+ }
91
+
92
+ .webinar-script ul, .webinar-script ol {
93
+ padding-left: 25px;
94
  }