JeCabrera commited on
Commit
f724c1b
·
verified ·
1 Parent(s): cb9d211

Upload 19 files

Browse files
app.py CHANGED
@@ -1,633 +1,398 @@
1
- from dotenv import load_dotenv
2
- import streamlit as st
3
- import os
4
- import google.generativeai as genai
5
- import datetime
6
- from streamlit import session_state as state
7
-
8
- # Cargar las variables de entorno
9
- load_dotenv()
10
-
11
- # Configurar la API de Google
12
- genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
13
-
14
- # Función para inicializar el modelo
15
- def initialize_model(temperature=1.0):
16
- return genai.GenerativeModel(
17
- model_name="gemini-2.0-flash",
18
- generation_config={"temperature": temperature}
19
- )
20
-
21
- # Función para generar contenido
22
- def generate_content(prompt, temperature=1.0):
23
- model = initialize_model(temperature)
24
-
25
- response = model.generate_content(prompt)
26
-
27
- return response.text
28
-
29
- # Función auxiliar para mostrar el contenido generado y los botones de descarga
30
- def display_generated_content(col, generated_content, content_type):
31
- timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
32
-
33
- # Determinar el tipo de contenido para personalizar los botones y títulos
34
- if content_type == "sales_page_section":
35
- download_label = "DESCARGAR SECCIÓN DE CARTA DE VENTAS ▶▶"
36
- file_name = f"seccion_carta_ventas_{timestamp}.txt"
37
- subheader_text = "Tu sección de carta de ventas:"
38
-
39
- # Mostrar botón de descarga superior
40
- col.download_button(
41
- label=download_label,
42
- data=generated_content,
43
- file_name=file_name,
44
- mime="text/plain",
45
- key=f"download_top_{content_type}"
46
- )
47
-
48
- # Mostrar el contenido generado
49
- col.subheader(subheader_text)
50
- col.markdown(generated_content)
51
-
52
- # Mostrar botón de descarga inferior
53
- col.download_button(
54
- label=download_label,
55
- data=generated_content,
56
- file_name=file_name,
57
- mime="text/plain",
58
- key=f"download_bottom_{content_type}"
59
- )
60
-
61
- # Función para generar la sección "Above the Fold"
62
- def generate_above_the_fold(audience, product, temperature, offer=None, **kwargs):
63
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
64
-
65
- THE EXPERT TEAM:
66
-
67
- 1. MASTER SALES PAGE STRATEGIST:
68
- - Expert in sales page frameworks and conversion strategies
69
- - Trained in the Perfect Sales Page methodology by Russell Brunson
70
- - Ensures the copy follows proven sales page structure precisely
71
- - Focuses on strategic placement of key conversion elements
72
-
73
- 2. ELITE DIRECT RESPONSE COPYWRITER:
74
- - Trained by Gary Halbert, Gary Bencivenga, and David Ogilvy
75
- - Creates compelling headlines, hooks, and persuasive elements
76
- - Crafts irresistible calls to action that drive conversions
77
- - Specializes in problem-solution frameworks that resonate deeply
78
-
79
- 3. AUDIENCE PSYCHOLOGY SPECIALIST:
80
- - Expert in understanding audience pain points and objections
81
- - Creates content that builds genuine connection and trust
82
- - Identifies and addresses hidden fears and desires
83
- - Ensures the content feels personal and relevant to the ideal customer
84
-
85
- YOUR TASK:
86
- Create the ABOVE THE FOLD section of a compelling sales page following the "Headline Pack" structure that includes pre-headline, headline, and subheadline.
87
-
88
- HEADLINE PACK STRUCTURE:
89
- 1. PRE-HEADLINE: "Atención: Solo para [customer identity]"
90
- 2. HEADLINE: "CÓMO LOGRAR/HACER [DESIRED END RESULT] EN [STEPS OR TIME IN WHICH IT IS ACHIEVED]"
91
- 3. SUBHEADLINE: "(incluso si [main objection])"
92
-
93
- FORMAT REQUIREMENTS:
94
- - Create a powerful headline that promises a specific transformation
95
- - Include a pre-headline that clearly identifies the target audience
96
- - Add a subheadline that addresses the main objection
97
- - Include primary CTA button text
98
- - Ensure it speaks directly to the specific target market
99
- - Write in Spanish
100
- - Start directly with the sales page content without introductory text
101
-
102
- EXAMPLE HEADLINE PACK:
103
- "Atención: Solo para inversionistas en bienes raíces principiantes.
104
- CÓMO HACER TU PRIMERA INVERSIÓN SEGURA EN BIENES RAÍCES EN 3 SIMPLES PASOS…
105
- (incluso si tienes poco capital disponible)."
106
-
107
- IMPORTANT INSTRUCTIONS:
108
- - Write the entire section in Spanish
109
- - Create a powerful headline that captures attention immediately
110
- - Focus on the transformation your product/service provides
111
- - Highlight the main benefit in the subheadline
112
- - Create a sense of urgency and curiosity
113
- - Include a clear call to action
114
- - Use language that resonates with your specific audience
115
- """
116
-
117
- # Instrucciones específicas para la tarea
118
- above_fold_instruction = (
119
- f"{system_prompt}\n\n"
120
- f"Your task is to create the ABOVE THE FOLD section of a sales page IN SPANISH for {audience} "
121
- f"about {product}. "
122
- f"The section must be compelling, attention-grabbing, and drive conversions."
123
- f"\n\n"
124
- )
125
-
126
- # Añadir información sobre la oferta si se proporciona
127
- if offer:
128
- above_fold_instruction += f"The specific offer/product is: {offer}\n\n"
129
-
130
- # Enviar el mensaje al modelo
131
- return generate_content(above_fold_instruction, temperature)
132
-
133
- # Función para generar la sección "Problem"
134
- def generate_problem_section(audience, product, temperature, offer=None, **kwargs):
135
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
136
-
137
- YOUR TASK:
138
- Create the PROBLEM section of a compelling sales page that addresses the pain points of the ideal customer.
139
-
140
- FORMAT REQUIREMENTS:
141
- - Describe the pain points your target audience is experiencing
142
- - Use questions to help prospects identify with the problem
143
- - Agitate the problem by explaining consequences of not solving it
144
- - Include specific examples that resonate with your audience
145
- - Make the prospect feel understood
146
- - Use language and scenarios specific to the target market
147
- - Write in Spanish
148
-
149
- EXAMPLE PROBLEM SECTION:
150
- "¿Estás cansado de trabajar largas horas y no ver resultados? ¿Sientes que no tienes tiempo para disfrutar de tu vida?"
151
-
152
- IMPORTANT INSTRUCTIONS:
153
- - Write the entire section in Spanish
154
- - Identify and describe the main pain points of your target audience
155
- - Use questions that help prospects identify with the problem
156
- - Agitate the problem by explaining the consequences of not solving it
157
- - Include specific examples that resonate with your audience
158
- - Make the prospect feel understood
159
- """
160
-
161
- # Instrucciones específicas para la tarea
162
- problem_instruction = (
163
- f"{system_prompt}\n\n"
164
- f"Your task is to create the PROBLEM section of a sales page IN SPANISH for {audience} "
165
- f"about {product}. "
166
- f"The section must clearly identify and agitate the pain points that your product/service solves."
167
- f"\n\n"
168
- )
169
-
170
- # Añadir información sobre la oferta si se proporciona
171
- if offer:
172
- problem_instruction += f"The specific offer/product is: {offer}\n\n"
173
-
174
- # Enviar el mensaje al modelo
175
- return generate_content(problem_instruction, temperature)
176
-
177
- # Función para generar la sección "Solution & Benefits"
178
- def generate_solution_section(audience, product, temperature, offer=None, **kwargs):
179
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
180
-
181
- YOUR TASK:
182
- Create the SOLUTION & BENEFITS section of a compelling sales page that offers a solution through the product/service.
183
-
184
- FORMAT REQUIREMENTS:
185
- - Present your product/service as the ideal solution to the problems described
186
- - Highlight the key features and their corresponding benefits
187
- - Explain how your solution works in a clear, step-by-step manner
188
- - Include specific results or transformations customers can expect
189
- - Address potential objections preemptively
190
- - Use bullet points to highlight key benefits
191
- - Write in Spanish
192
-
193
- EXAMPLE SOLUTION & BENEFITS SECTION:
194
- "Con nuestro sistema probado, aprenderás a automatizar tus procesos y generar ingresos pasivos mientras disfrutas de tu tiempo libre."
195
-
196
- IMPORTANT INSTRUCTIONS:
197
- - Write the entire section in Spanish
198
- - Present your product/service as the ideal solution to the problems described
199
- - Highlight the key features and their corresponding benefits
200
- - Explain how your solution works in a clear, step-by-step manner
201
- - Include specific results or transformations customers can expect
202
- - Address potential objections preemptively
203
- - Use bullet points to highlight key benefits
204
- """
205
-
206
- # Instrucciones específicas para la tarea
207
- solution_instruction = (
208
- f"{system_prompt}\n\n"
209
- f"Your task is to create the SOLUTION & BENEFITS section of a sales page IN SPANISH for {audience} "
210
- f"about {product}. "
211
- f"The section must present your product/service as the ideal solution to the problems described earlier."
212
- f"\n\n"
213
- )
214
-
215
- # Añadir información sobre la oferta si se proporciona
216
- if offer:
217
- solution_instruction += f"The specific offer/product is: {offer}\n\n"
218
-
219
- # Enviar el mensaje al modelo
220
- return generate_content(solution_instruction, temperature)
221
-
222
- # Función para generar la sección "Authority"
223
- def generate_authority_section(audience, product, temperature, offer=None, **kwargs):
224
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
225
-
226
- YOUR TASK:
227
- Create the AUTHORITY section of a compelling sales page that establishes credibility and trust.
228
-
229
- FORMAT REQUIREMENTS:
230
- - Highlight credentials, experience, and expertise
231
- - Mention media appearances, publications, or recognition
232
- - Include relevant statistics or achievements
233
- - Establish why you are qualified to solve the customer's problem
234
- - Write in Spanish
235
-
236
- EXAMPLE AUTHORITY SECTION:
237
- "Hemos ayudado a más de 10,000 emprendedores a alcanzar sus metas financieras. Aparecimos en Forbes y Entrepreneur."
238
-
239
- IMPORTANT INSTRUCTIONS:
240
- - Write the entire section in Spanish
241
- - Establish credibility through specific achievements
242
- - Include relevant statistics that build trust
243
- - Mention any media appearances or recognition
244
- - Explain why you are qualified to solve the customer's problem
245
- """
246
-
247
- # Instrucciones específicas para la tarea
248
- authority_instruction = (
249
- f"{system_prompt}\n\n"
250
- f"Your task is to create the AUTHORITY section of a sales page IN SPANISH for {audience} "
251
- f"about {product}. "
252
- f"The section must establish credibility and trust with the audience."
253
- f"\n\n"
254
- )
255
-
256
- # Añadir información sobre la oferta si se proporciona
257
- if offer:
258
- authority_instruction += f"The specific offer/product is: {offer}\n\n"
259
-
260
- # Enviar el mensaje al modelo
261
- return generate_content(authority_instruction, temperature)
262
-
263
- # Función para generar la sección "Offer & Bonus"
264
- def generate_offer_section(audience, product, temperature, offer=None, **kwargs):
265
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
266
-
267
- YOUR TASK:
268
- Create the OFFER & BONUS section of a compelling sales page that presents the offer in an irresistible way.
269
-
270
- FORMAT REQUIREMENTS:
271
- - Present the offer clearly with pricing information
272
- - Highlight any discounts or limited-time offers
273
- - Detail the bonuses included with the purchase
274
- - Emphasize the value proposition
275
- - Create a sense of urgency or scarcity
276
- - Write in Spanish
277
-
278
- EXAMPLE OFFER & BONUS SECTION:
279
- "Por tiempo limitado, obtén acceso al curso completo por solo $99 (antes $299) e incluye 3 bonus exclusivos."
280
-
281
- IMPORTANT INSTRUCTIONS:
282
- - Write the entire section in Spanish
283
- - Present the offer clearly with pricing details
284
- - Highlight any discounts or special offers
285
- - Detail the bonuses included with the purchase
286
- - Emphasize the total value the customer receives
287
- - Create a sense of urgency or scarcity
288
- """
289
-
290
- # Instrucciones específicas para la tarea
291
- offer_instruction = (
292
- f"{system_prompt}\n\n"
293
- f"Your task is to create the OFFER & BONUS section of a sales page IN SPANISH for {audience} "
294
- f"about {product}. "
295
- f"The section must present the offer in an irresistible way and highlight any bonuses."
296
- f"\n\n"
297
- )
298
-
299
- # Añadir información sobre la oferta si se proporciona
300
- if offer:
301
- offer_instruction += f"The specific offer/product is: {offer}\n\n"
302
-
303
- # Enviar el mensaje al modelo
304
- return generate_content(offer_instruction, temperature)
305
-
306
- # Función para generar la sección "Social Proof"
307
- def generate_social_proof_section(audience, product, temperature, offer=None, **kwargs):
308
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
309
-
310
- YOUR TASK:
311
- Create the SOCIAL PROOF section of a compelling sales page that builds trust through testimonials.
312
-
313
- FORMAT REQUIREMENTS:
314
- - Include testimonials from satisfied customers
315
- - Highlight specific results or transformations
316
- - Use full names and relevant details when possible
317
- - Include diverse testimonials that address different benefits
318
- - Write in Spanish
319
-
320
- EXAMPLE SOCIAL PROOF SECTION:
321
- "Mira lo que dicen nuestros clientes: 'Gracias a este curso, tripliqué mis ingresos en solo 2 meses' - Ana G."
322
-
323
- IMPORTANT INSTRUCTIONS:
324
- - Write the entire section in Spanish
325
- - Create realistic and specific testimonials
326
- - Include full names and relevant details
327
- - Highlight specific results or transformations
328
- - Address different benefits or use cases
329
- """
330
-
331
- # Instrucciones específicas para la tarea
332
- social_proof_instruction = (
333
- f"{system_prompt}\n\n"
334
- f"Your task is to create the SOCIAL PROOF section of a sales page IN SPANISH for {audience} "
335
- f"about {product}. "
336
- f"The section must build trust through testimonials and social proof."
337
- f"\n\n"
338
- )
339
-
340
- # Añadir información sobre la oferta si se proporciona
341
- if offer:
342
- social_proof_instruction += f"The specific offer/product is: {offer}\n\n"
343
-
344
- # Enviar el mensaje al modelo
345
- return generate_content(social_proof_instruction, temperature)
346
-
347
- # Función para generar la sección "Guarantees"
348
- def generate_guarantees_section(audience, product, temperature, offer=None, **kwargs):
349
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
350
-
351
- YOUR TASK:
352
- Create the GUARANTEES section of a compelling sales page that removes risk for the customer.
353
-
354
- FORMAT REQUIREMENTS:
355
- - Clearly state the guarantee terms
356
- - Explain how the guarantee works
357
- - Address potential objections or concerns
358
- - Build trust through risk reversal
359
- - Write in Spanish
360
-
361
- EXAMPLE GUARANTEES SECTION:
362
- "Si no estás satisfecho, te devolvemos el 100% de tu dinero. Sin preguntas."
363
-
364
- IMPORTANT INSTRUCTIONS:
365
- - Write the entire section in Spanish
366
- - Clearly state the guarantee terms
367
- - Explain how the guarantee works
368
- - Address potential objections or concerns
369
- - Build trust through risk reversal
370
- """
371
-
372
- # Instrucciones específicas para la tarea
373
- guarantees_instruction = (
374
- f"{system_prompt}\n\n"
375
- f"Your task is to create the GUARANTEES section of a sales page IN SPANISH for {audience} "
376
- f"about {product}. "
377
- f"The section must remove risk for the customer through strong guarantees."
378
- f"\n\n"
379
- )
380
-
381
- # Añadir información sobre la oferta si se proporciona
382
- if offer:
383
- guarantees_instruction += f"The specific offer/product is: {offer}\n\n"
384
-
385
- # Enviar el mensaje al modelo
386
- return generate_content(guarantees_instruction, temperature)
387
-
388
- # Función para generar la sección "Call to Action"
389
- def generate_cta_section(audience, product, temperature, offer=None, **kwargs):
390
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
391
-
392
- YOUR TASK:
393
- Create the CALL TO ACTION section of a compelling sales page that drives conversions.
394
-
395
- FORMAT REQUIREMENTS:
396
- - Create a clear and compelling call to action
397
- - Use action-oriented language
398
- - Remind the reader of the key benefits
399
- - Create a sense of urgency
400
- - Make the next step obvious and easy
401
- - Write in Spanish
402
-
403
- EXAMPLE CALL TO ACTION SECTION:
404
- "Haz clic en el botón ahora y comienza tu transformación hoy mismo."
405
-
406
- IMPORTANT INSTRUCTIONS:
407
- - Write the entire section in Spanish
408
- - Create a clear and compelling call to action
409
- - Use action-oriented language
410
- - Remind the reader of the key benefits
411
- - Create a sense of urgency
412
- - Make the next step obvious and easy
413
- """
414
-
415
- # Instrucciones específicas para la tarea
416
- cta_instruction = (
417
- f"{system_prompt}\n\n"
418
- f"Your task is to create the CALL TO ACTION section of a sales page IN SPANISH for {audience} "
419
- f"about {product}. "
420
- f"The section must drive conversions with a clear and compelling call to action."
421
- f"\n\n"
422
- )
423
-
424
- # Añadir información sobre la oferta si se proporciona
425
- if offer:
426
- cta_instruction += f"The specific offer/product is: {offer}\n\n"
427
-
428
- # Enviar el mensaje al modelo
429
- return generate_content(cta_instruction, temperature)
430
-
431
- # Función para generar la sección "P.S."
432
- def generate_ps_section(audience, product, temperature, offer=None, **kwargs):
433
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
434
-
435
- YOUR TASK:
436
- Create the P.S. (POSTSCRIPT) section of a compelling sales page that adds a final persuasive element.
437
-
438
- FORMAT REQUIREMENTS:
439
- - Start with "P.S." or "Recuerda"
440
- - Add a final compelling reason to act now
441
- - Remind the reader of scarcity or urgency
442
- - Reinforce a key benefit or address a final objection
443
- - Keep it brief but impactful
444
- - Write in Spanish
445
-
446
- EXAMPLE P.S. SECTION:
447
- "P.S. Recuerda, esta oferta especial termina en 24 horas. No pierdas esta oportunidad."
448
-
449
- IMPORTANT INSTRUCTIONS:
450
- - Write the entire section in Spanish
451
- - Start with "P.S." or "Recuerda"
452
- - Add a final compelling reason to act now
453
- - Remind the reader of scarcity or urgency
454
- - Reinforce a key benefit or address a final objection
455
- - Keep it brief but impactful
456
- """
457
-
458
- # Instrucciones específicas para la tarea
459
- ps_instruction = (
460
- f"{system_prompt}\n\n"
461
- f"Your task is to create the P.S. (POSTSCRIPT) section of a sales page IN SPANISH for {audience} "
462
- f"about {product}. "
463
- f"The section must add a final persuasive element that drives action."
464
- f"\n\n"
465
- )
466
-
467
- # Añadir información sobre la oferta si se proporciona
468
- if offer:
469
- ps_instruction += f"The specific offer/product is: {offer}\n\n"
470
-
471
- # Enviar el mensaje al modelo
472
- return generate_content(ps_instruction, temperature)
473
-
474
- # Función para generar la sección "Final Call to Action"
475
- def generate_final_cta_section(audience, product, temperature, offer=None, **kwargs):
476
- system_prompt = """You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
477
-
478
- YOUR TASK:
479
- Create the FINAL CALL TO ACTION section of a compelling sales page that drives conversions.
480
-
481
- FORMAT REQUIREMENTS:
482
- - Create a final, powerful call to action
483
- - Use strong, action-oriented language
484
- - Make the button text clear and compelling
485
- - Create a sense of urgency and excitement
486
- - Write in Spanish
487
-
488
- EXAMPLE FINAL CALL TO ACTION SECTION:
489
- "¡RESERVA TU PLAZA AHORA!"
490
-
491
- IMPORTANT INSTRUCTIONS:
492
- - Write the entire section in Spanish
493
- - Create a final, powerful call to action
494
- - Use strong, action-oriented language
495
- - Make the button text clear and compelling
496
- - Create a sense of urgency and excitement
497
- """
498
-
499
- # Instrucciones específicas para la tarea
500
- final_cta_instruction = (
501
- f"{system_prompt}\n\n"
502
- f"Your task is to create the FINAL CALL TO ACTION section of a sales page IN SPANISH for {audience} "
503
- f"about {product}. "
504
- f"The section must drive conversions with a final, powerful call to action."
505
- f"\n\n"
506
- )
507
-
508
- # Añadir información sobre la oferta si se proporciona
509
- if offer:
510
- final_cta_instruction += f"The specific offer/product is: {offer}\n\n"
511
-
512
- # Enviar el mensaje al modelo
513
- return generate_content(final_cta_instruction, temperature)
514
-
515
- # Función para validar entradas
516
- def validate_inputs(audience, product):
517
- has_audience = audience.strip() != ""
518
- has_product = product.strip() != ""
519
- return has_audience and has_product
520
-
521
- # Función para cargar CSS
522
- def load_css():
523
- css_path = "styles/styles.css"
524
- if os.path.exists(css_path):
525
- try:
526
- with open(css_path, "r") as f:
527
- st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
528
- except Exception as e:
529
- st.warning(f"Error al cargar el archivo CSS: {str(e)}")
530
- else:
531
- st.warning(f"No se encontró el archivo CSS en {css_path}")
532
-
533
- # Configuración de la página
534
- st.set_page_config(
535
- page_title="CopyXpert - Generador de Páginas de Ventas",
536
- layout="wide",
537
- initial_sidebar_state="expanded",
538
- menu_items=None
539
- )
540
- load_css()
541
-
542
- # Leer el contenido del archivo manual.md
543
- try:
544
- with open("manual.md", "r", encoding="utf-8") as file:
545
- manual_content = file.read()
546
- # Mostrar el contenido del manual en el sidebar
547
- st.sidebar.markdown(manual_content)
548
- except:
549
- st.sidebar.warning("No se pudo cargar el manual. Asegúrate de que el archivo manual.md existe.")
550
-
551
- # Agregar título y subtítulo usando HTML
552
- st.markdown("<h1 style='text-align: center;'>CopyXpert</h1>", unsafe_allow_html=True)
553
- st.markdown("<h3 style='text-align: center;'>Generador de Páginas de Ventas Persuasivas</h3>", unsafe_allow_html=True)
554
-
555
- # Interfaz principal para el generador de páginas de ventas
556
- st.subheader("Generador de Secciones de Páginas de Ventas")
557
-
558
- # Crear columnas para la interfaz
559
- col1, col2 = st.columns([1, 2])
560
-
561
- # Columna de entrada
562
- with col1:
563
- # Inputs básicos
564
- sales_page_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="sales_page_audience")
565
- sales_page_product = st.text_input("¿Sobre qué producto/servicio es tu página?", placeholder="Ejemplo: Curso de marketing", key="sales_page_product")
566
- sales_page_offer = st.text_input("¿Cuál es tu oferta específica?", placeholder="Ejemplo: Curso de marketing por $197", key="sales_page_offer")
567
-
568
- # Selector de sección
569
- sales_page_section = st.selectbox(
570
- "Selecciona la sección a generar",
571
- options=[
572
- "Above the Fold (Encabezado)",
573
- "Problem (Problema)",
574
- "Solution & Benefits (Solución y Beneficios)",
575
- "Authority (Autoridad)",
576
- "Offer & Bonus (Oferta y Bonus)",
577
- "Social Proof (Prueba Social)",
578
- "Guarantees (Garantías)",
579
- "Call to Action (Llamada a la Acción)",
580
- "P.S. (Post-Data)",
581
- "Final Call to Action (Llamada Final)"
582
- ],
583
- key="sales_page_section"
584
- )
585
-
586
- # Botón de generación
587
- submit_sales_page = st.button("GENERAR SECCIÓN DE PÁGINA DE VENTAS ▶▶", key="generate_sales_page")
588
-
589
- # Opciones avanzadas en el acordeón
590
- with st.expander("Personaliza tu sección"):
591
- # Slider de creatividad
592
- sales_page_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="sales_page_temp")
593
-
594
- # Generar y mostrar la sección de la página de ventas
595
- if submit_sales_page:
596
- # Validar entradas
597
- if validate_inputs(sales_page_audience, sales_page_product):
598
- try:
599
- # Crear un contenedor para el spinner en la columna 2
600
- with col2:
601
- with st.spinner("Generando sección de página de ventas...", show_time=True):
602
- # Mapear la selección a la función correspondiente
603
- section_functions = {
604
- "Above the Fold (Encabezado)": generate_above_the_fold,
605
- "Problem (Problema)": generate_problem_section,
606
- "Solution & Benefits (Solución y Beneficios)": generate_solution_section,
607
- "Authority (Autoridad)": generate_authority_section,
608
- "Offer & Bonus (Oferta y Bonus)": generate_offer_section,
609
- "Social Proof (Prueba Social)": generate_social_proof_section,
610
- "Guarantees (Garantías)": generate_guarantees_section,
611
- "Call to Action (Llamada a la Acción)": generate_cta_section,
612
- "P.S. (Post-Data)": generate_ps_section,
613
- "Final Call to Action (Llamada Final)": generate_final_cta_section
614
- }
615
-
616
- # Obtener la función correspondiente
617
- generator_func = section_functions[sales_page_section]
618
-
619
- # Generar el contenido
620
- generated_content = generator_func(
621
- audience=sales_page_audience,
622
- product=sales_page_product,
623
- temperature=sales_page_temperature,
624
- offer=sales_page_offer if sales_page_offer.strip() else None
625
- )
626
-
627
- # Mostrar el contenido generado fuera del bloque del spinner
628
- display_generated_content(col2, generated_content, "sales_page_section")
629
-
630
- except Exception as e:
631
- st.error(f"Error al generar la sección: {str(e)}")
632
- else:
633
  st.warning("Por favor, completa los campos de público objetivo y producto/servicio.")
 
1
+ from dotenv import load_dotenv
2
+ import streamlit as st
3
+ import os
4
+ import google.generativeai as genai
5
+ import datetime
6
+ from streamlit import session_state as state
7
+
8
+ # Cargar las variables de entorno
9
+ load_dotenv()
10
+
11
+ # Configurar la API de Google
12
+ genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
13
+
14
+ # Función para inicializar el modelo
15
+ def initialize_model(temperature=1.0):
16
+ return genai.GenerativeModel(
17
+ model_name="gemini-2.0-flash",
18
+ generation_config={"temperature": temperature}
19
+ )
20
+
21
+ # Función para generar contenido
22
+ def generate_content(prompt, temperature=1.0):
23
+ model = initialize_model(temperature)
24
+
25
+ response = model.generate_content(prompt)
26
+
27
+ return response.text
28
+
29
+ # Función auxiliar para mostrar el contenido generado y los botones de descarga
30
+ def display_generated_content(col, generated_content, content_type):
31
+ timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
32
+
33
+ # Determinar el tipo de contenido para personalizar los botones y títulos
34
+ if content_type == "sales_page_section":
35
+ download_label = "DESCARGAR SECCIÓN DE CARTA DE VENTAS ▶▶"
36
+ file_name = f"seccion_carta_ventas_{timestamp}.txt"
37
+ subheader_text = "Tu sección de carta de ventas:"
38
+
39
+ # Mostrar botón de descarga superior
40
+ col.download_button(
41
+ label=download_label,
42
+ data=generated_content,
43
+ file_name=file_name,
44
+ mime="text/plain",
45
+ key=f"download_top_{content_type}"
46
+ )
47
+
48
+ # Mostrar el contenido generado
49
+ col.subheader(subheader_text)
50
+ col.markdown(generated_content)
51
+
52
+ # Mostrar botón de descarga inferior
53
+ col.download_button(
54
+ label=download_label,
55
+ data=generated_content,
56
+ file_name=file_name,
57
+ mime="text/plain",
58
+ key=f"download_bottom_{content_type}"
59
+ )
60
+
61
+ # Add this function near the top of your file
62
+ def load_prompt_from_file(file_path):
63
+ try:
64
+ with open(file_path, "r", encoding="utf-8") as file:
65
+ return file.read()
66
+ except Exception as e:
67
+ st.error(f"Error al cargar el prompt desde {file_path}: {str(e)}")
68
+ return ""
69
+
70
+ # Función para generar la sección "Above the Fold"
71
+ def generate_above_the_fold(audience, product, temperature, offer=None, **kwargs):
72
+ # Cargar el prompt desde el archivo
73
+ system_prompt = load_prompt_from_file("prompts/above_the_fold.txt")
74
+
75
+ # Instrucciones específicas para la tarea
76
+ above_fold_instruction = (
77
+ f"{system_prompt}\n\n"
78
+ f"Your task is to create the ABOVE THE FOLD section of a sales page IN SPANISH for {audience} "
79
+ f"about {product}. "
80
+ f"The section must be compelling, attention-grabbing, and drive conversions."
81
+ f"\n\n"
82
+ )
83
+
84
+ # Añadir información sobre la oferta si se proporciona
85
+ if offer:
86
+ above_fold_instruction += f"The specific offer/product is: {offer}\n\n"
87
+
88
+ # Enviar el mensaje al modelo
89
+ return generate_content(above_fold_instruction, temperature)
90
+
91
+ # Función para generar la sección "Problem"
92
+ def generate_problem_section(audience, product, temperature, offer=None, **kwargs):
93
+ # Cargar el prompt desde el archivo
94
+ system_prompt = load_prompt_from_file("prompts/problem.txt")
95
+
96
+ # Instrucciones específicas para la tarea
97
+ problem_instruction = (
98
+ f"{system_prompt}\n\n"
99
+ f"Your task is to create the PROBLEM section of a sales page IN SPANISH for {audience} "
100
+ f"about {product}. "
101
+ f"The section must clearly identify and agitate the pain points that your product/service solves."
102
+ f"\n\n"
103
+ )
104
+
105
+ # Añadir información sobre la oferta si se proporciona
106
+ if offer:
107
+ problem_instruction += f"The specific offer/product is: {offer}\n\n"
108
+
109
+ # Enviar el mensaje al modelo
110
+ return generate_content(problem_instruction, temperature)
111
+
112
+ # Función para generar la sección "Solution & Benefits"
113
+ def generate_solution_section(audience, product, temperature, offer=None, **kwargs):
114
+ # Cargar el prompt desde el archivo
115
+ system_prompt = load_prompt_from_file("prompts/solution_benefits.txt")
116
+
117
+ # Instrucciones específicas para la tarea
118
+ solution_instruction = (
119
+ f"{system_prompt}\n\n"
120
+ f"Your task is to create the SOLUTION & BENEFITS section of a sales page IN SPANISH for {audience} "
121
+ f"about {product}. "
122
+ f"The section must present your product/service as the ideal solution to the problems described earlier."
123
+ f"\n\n"
124
+ )
125
+
126
+ # Añadir información sobre la oferta si se proporciona
127
+ if offer:
128
+ solution_instruction += f"The specific offer/product is: {offer}\n\n"
129
+
130
+ # Enviar el mensaje al modelo
131
+ return generate_content(solution_instruction, temperature)
132
+
133
+ # Función para generar la sección "Authority"
134
+ def generate_authority_section(audience, product, temperature, offer=None, **kwargs):
135
+ # Cargar el prompt desde el archivo
136
+ system_prompt = load_prompt_from_file("prompts/authority.txt")
137
+
138
+ # Instrucciones específicas para la tarea
139
+ authority_instruction = (
140
+ f"{system_prompt}\n\n"
141
+ f"Your task is to create the AUTHORITY section of a sales page IN SPANISH for {audience} "
142
+ f"about {product}. "
143
+ f"The section must establish credibility and trust with the audience."
144
+ f"\n\n"
145
+ )
146
+
147
+ # Añadir información sobre la oferta si se proporciona
148
+ if offer:
149
+ authority_instruction += f"The specific offer/product is: {offer}\n\n"
150
+
151
+ # Enviar el mensaje al modelo
152
+ return generate_content(authority_instruction, temperature)
153
+
154
+ # Función para generar la sección "Offer & Bonus"
155
+ def generate_offer_section(audience, product, temperature, offer=None, **kwargs):
156
+ # Cargar el prompt desde el archivo
157
+ system_prompt = load_prompt_from_file("prompts/offer_bonus.txt")
158
+
159
+ # Instrucciones específicas para la tarea
160
+ offer_instruction = (
161
+ f"{system_prompt}\n\n"
162
+ f"Your task is to create the OFFER & BONUS section of a sales page IN SPANISH for {audience} "
163
+ f"about {product}. "
164
+ f"The section must present the offer in an irresistible way and highlight any bonuses."
165
+ f"\n\n"
166
+ )
167
+
168
+ # Añadir información sobre la oferta si se proporciona
169
+ if offer:
170
+ offer_instruction += f"The specific offer/product is: {offer}\n\n"
171
+
172
+ # Enviar el mensaje al modelo
173
+ return generate_content(offer_instruction, temperature)
174
+
175
+ # Función para generar la sección "Social Proof"
176
+ def generate_social_proof_section(audience, product, temperature, offer=None, **kwargs):
177
+ # Cargar el prompt desde el archivo
178
+ system_prompt = load_prompt_from_file("prompts/social_proof.txt")
179
+
180
+ # Instrucciones específicas para la tarea
181
+ social_proof_instruction = (
182
+ f"{system_prompt}\n\n"
183
+ f"Your task is to create the SOCIAL PROOF section of a sales page IN SPANISH for {audience} "
184
+ f"about {product}. "
185
+ f"The section must build trust through testimonials and social proof."
186
+ f"\n\n"
187
+ )
188
+
189
+ # Añadir información sobre la oferta si se proporciona
190
+ if offer:
191
+ social_proof_instruction += f"The specific offer/product is: {offer}\n\n"
192
+
193
+ # Enviar el mensaje al modelo
194
+ return generate_content(social_proof_instruction, temperature)
195
+
196
+ # Función para generar la sección "Guarantees"
197
+ def generate_guarantees_section(audience, product, temperature, offer=None, **kwargs):
198
+ # Cargar el prompt desde el archivo
199
+ system_prompt = load_prompt_from_file("prompts/guarantees.txt")
200
+
201
+ # Instrucciones específicas para la tarea
202
+ guarantees_instruction = (
203
+ f"{system_prompt}\n\n"
204
+ f"Your task is to create the GUARANTEES section of a sales page IN SPANISH for {audience} "
205
+ f"about {product}. "
206
+ f"The section must remove risk for the customer through strong guarantees."
207
+ f"\n\n"
208
+ )
209
+
210
+ # Añadir información sobre la oferta si se proporciona
211
+ if offer:
212
+ guarantees_instruction += f"The specific offer/product is: {offer}\n\n"
213
+
214
+ # Enviar el mensaje al modelo
215
+ return generate_content(guarantees_instruction, temperature)
216
+
217
+ # Función para generar la sección "Call to Action"
218
+ def generate_cta_section(audience, product, temperature, offer=None, **kwargs):
219
+ # Cargar el prompt desde el archivo
220
+ system_prompt = load_prompt_from_file("prompts/cta.txt")
221
+
222
+ # Instrucciones específicas para la tarea
223
+ cta_instruction = (
224
+ f"{system_prompt}\n\n"
225
+ f"Your task is to create the CALL TO ACTION section of a sales page IN SPANISH for {audience} "
226
+ f"about {product}. "
227
+ f"The section must drive conversions with a clear and compelling call to action."
228
+ f"\n\n"
229
+ )
230
+
231
+ # Añadir información sobre la oferta si se proporciona
232
+ if offer:
233
+ cta_instruction += f"The specific offer/product is: {offer}\n\n"
234
+
235
+ # Enviar el mensaje al modelo
236
+ return generate_content(cta_instruction, temperature)
237
+
238
+ # Función para generar la sección "P.S."
239
+ def generate_ps_section(audience, product, temperature, offer=None, **kwargs):
240
+ # Cargar el prompt desde el archivo
241
+ system_prompt = load_prompt_from_file("prompts/ps.txt")
242
+
243
+ # Instrucciones específicas para la tarea
244
+ ps_instruction = (
245
+ f"{system_prompt}\n\n"
246
+ f"Your task is to create the P.S. (POSTSCRIPT) section of a sales page IN SPANISH for {audience} "
247
+ f"about {product}. "
248
+ f"The section must add a final persuasive element that drives action."
249
+ f"\n\n"
250
+ )
251
+
252
+ # Añadir información sobre la oferta si se proporciona
253
+ if offer:
254
+ ps_instruction += f"The specific offer/product is: {offer}\n\n"
255
+
256
+ # Enviar el mensaje al modelo
257
+ return generate_content(ps_instruction, temperature)
258
+
259
+ # Función para generar la sección "Final Call to Action"
260
+ def generate_final_cta_section(audience, product, temperature, offer=None, **kwargs):
261
+ # Cargar el prompt desde el archivo
262
+ system_prompt = load_prompt_from_file("prompts/final_cta.txt")
263
+
264
+ # Instrucciones específicas para la tarea
265
+ final_cta_instruction = (
266
+ f"{system_prompt}\n\n"
267
+ f"Your task is to create the FINAL CALL TO ACTION section of a sales page IN SPANISH for {audience} "
268
+ f"about {product}. "
269
+ f"The section must drive conversions with a final, powerful call to action."
270
+ f"\n\n"
271
+ )
272
+
273
+ # Añadir información sobre la oferta si se proporciona
274
+ if offer:
275
+ final_cta_instruction += f"The specific offer/product is: {offer}\n\n"
276
+
277
+ # Enviar el mensaje al modelo
278
+ return generate_content(final_cta_instruction, temperature)
279
+
280
+ # Función para validar entradas
281
+ def validate_inputs(audience, product):
282
+ has_audience = audience.strip() != ""
283
+ has_product = product.strip() != ""
284
+ return has_audience and has_product
285
+
286
+ # Función para cargar CSS
287
+ def load_css():
288
+ css_path = "styles/styles.css"
289
+ if os.path.exists(css_path):
290
+ try:
291
+ with open(css_path, "r") as f:
292
+ st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
293
+ except Exception as e:
294
+ st.warning(f"Error al cargar el archivo CSS: {str(e)}")
295
+ else:
296
+ st.warning(f"No se encontró el archivo CSS en {css_path}")
297
+
298
+ # Configuración de la página
299
+ st.set_page_config(
300
+ page_title="CopyXpert - Generador de Páginas de Ventas",
301
+ layout="wide",
302
+ initial_sidebar_state="expanded",
303
+ menu_items=None
304
+ )
305
+ load_css()
306
+
307
+ # Leer el contenido del archivo manual.md
308
+ try:
309
+ with open("manual.md", "r", encoding="utf-8") as file:
310
+ manual_content = file.read()
311
+ # Mostrar el contenido del manual en el sidebar
312
+ st.sidebar.markdown(manual_content)
313
+ except:
314
+ st.sidebar.warning("No se pudo cargar el manual. Asegúrate de que el archivo manual.md existe.")
315
+
316
+ # Agregar título y subtítulo usando HTML
317
+ st.markdown("<h1 style='text-align: center;'>CopyXpert</h1>", unsafe_allow_html=True)
318
+ st.markdown("<h3 style='text-align: center;'>Generador de Páginas de Ventas Persuasivas</h3>", unsafe_allow_html=True)
319
+
320
+ # Interfaz principal para el generador de páginas de ventas
321
+ st.subheader("Generador de Secciones de Páginas de Ventas")
322
+
323
+ # Crear columnas para la interfaz
324
+ col1, col2 = st.columns([1, 2])
325
+
326
+ # Columna de entrada
327
+ with col1:
328
+ # Inputs básicos
329
+ sales_page_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Emprendedores digitales", key="sales_page_audience")
330
+ sales_page_product = st.text_input("¿Sobre qué producto/servicio es tu página?", placeholder="Ejemplo: Curso de marketing", key="sales_page_product")
331
+ sales_page_offer = st.text_input("¿Cuál es tu oferta específica?", placeholder="Ejemplo: Curso de marketing por $197", key="sales_page_offer")
332
+
333
+ # Selector de sección
334
+ sales_page_section = st.selectbox(
335
+ "Selecciona la sección a generar",
336
+ options=[
337
+ "Above the Fold (Encabezado)",
338
+ "Problem (Problema)",
339
+ "Solution & Benefits (Solución y Beneficios)",
340
+ "Authority (Autoridad)",
341
+ "Offer & Bonus (Oferta y Bonus)",
342
+ "Social Proof (Prueba Social)",
343
+ "Guarantees (Garantías)",
344
+ "Call to Action (Llamada a la Acción)",
345
+ "P.S. (Post-Data)",
346
+ "Final Call to Action (Llamada Final)"
347
+ ],
348
+ key="sales_page_section"
349
+ )
350
+
351
+ # Botón de generación
352
+ submit_sales_page = st.button("GENERAR SECCIÓN DE PÁGINA DE VENTAS ▶▶", key="generate_sales_page")
353
+
354
+ # Opciones avanzadas en el acordeón
355
+ with st.expander("Personaliza tu sección"):
356
+ # Slider de creatividad
357
+ sales_page_temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1, key="sales_page_temp")
358
+
359
+ # Generar y mostrar la sección de la página de ventas
360
+ if submit_sales_page:
361
+ # Validar entradas
362
+ if validate_inputs(sales_page_audience, sales_page_product):
363
+ try:
364
+ # Crear un contenedor para el spinner en la columna 2
365
+ with col2:
366
+ with st.spinner("Generando sección de página de ventas...", show_time=True):
367
+ # Mapear la selección a la función correspondiente
368
+ section_functions = {
369
+ "Above the Fold (Encabezado)": generate_above_the_fold,
370
+ "Problem (Problema)": generate_problem_section,
371
+ "Solution & Benefits (Solución y Beneficios)": generate_solution_section,
372
+ "Authority (Autoridad)": generate_authority_section,
373
+ "Offer & Bonus (Oferta y Bonus)": generate_offer_section,
374
+ "Social Proof (Prueba Social)": generate_social_proof_section,
375
+ "Guarantees (Garantías)": generate_guarantees_section,
376
+ "Call to Action (Llamada a la Acción)": generate_cta_section,
377
+ "P.S. (Post-Data)": generate_ps_section,
378
+ "Final Call to Action (Llamada Final)": generate_final_cta_section
379
+ }
380
+
381
+ # Obtener la función correspondiente
382
+ generator_func = section_functions[sales_page_section]
383
+
384
+ # Generar el contenido
385
+ generated_content = generator_func(
386
+ audience=sales_page_audience,
387
+ product=sales_page_product,
388
+ temperature=sales_page_temperature,
389
+ offer=sales_page_offer if sales_page_offer.strip() else None
390
+ )
391
+
392
+ # Mostrar el contenido generado fuera del bloque del spinner
393
+ display_generated_content(col2, generated_content, "sales_page_section")
394
+
395
+ except Exception as e:
396
+ st.error(f"Error al generar la sección: {str(e)}")
397
+ else:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  st.warning("Por favor, completa los campos de público objetivo y producto/servicio.")
formulas/webinar_formulas.py CHANGED
The diff for this file is too large to render. See raw diff
 
prompts/above_the_fold.txt ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
2
+
3
+ THE EXPERT TEAM:
4
+
5
+ 1. MASTER SALES PAGE STRATEGIST:
6
+ - Expert in sales page frameworks and conversion strategies
7
+ - Trained in the Perfect Sales Page methodology by Russell Brunson
8
+ - Ensures the copy follows proven sales page structure precisely
9
+ - Focuses on strategic placement of key conversion elements
10
+
11
+ 2. ELITE DIRECT RESPONSE COPYWRITER:
12
+ - Trained by Gary Halbert, Gary Bencivenga, and David Ogilvy
13
+ - Creates compelling headlines, hooks, and persuasive elements
14
+ - Crafts irresistible calls to action that drive conversions
15
+ - Specializes in problem-solution frameworks that resonate deeply
16
+
17
+ 3. AUDIENCE PSYCHOLOGY SPECIALIST:
18
+ - Expert in understanding audience pain points and objections
19
+ - Creates content that builds genuine connection and trust
20
+ - Identifies and addresses hidden fears and desires
21
+ - Ensures the content feels personal and relevant to the ideal customer
22
+
23
+ YOUR TASK:
24
+ Create the ABOVE THE FOLD section of a compelling sales page with a "Headline Destroyer" that captures attention immediately. Be creative and don't limit yourself to rigid templates, while incorporating these key elements in your own creative way:
25
+
26
+ HEADLINE PACK ELEMENTS (follow this 4-line structure to create an effective "Headline Destroyer", with each line separated by a paragraph break):
27
+
28
+ 1. PRE-HEADLINE (lowercase, in quotation marks):
29
+ * A shocking statistic relevant to your audience
30
+ * A provocative question that makes them stop scrolling
31
+ * A bold statement that challenges conventional wisdom
32
+ * A time-sensitive announcement that creates urgency
33
+ * A "secret revealed" approach that promises insider knowledge
34
+ * An exclusive invitation that makes them feel special
35
+ * A direct challenge to their current situation
36
+
37
+ 2. MAIN HEADLINE (ALL CAPS):
38
+ * Promise a specific transformation or desired result
39
+ * Expand on the promise with details about your system/method/program
40
+ * Include differentiating elements that make your offering unique
41
+ * This should be the most impactful and complete line of the headline pack
42
+
43
+ 3. OBJECTION HANDLER (lowercase):
44
+ * Directly address a main objection from your audience
45
+ * Start with "Even if..." or "Although..." to neutralize doubts
46
+ * Show that your solution works despite the customer's limitations
47
+
48
+ 4. CALL TO ACTION (lowercase, with arrows ➤➤ at the end):
49
+ * Start with a clear action verb
50
+ * Highlight a significant benefit aligned with the audience's deepest desires
51
+ * Create a connection between the requested action and the promised transformation
52
+ * End with the ➤➤ symbol to direct attention
53
+
54
+ IMPORTANT: Always include a paragraph break (blank line) between each of the four elements to create proper visual separation.
55
+
56
+ CREATIVE EXAMPLES:
57
+
58
+ EJEMPLO 1 (Fitness para Madres):
59
+ "El 78% de las madres abandonan su rutina de ejercicios en los primeros 14 días..."
60
+
61
+ TRANSFORMA TU CUERPO Y RECUPERA TU ENERGÍA EN SOLO 15 MINUTOS AL DÍA CON UN SISTEMA DISEÑADO ESPECÍFICAMENTE PARA MADRES OCUPADAS
62
+
63
+ Incluso si has fracasado con todas las dietas y rutinas de ejercicio que has intentado antes
64
+
65
+ Obtén tu plan personalizado hoy y recupera la energía que creías perdida para siempre ➤➤
66
+
67
+ EJEMPLO 2 (Criptomonedas):
68
+ "¿Sigues invirtiendo como en 2021? Grave error."
69
+
70
+ DESCUBRE EL MÉTODO ANTI-VOLATILIDAD QUE ESTÁ PROTEGIENDO PATRIMONIOS Y GENERANDO RETORNOS CONSISTENTES DEL 27% MIENTRAS EL MERCADO SE DESPLOMA
71
+
72
+ Aunque no tengas conocimientos técnicos ni experiencia previa en mercados financieros
73
+
74
+ Accede ahora al sistema y protege tu patrimonio mientras generas ingresos consistentes ➤➤
75
+
76
+ EJEMPLO 3 (Productividad):
77
+ "Confesión: Trabajaba 12 horas diarias hasta que descubrí esto..."
78
+
79
+ LA PARADOJA DE LA PRODUCTIVIDAD: EL SISTEMA REVOLUCIONARIO QUE TE PERMITE DUPLICAR TUS RESULTADOS TRABAJANDO LA MITAD DEL TIEMPO Y ELIMINANDO EL AGOTAMIENTO CRÓNICO
80
+
81
+ Incluso si eres adicto al trabajo y crees que necesitas estar ocupado todo el tiempo para ser productivo
82
+
83
+ Únete al programa y recupera 20+ horas semanales para lo que realmente importa ➤➤
84
+
85
+ EJEMPLO 4 (Marketing Digital):
86
+ "Solo el 3% de los pequeños negocios sobrevive al tercer año en la era digital..."
87
+
88
+ SISTEMA DE ATRACCIÓN DE CLIENTES AUTOMÁTICO: LA ESTRATEGIA PROBADA QUE ESTÁ GENERANDO DE 0 A 50 LEADS CUALIFICADOS CADA SEMANA PARA NEGOCIOS QUE ANTES LUCHABAN POR SOBREVIVIR
89
+
90
+ Aunque hayas fracasado con Facebook Ads, Google o cualquier otra plataforma de publicidad digital
91
+
92
+ Implementa la estrategia y convierte tu negocio en una máquina de ventas predecibles ➤➤
93
+
94
+ EJEMPLO 5 (Desarrollo Personal):
95
+ "¿Te has preguntado por qué algunas personas atraen oportunidades como imanes?"
96
+
97
+ EL CÓDIGO DE LA CONEXIÓN AUTÉNTICA: EL MÉTODO CIENTÍFICAMENTE PROBADO PARA CONSTRUIR UNA RED DE CONTACTOS VALIOSOS QUE ABREN PUERTAS Y MULTIPLICAN TUS OPORTUNIDADES PROFESIONALES
98
+
99
+ Incluso si eres introvertido y te aterra la idea de "hacer networking" tradicional
100
+
101
+ Domina el método y desbloquea puertas que ni siquiera sabías que existían ➤➤
102
+
103
+ EJEMPLO 6 (Marketing Digital):
104
+ "Solo el 3% de los pequeños negocios sobrevive al tercer año en la era digital..."
105
+ SISTEMA DE ATRACCIÓN DE CLIENTES AUTOMÁTICO: DE 0 A 50 LEADS CUALIFICADOS CADA SEMANA
106
+ Sin necesidad de ser experto en tecnología ni invertir miles en publicidad
107
+ Laura Gómez, especialista en marketing para negocios locales con más de 300 casos de éxito documentados.
108
+
109
+ EJEMPLO 5 (Desarrollo Personal):
110
+ "¿Te has preguntado por qué algunas personas atraen oportunidades como imanes?"
111
+ EL CÓDIGO DE LA CONEXIÓN AUTÉNTICA: CÓMO CONSTRUIR UNA RED DE CONTACTOS VALIOSOS SIN SER EXTROVERTIDO
112
+ Descubre el método que está revolucionando las relaciones profesionales y personales
113
+ Daniel Ruiz, investigador de psicología social y creador del programa "Conexiones que Transforman".
114
+
115
+ FORMAT REQUIREMENTS:
116
+ - Create a powerful "Headline Destroyer" that captures attention in seconds
117
+ - Include creative ways to identify the target audience
118
+ - Address main objections in compelling ways
119
+ - Include the sender name and purpose statement naturally
120
+ - Ensure it speaks directly to the specific target market
121
+ - Write in Spanish
122
+ - Start directly with the sales page content without introductory text
123
+ - Be creative and compelling - avoid formulaic structures
124
+
125
+ EXAMPLE HEADLINE PACK:
126
+ "Atención: Solo para inversionistas en bienes raíces principiantes.
127
+ CÓMO HACER TU PRIMERA INVERSIÓN SEGURA EN BIENES RAÍCES EN 3 SIMPLES PASOS…
128
+ (incluso si tienes poco capital disponible).
129
+ De parte de Gabriel Sarabio.
130
+ EN RESPUESTA A: ¿CÓMO HACER MI PRIMERA INVERSIÓN EN BIENES RAÍCES DE FORMA SEGURA?"
131
+
132
+ IMPORTANT INSTRUCTIONS:
133
+ - Write the entire section in Spanish
134
+ - Create a powerful headline that captures attention immediately
135
+ - Focus on the transformation your product/service provides
136
+ - Highlight the main benefit in the subheadline
137
+ - Create a sense of urgency and curiosity
138
+ - Include a clear call to action
139
+ - Use language that resonates with your specific audience
140
+ - Be creative and don't just follow a rigid formula - make it compelling and unique
prompts/authority.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the AUTHORITY section of a compelling sales page that establishes credibility and trust.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Highlight credentials, experience, and expertise
8
+ - Mention media appearances, publications, or recognition
9
+ - Include relevant statistics or achievements
10
+ - Establish why you are qualified to solve the customer's problem
11
+ - Write in Spanish
12
+
13
+ EXAMPLE AUTHORITY SECTION:
14
+ "Hemos ayudado a más de 10,000 emprendedores a alcanzar sus metas financieras. Aparecimos en Forbes y Entrepreneur."
15
+
16
+ IMPORTANT INSTRUCTIONS:
17
+ - Write the entire section in Spanish
18
+ - Establish credibility through specific achievements
19
+ - Include relevant statistics that build trust
20
+ - Mention any media appearances or recognition
21
+ - Explain why you are qualified to solve the customer's problem
prompts/cta.txt ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the CALL TO ACTION section of a compelling sales page that drives conversions.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Create a clear and compelling call to action
8
+ - Use action-oriented language
9
+ - Remind the reader of the key benefits
10
+ - Create a sense of urgency
11
+ - Make the next step obvious and easy
12
+ - Write in Spanish
13
+
14
+ EXAMPLE CALL TO ACTION SECTION:
15
+ "Haz clic en el botón ahora y comienza tu transformación hoy mismo."
16
+
17
+ IMPORTANT INSTRUCTIONS:
18
+ - Write the entire section in Spanish
19
+ - Create a clear and compelling call to action
20
+ - Use action-oriented language
21
+ - Remind the reader of the key benefits
22
+ - Create a sense of urgency
23
+ - Make the next step obvious and easy
prompts/final_cta.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the FINAL CALL TO ACTION section of a compelling sales page that drives conversions.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Create a final, powerful call to action
8
+ - Use strong, action-oriented language
9
+ - Make the button text clear and compelling
10
+ - Create a sense of urgency and excitement
11
+ - Write in Spanish
12
+
13
+ EXAMPLE FINAL CALL TO ACTION SECTION:
14
+ "¡RESERVA TU PLAZA AHORA!"
15
+
16
+ IMPORTANT INSTRUCTIONS:
17
+ - Write the entire section in Spanish
18
+ - Create a final, powerful call to action
19
+ - Use strong, action-oriented language
20
+ - Make the button text clear and compelling
21
+ - Create a sense of urgency and excitement
prompts/guarantees.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the GUARANTEES section of a compelling sales page that removes risk for the customer.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Clearly state the guarantee terms
8
+ - Explain how the guarantee works
9
+ - Address potential objections or concerns
10
+ - Build trust through risk reversal
11
+ - Write in Spanish
12
+
13
+ EXAMPLE GUARANTEES SECTION:
14
+ "Si no estás satisfecho, te devolvemos el 100% de tu dinero. Sin preguntas."
15
+
16
+ IMPORTANT INSTRUCTIONS:
17
+ - Write the entire section in Spanish
18
+ - Clearly state the guarantee terms
19
+ - Explain how the guarantee works
20
+ - Address potential objections or concerns
21
+ - Build trust through risk reversal
prompts/offer_bonus.txt ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the OFFER & BONUS section of a compelling sales page that presents the offer in an irresistible way.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Present the offer clearly with pricing information
8
+ - Highlight any discounts or limited-time offers
9
+ - Detail the bonuses included with the purchase
10
+ - Emphasize the value proposition
11
+ - Create a sense of urgency or scarcity
12
+ - Write in Spanish
13
+
14
+ EXAMPLE OFFER & BONUS SECTION:
15
+ "Por tiempo limitado, obtén acceso al curso completo por solo $99 (antes $299) e incluye 3 bonus exclusivos."
16
+
17
+ IMPORTANT INSTRUCTIONS:
18
+ - Write the entire section in Spanish
19
+ - Present the offer clearly with pricing details
20
+ - Highlight any discounts or special offers
21
+ - Detail the bonuses included with the purchase
22
+ - Emphasize the total value the customer receives
23
+ - Create a sense of urgency or scarcity
prompts/problem.txt ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
2
+
3
+ YOUR TASK:
4
+ Create the PROBLEM section of a compelling sales page that addresses the pain points of the ideal customer.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Describe the pain points your target audience is experiencing
8
+ - Use questions to help prospects identify with the problem
9
+ - Agitate the problem by explaining consequences of not solving it
10
+ - Include specific examples that resonate with your audience
11
+ - Make the prospect feel understood
12
+ - Use language and scenarios specific to the target market
13
+ - Write in Spanish
14
+
15
+ EXAMPLE PROBLEM SECTION:
16
+ "¿Estás cansado de trabajar largas horas y no ver resultados? ¿Sientes que no tienes tiempo para disfrutar de tu vida?"
17
+
18
+ IMPORTANT INSTRUCTIONS:
19
+ - Write the entire section in Spanish
20
+ - Identify and describe the main pain points of your target audience
21
+ - Use questions that help prospects identify with the problem
22
+ - Agitate the problem by explaining the consequences of not solving it
23
+ - Include specific examples that resonate with your audience
24
+ - Make the prospect feel understood
prompts/ps.txt ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the P.S. (POSTSCRIPT) section of a compelling sales page that adds a final persuasive element.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Start with "P.S." or "Recuerda"
8
+ - Add a final compelling reason to act now
9
+ - Remind the reader of scarcity or urgency
10
+ - Reinforce a key benefit or address a final objection
11
+ - Keep it brief but impactful
12
+ - Write in Spanish
13
+
14
+ EXAMPLE P.S. SECTION:
15
+ "P.S. Recuerda, esta oferta especial termina en 24 horas. No pierdas esta oportunidad."
16
+
17
+ IMPORTANT INSTRUCTIONS:
18
+ - Write the entire section in Spanish
19
+ - Start with "P.S." or "Recuerda"
20
+ - Add a final compelling reason to act now
21
+ - Remind the reader of scarcity or urgency
22
+ - Reinforce a key benefit or address a final objection
23
+ - Keep it brief but impactful
prompts/social_proof.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers.
2
+
3
+ YOUR TASK:
4
+ Create the SOCIAL PROOF section of a compelling sales page that builds trust through testimonials.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Include testimonials from satisfied customers
8
+ - Highlight specific results or transformations
9
+ - Use full names and relevant details when possible
10
+ - Include diverse testimonials that address different benefits
11
+ - Write in Spanish
12
+
13
+ EXAMPLE SOCIAL PROOF SECTION:
14
+ "Mira lo que dicen nuestros clientes: 'Gracias a este curso, tripliqué mis ingresos en solo 2 meses' - Ana G."
15
+
16
+ IMPORTANT INSTRUCTIONS:
17
+ - Write the entire section in Spanish
18
+ - Create realistic and specific testimonials
19
+ - Include full names and relevant details
20
+ - Highlight specific results or transformations
21
+ - Address different benefits or use cases
prompts/solution_benefits.txt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are a collaborative team of world-class experts working together to create an exceptional sales page that converts visitors into customers by addressing their pain points and offering compelling solutions.
2
+
3
+ YOUR TASK:
4
+ Create the SOLUTION & BENEFITS section of a compelling sales page that offers a solution through the product/service.
5
+
6
+ FORMAT REQUIREMENTS:
7
+ - Present your product/service as the ideal solution to the problems described
8
+ - Highlight the key features and their corresponding benefits
9
+ - Explain how your solution works in a clear, step-by-step manner
10
+ - Include specific results or transformations customers can expect
11
+ - Address potential objections preemptively
12
+ - Use bullet points to highlight key benefits
13
+ - Write in Spanish
14
+
15
+ EXAMPLE SOLUTION & BENEFITS SECTION:
16
+ "Con nuestro sistema probado, aprenderás a automatizar tus procesos y generar ingresos pasivos mientras disfrutas de tu tiempo libre."
17
+
18
+ IMPORTANT INSTRUCTIONS:
19
+ - Write the entire section in Spanish
20
+ - Present your product/service as the ideal solution to the problems described
21
+ - Highlight the key features and their corresponding benefits
22
+ - Explain how your solution works in a clear, step-by-step manner
23
+ - Include specific results or transformations customers can expect
24
+ - Address potential objections preemptively
25
+ - Use bullet points to highlight key benefits
styles/styles.css CHANGED
@@ -1,240 +1,240 @@
1
- /* Custom button styles for Perfect Webinar Framework */
2
-
3
- /* Generate Webinar Script button - yellow with black border */
4
- div.stButton > button:first-child {
5
- width: 100%;
6
- margin-top: 0.5rem;
7
- border-radius: 5px;
8
- height: 3em;
9
- background: #FFD700; /* Solid yellow color like in the image */
10
- color: black;
11
- font-weight: bold;
12
- border: 1px solid black; /* Changed to 1px border */
13
- transition: all 0.3s ease;
14
- }
15
-
16
- div.stButton > button:first-child:hover {
17
- background: #FFDF33; /* Slightly brighter yellow on hover */
18
- transform: translateY(-2px);
19
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
20
- border: 1px solid black;
21
- }
22
-
23
- /* Download buttons - green/blue gradient */
24
- div.stDownloadButton > button:first-child {
25
- background: linear-gradient(90deg, #4CAF50, #2196F3); /* Green to blue gradient */
26
- color: white; /* White text for better visibility on gradient */
27
- font-weight: bold;
28
- padding: 0.5rem 1rem;
29
- border-radius: 5px;
30
- border: 1px solid black; /* 1px border as requested */
31
- transition: all 0.3s;
32
- width: 80%; /* Width 80% as requested */
33
- margin: 0 auto;
34
- display: block;
35
- }
36
-
37
- div.stDownloadButton > button:first-child: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: 2px solid black !important;
42
- }
43
-
44
- /* Special styling for download buttons in the webinar names container */
45
- .webinar-names-container div.stDownloadButton > button:first-child {
46
- background: linear-gradient(90deg, #FF5722, #FF9800); /* Orange gradient */
47
- color: white;
48
- font-weight: bold;
49
- border: 1px solid black;
50
- }
51
-
52
- .webinar-names-container div.stDownloadButton > button:first-child:hover {
53
- background: linear-gradient(135deg, #FF7043, #FFA726);
54
- transform: translateY(-2px) !important;
55
- box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
56
- border: 2px solid black !important;
57
- }
58
-
59
-
60
- /* Reduce top spacing and hide unnecessary elements */
61
- .block-container {
62
- padding-top: 1rem;
63
- padding-bottom: 0rem;
64
- }
65
-
66
- header {
67
- visibility: hidden;
68
- }
69
-
70
- #MainMenu {
71
- visibility: hidden;
72
- }
73
-
74
- footer {
75
- visibility: hidden;
76
- }
77
-
78
- /* Add any other custom styles here */
79
-
80
-
81
- /* Styles for the webinar names container in the second tab */
82
- .webinar-names-container {
83
- padding: 15px;
84
- margin-top: 10px;
85
- margin-bottom: 10px;
86
- }
87
-
88
- /* Add border to all webinar name containers */
89
- .webinar-names-container.with-border {
90
- border: 1px solid #ddd;
91
- border-radius: 5px;
92
- padding: 20px;
93
- }
94
-
95
- /* Additional styling for containers with many items */
96
- .webinar-names-container.many-items .stDownloadButton {
97
- margin-top: 15px;
98
- margin-bottom: 15px;
99
- }
100
-
101
- /* Special styling for download buttons in the webinar names tab */
102
- div.stDownloadButton[data-testid*="download_top_names"] > button:first-child,
103
- div.stDownloadButton[data-testid*="download_bottom_names"] > button:first-child {
104
- background: linear-gradient(90deg, #FF5722, #FF9800) !important; /* Orange gradient */
105
- color: white !important;
106
- font-weight: bold !important;
107
- border: 1px solid black !important;
108
- }
109
-
110
- div.stDownloadButton[data-testid*="download_top_names"] > button:first-child:hover,
111
- div.stDownloadButton[data-testid*="download_bottom_names"] > button:first-child:hover {
112
- background: linear-gradient(135deg, #FF7043, #FFA726) !important;
113
- transform: translateY(-2px) !important;
114
- box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
115
- border: 2px solid black !important;
116
- }
117
-
118
-
119
- /* Custom download button for names tab */
120
- .custom-download-button.names-download-button {
121
- background: linear-gradient(90deg, #FF5722, #FF9800); /* Orange gradient */
122
- color: white;
123
- font-weight: bold;
124
- padding: 0.75rem 1rem;
125
- border-radius: 5px;
126
- border: 1px solid #333;
127
- text-align: center;
128
- margin: 20px auto;
129
- width: 80%;
130
- cursor: pointer;
131
- transition: all 0.3s;
132
- display: block;
133
- }
134
-
135
- .custom-download-button.names-download-button:hover {
136
- background: linear-gradient(135deg, #FF7043, #FFA726);
137
- transform: translateY(-2px);
138
- box-shadow: 0 4px 8px rgba(0,0,0,0.3);
139
- border: 2px solid #333;
140
- }
141
-
142
- /* Make sure links inside the button inherit the text color */
143
- .custom-download-button.names-download-button a {
144
- color: white !important;
145
- display: block;
146
- width: 100%;
147
- height: 100%;
148
- font-weight: bold;
149
- text-decoration: none !important;
150
- }
151
-
152
- /* Custom button styles for Sales Page Generator */
153
-
154
- /* Generate Sales Page Section button - yellow with black border */
155
- div.stButton > button:first-child {
156
- width: 100%;
157
- margin-top: 0.5rem;
158
- margin-bottom: 1rem;
159
- border-radius: 5px;
160
- height: 3em;
161
- background: #FFD700; /* Solid yellow color */
162
- color: black;
163
- font-weight: bold;
164
- border: 1px solid black;
165
- transition: all 0.3s ease;
166
- padding: 0.5rem 1rem;
167
- }
168
-
169
- div.stButton > button:first-child:hover {
170
- background: #FFDF33; /* Slightly brighter yellow on hover */
171
- transform: translateY(-2px);
172
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
173
- border: 1px solid black;
174
- }
175
-
176
- /* Download buttons - green/blue gradient */
177
- div.stDownloadButton > button:first-child {
178
- background: linear-gradient(90deg, #4CAF50, #2196F3); /* Green to blue gradient */
179
- color: white; /* White text for better visibility on gradient */
180
- font-weight: bold;
181
- padding: 0.75rem 1.25rem;
182
- border-radius: 5px;
183
- border: 1px solid black;
184
- transition: all 0.3s;
185
- width: 80%;
186
- margin: 1rem auto;
187
- display: block;
188
- }
189
-
190
- div.stDownloadButton > button:first-child:hover {
191
- background: linear-gradient(135deg, #3ED83E 0%, #4169E1 100%);
192
- transform: translateY(-2px) !important;
193
- box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
194
- border: 2px solid black !important;
195
- }
196
-
197
- /* Reduce top spacing and hide unnecessary elements */
198
- .block-container {
199
- padding-top: 1rem;
200
- padding-bottom: 1rem;
201
- }
202
-
203
- header {
204
- visibility: hidden;
205
- }
206
-
207
- #MainMenu {
208
- visibility: hidden;
209
- }
210
-
211
- footer {
212
- visibility: hidden;
213
- }
214
-
215
- /* Subheader styling */
216
- h3 {
217
- margin-top: 1.5rem;
218
- margin-bottom: 1rem;
219
- padding: 0.5rem 0;
220
- }
221
-
222
- /* Content display area */
223
- .stMarkdown {
224
- padding: 1rem;
225
- margin-top: 0.5rem;
226
- margin-bottom: 0.5rem;
227
- border-radius: 5px;
228
- }
229
-
230
- /* Spinner styling */
231
- div.stSpinner > div {
232
- margin: 1rem auto;
233
- }
234
-
235
- /* Warning and error messages */
236
- div.stAlert {
237
- padding: 1rem;
238
- margin: 1rem 0;
239
- border-radius: 5px;
240
  }
 
1
+ /* Custom button styles for Perfect Webinar Framework */
2
+
3
+ /* Generate Webinar Script button - yellow with black border */
4
+ div.stButton > button:first-child {
5
+ width: 100%;
6
+ margin-top: 0.5rem;
7
+ border-radius: 5px;
8
+ height: 3em;
9
+ background: #FFD700; /* Solid yellow color like in the image */
10
+ color: black;
11
+ font-weight: bold;
12
+ border: 1px solid black; /* Changed to 1px border */
13
+ transition: all 0.3s ease;
14
+ }
15
+
16
+ div.stButton > button:first-child:hover {
17
+ background: #FFDF33; /* Slightly brighter yellow on hover */
18
+ transform: translateY(-2px);
19
+ box-shadow: 0 4px 8px rgba(0,0,0,0.2);
20
+ border: 1px solid black;
21
+ }
22
+
23
+ /* Download buttons - green/blue gradient */
24
+ div.stDownloadButton > button:first-child {
25
+ background: linear-gradient(90deg, #4CAF50, #2196F3); /* Green to blue gradient */
26
+ color: white; /* White text for better visibility on gradient */
27
+ font-weight: bold;
28
+ padding: 0.5rem 1rem;
29
+ border-radius: 5px;
30
+ border: 1px solid black; /* 1px border as requested */
31
+ transition: all 0.3s;
32
+ width: 80%; /* Width 80% as requested */
33
+ margin: 0 auto;
34
+ display: block;
35
+ }
36
+
37
+ div.stDownloadButton > button:first-child: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: 2px solid black !important;
42
+ }
43
+
44
+ /* Special styling for download buttons in the webinar names container */
45
+ .webinar-names-container div.stDownloadButton > button:first-child {
46
+ background: linear-gradient(90deg, #FF5722, #FF9800); /* Orange gradient */
47
+ color: white;
48
+ font-weight: bold;
49
+ border: 1px solid black;
50
+ }
51
+
52
+ .webinar-names-container div.stDownloadButton > button:first-child:hover {
53
+ background: linear-gradient(135deg, #FF7043, #FFA726);
54
+ transform: translateY(-2px) !important;
55
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
56
+ border: 2px solid black !important;
57
+ }
58
+
59
+
60
+ /* Reduce top spacing and hide unnecessary elements */
61
+ .block-container {
62
+ padding-top: 1rem;
63
+ padding-bottom: 0rem;
64
+ }
65
+
66
+ header {
67
+ visibility: hidden;
68
+ }
69
+
70
+ #MainMenu {
71
+ visibility: hidden;
72
+ }
73
+
74
+ footer {
75
+ visibility: hidden;
76
+ }
77
+
78
+ /* Add any other custom styles here */
79
+
80
+
81
+ /* Styles for the webinar names container in the second tab */
82
+ .webinar-names-container {
83
+ padding: 15px;
84
+ margin-top: 10px;
85
+ margin-bottom: 10px;
86
+ }
87
+
88
+ /* Add border to all webinar name containers */
89
+ .webinar-names-container.with-border {
90
+ border: 1px solid #ddd;
91
+ border-radius: 5px;
92
+ padding: 20px;
93
+ }
94
+
95
+ /* Additional styling for containers with many items */
96
+ .webinar-names-container.many-items .stDownloadButton {
97
+ margin-top: 15px;
98
+ margin-bottom: 15px;
99
+ }
100
+
101
+ /* Special styling for download buttons in the webinar names tab */
102
+ div.stDownloadButton[data-testid*="download_top_names"] > button:first-child,
103
+ div.stDownloadButton[data-testid*="download_bottom_names"] > button:first-child {
104
+ background: linear-gradient(90deg, #FF5722, #FF9800) !important; /* Orange gradient */
105
+ color: white !important;
106
+ font-weight: bold !important;
107
+ border: 1px solid black !important;
108
+ }
109
+
110
+ div.stDownloadButton[data-testid*="download_top_names"] > button:first-child:hover,
111
+ div.stDownloadButton[data-testid*="download_bottom_names"] > button:first-child:hover {
112
+ background: linear-gradient(135deg, #FF7043, #FFA726) !important;
113
+ transform: translateY(-2px) !important;
114
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
115
+ border: 2px solid black !important;
116
+ }
117
+
118
+
119
+ /* Custom download button for names tab */
120
+ .custom-download-button.names-download-button {
121
+ background: linear-gradient(90deg, #FF5722, #FF9800); /* Orange gradient */
122
+ color: white;
123
+ font-weight: bold;
124
+ padding: 0.75rem 1rem;
125
+ border-radius: 5px;
126
+ border: 1px solid #333;
127
+ text-align: center;
128
+ margin: 20px auto;
129
+ width: 80%;
130
+ cursor: pointer;
131
+ transition: all 0.3s;
132
+ display: block;
133
+ }
134
+
135
+ .custom-download-button.names-download-button:hover {
136
+ background: linear-gradient(135deg, #FF7043, #FFA726);
137
+ transform: translateY(-2px);
138
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3);
139
+ border: 2px solid #333;
140
+ }
141
+
142
+ /* Make sure links inside the button inherit the text color */
143
+ .custom-download-button.names-download-button a {
144
+ color: white !important;
145
+ display: block;
146
+ width: 100%;
147
+ height: 100%;
148
+ font-weight: bold;
149
+ text-decoration: none !important;
150
+ }
151
+
152
+ /* Custom button styles for Sales Page Generator */
153
+
154
+ /* Generate Sales Page Section button - yellow with black border */
155
+ div.stButton > button:first-child {
156
+ width: 100%;
157
+ margin-top: 0.5rem;
158
+ margin-bottom: 1rem;
159
+ border-radius: 5px;
160
+ height: 3em;
161
+ background: #FFD700; /* Solid yellow color */
162
+ color: black;
163
+ font-weight: bold;
164
+ border: 1px solid black;
165
+ transition: all 0.3s ease;
166
+ padding: 0.5rem 1rem;
167
+ }
168
+
169
+ div.stButton > button:first-child:hover {
170
+ background: #FFDF33; /* Slightly brighter yellow on hover */
171
+ transform: translateY(-2px);
172
+ box-shadow: 0 4px 8px rgba(0,0,0,0.2);
173
+ border: 1px solid black;
174
+ }
175
+
176
+ /* Download buttons - green/blue gradient */
177
+ div.stDownloadButton > button:first-child {
178
+ background: linear-gradient(90deg, #4CAF50, #2196F3); /* Green to blue gradient */
179
+ color: white; /* White text for better visibility on gradient */
180
+ font-weight: bold;
181
+ padding: 0.75rem 1.25rem;
182
+ border-radius: 5px;
183
+ border: 1px solid black;
184
+ transition: all 0.3s;
185
+ width: 80%;
186
+ margin: 1rem auto;
187
+ display: block;
188
+ }
189
+
190
+ div.stDownloadButton > button:first-child:hover {
191
+ background: linear-gradient(135deg, #3ED83E 0%, #4169E1 100%);
192
+ transform: translateY(-2px) !important;
193
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3) !important;
194
+ border: 2px solid black !important;
195
+ }
196
+
197
+ /* Reduce top spacing and hide unnecessary elements */
198
+ .block-container {
199
+ padding-top: 1rem;
200
+ padding-bottom: 1rem;
201
+ }
202
+
203
+ header {
204
+ visibility: hidden;
205
+ }
206
+
207
+ #MainMenu {
208
+ visibility: hidden;
209
+ }
210
+
211
+ footer {
212
+ visibility: hidden;
213
+ }
214
+
215
+ /* Subheader styling */
216
+ h3 {
217
+ margin-top: 1.5rem;
218
+ margin-bottom: 1rem;
219
+ padding: 0.5rem 0;
220
+ }
221
+
222
+ /* Content display area */
223
+ .stMarkdown {
224
+ padding: 1rem;
225
+ margin-top: 0.5rem;
226
+ margin-bottom: 0.5rem;
227
+ border-radius: 5px;
228
+ }
229
+
230
+ /* Spinner styling */
231
+ div.stSpinner > div {
232
+ margin: 1rem auto;
233
+ }
234
+
235
+ /* Warning and error messages */
236
+ div.stAlert {
237
+ padding: 1rem;
238
+ margin: 1rem 0;
239
+ border-radius: 5px;
240
  }