JeCabrera commited on
Commit
d3c442c
·
verified ·
1 Parent(s): 29ba42f

Upload 11 files

Browse files
Files changed (7) hide show
  1. README.md +3 -3
  2. ad_objectives.py +45 -0
  3. ads_formulas.py +214 -0
  4. app.py +71 -47
  5. copywriter_personas.py +68 -0
  6. emotional_angles.py +72 -0
  7. prompts.py +136 -53
README.md CHANGED
@@ -1,11 +1,11 @@
1
  ---
2
  license: afl-3.0
3
- title: FB ADS Generator CopyXpert 1G
4
  sdk: streamlit
5
  emoji: 🏆
6
  colorFrom: red
7
  colorTo: yellow
8
  pinned: true
9
- sdk_version: 1.43.2
10
- short_description: Make FB ADS
11
  ---
 
1
  ---
2
  license: afl-3.0
3
+ title: Bullet_Generator 2G
4
  sdk: streamlit
5
  emoji: 🏆
6
  colorFrom: red
7
  colorTo: yellow
8
  pinned: true
9
+ sdk_version: 1.42.2
10
+ short_description: Transform your audience's thoughts into persuasive bullets
11
  ---
ad_objectives.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Diccionario de objetivos de anuncios de Meta
2
+ ad_objectives = {
3
+ "ninguno": {
4
+ "name": "Ninguno",
5
+ "description": "Sin objetivo específico de campaña",
6
+ "key_metrics": ["Métricas generales"],
7
+ "copy_strategy": "Crear un anuncio equilibrado sin enfoque en métricas específicas"
8
+ },
9
+ "awareness": {
10
+ "name": "Reconocimiento",
11
+ "description": "Aumentar la visibilidad de tu marca y llegar a personas con mayor probabilidad de recordarla",
12
+ "key_metrics": ["Alcance", "Impresiones", "Mejora de recuerdo del anuncio", "Reproducciones de video"],
13
+ "copy_strategy": "Utilizar mensajes memorables que destaquen la identidad de marca, crear contenido que genere impacto visual y emocional, y enfatizar lo que hace única a la marca"
14
+ },
15
+ "traffic": {
16
+ "name": "Tráfico",
17
+ "description": "Dirigir personas a un destino específico como sitio web, página de Facebook, tienda de Instagram o app",
18
+ "key_metrics": ["Clics en enlaces", "Visualizaciones de página", "Alcance único diario", "Impresiones"],
19
+ "copy_strategy": "Incluir CTAs claros y directos, crear urgencia para visitar el destino, destacar el valor que encontrarán al hacer clic, y usar lenguaje que invite a la acción inmediata"
20
+ },
21
+ "engagement": {
22
+ "name": "Interacción",
23
+ "description": "Promover interacciones con tu página, publicaciones, videos o iniciar conversaciones en Messenger",
24
+ "key_metrics": ["Interacciones con la página", "Interacciones con publicaciones", "Reproducciones de video", "Mensajes"],
25
+ "copy_strategy": "Formular preguntas intrigantes, invitar a compartir opiniones, crear contenido que genere debate, y utilizar un tono conversacional que fomente la participación"
26
+ },
27
+ "leads": {
28
+ "name": "Clientes potenciales",
29
+ "description": "Recopilar información de contacto de personas interesadas en tu negocio a través de formularios",
30
+ "key_metrics": ["Generación de leads", "Mensajes", "Conversiones", "Costo por lead"],
31
+ "copy_strategy": "Ofrecer valor claro a cambio de la información de contacto, destacar beneficios exclusivos, minimizar la percepción de riesgo, y crear una sensación de oportunidad limitada"
32
+ },
33
+ "app_promotion": {
34
+ "name": "Promoción de la app",
35
+ "description": "Aumentar las instalaciones y acciones específicas dentro de tu aplicación móvil",
36
+ "key_metrics": ["Instalaciones de app", "Acciones en la app", "Costo por instalación"],
37
+ "copy_strategy": "Destacar las funcionalidades únicas de la app, enfatizar la facilidad de uso, mostrar capturas de pantalla atractivas, y comunicar claramente el problema que resuelve la app"
38
+ },
39
+ "sales": {
40
+ "name": "Ventas",
41
+ "description": "Maximizar las conversiones y ventas en tu sitio web, app o tienda en Facebook o Instagram",
42
+ "key_metrics": ["Conversiones", "Ventas de catálogo", "Valor de pedido promedio", "ROAS"],
43
+ "copy_strategy": "Enfatizar ofertas irresistibles, crear sensación de escasez o urgencia, destacar testimonios de clientes satisfechos, y eliminar objeciones de compra con garantías claras"
44
+ }
45
+ }
ads_formulas.py ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ads_formulas = {
2
+ "PASA": {
3
+ "description": """
4
+ La fórmula P.A.S.A. es una de las estructuras más efectivas en copywriting, diseñada para crear una conexión emocional profunda que lleva a la acción.
5
+ TEORÍA:
6
+ Esta fórmula se basa en la psicología del dolor y el alivio, siguiendo el principio de que las personas están más motivadas a evitar el dolor que a buscar el placer.
7
+ ESTRUCTURA:
8
+ 1. Problema:
9
+ - Identifica un dolor específico y real
10
+ - Debe ser inmediatamente reconocible por la audiencia
11
+ - Se presenta desde la perspectiva del lector
12
+ - Usa lenguaje empático y comprensivo
13
+ 2. Agitación:
14
+ - Profundiza en las consecuencias emocionales
15
+ - Explora ramificaciones futuras
16
+ - Aumenta la tensión psicológica
17
+ - Crea un punto de inflexión emocional
18
+ 3. Solución:
19
+ - Presenta la respuesta de forma natural
20
+ - Enfoca en beneficios transformacionales
21
+ - Construye credibilidad gradualmente
22
+ - Demuestra el cambio positivo
23
+ 4. Acción:
24
+ - Propone el siguiente paso lógico
25
+ - Minimiza la fricción y resistencia
26
+ - Crea sentido de urgencia
27
+ """,
28
+ "examples": [
29
+ {
30
+ "title": "Mentoría para Emprendedores que Quieren Vender desde su Autenticidad",
31
+ "target": "Emprendedores y profesionales que ofrecen servicios",
32
+ "action": "Reserva tu sesión de 45 minutos y duplica tus ventas siendo tú mismo",
33
+ "story": """
34
+ Me quedaba sin palabras en cada llamada de ventas. No porque no supiera de mi trabajo - era porque cada frase sonaba prestada, artificial, como si estuviera leyendo el guion de otra persona.
35
+ Los potenciales clientes lo sentían. Sus respuestas eran educadas pero distantes: "Necesito pensarlo", "No es el momento", "Te escribo después". El silencio que seguía era ensordecedor.
36
+ Lo que más me dolía era ver cómo otros, con menos experiencia, conectaban instantáneamente con sus clientes. Sus conversaciones fluían con naturalidad, como si estuvieran charlando con un viejo amigo.
37
+ La revelación llegó cuando entendí que estaba intentando ser alguien más. Las ventas no se tratan de técnicas perfectas o scripts memorizados - se trata de crear conexiones genuinas.
38
+ Cuando comencé a ser yo mismo, algo mágico sucedió. Las conversaciones se volvieron fluidas, naturales. Los clientes dejaron de poner excusas y comenzaron a preguntar: "¿Cuándo podemos empezar?"
39
+ Si te sientes atrapado en un ciclo de conversaciones que no llevan a ninguna parte, hay otra manera.
40
+ Reserva tu sesión de descubrimiento y en solo 45 minutos descubre cómo tu autenticidad puede ser tu mejor herramienta de ventas.
41
+ Clic aquí en este link para reservar.
42
+ """
43
+ },
44
+ {
45
+ "title": "Curso de Escritura que Transforma Seguidores en Comunidad",
46
+ "target": "Emprendedores y creadores de contenido",
47
+ "action": "Descarga la guía 'Escritura que Conecta' y convierte cada post en una máquina de ventas orgánicas",
48
+ "story": """
49
+ Cada publicación se sentía como lanzar palabras al vacío. Dedicaba horas puliendo cada frase, solo para ver cómo se perdía en el infinito scroll de las redes sociales. Un like aquí, un comentario allá, pero la conexión real que buscaba nunca llegaba.
50
+ Lo más frustrante era observar cómo otros creadores, aparentemente sin esfuerzo, construían comunidades vibrantes alrededor de su contenido. Sus palabras resonaban, creaban movimiento, inspiraban acción.
51
+ La diferencia no estaba en escribir más, ni en seguir las últimas tendencias. Estaba en algo más profundo: la capacidad de transformar experiencias personales en mensajes que tocan el corazón de quien los lee.
52
+ Cuando dejé de intentar sonar como "experto" y comencé a escribir desde mi verdad, todo cambió. Mis publicaciones dejaron de ser solo contenido y se convirtieron en conversaciones. Los comentarios pasaron de emojis a historias personales. Los seguidores se transformaron en una comunidad conectada por valores compartidos.
53
+ Si estás cansado de sentir que tus palabras no llegan a donde deberían, si sabes que tienes algo valioso que compartir pero no encuentras cómo expresarlo, hay un camino diferente.
54
+ Descarga la guía 'Escritura que Conecta' y convierte cada post en una máquina de ventas orgánicas.
55
+ Para descagar solo da clic aquí.
56
+ """
57
+ }
58
+ ]
59
+ },
60
+
61
+ "ADP": {
62
+ "description": """
63
+ La fórmula A.D.P. (Antes/Después/Puente) es una estructura persuasiva que crea una conexión emocional mostrando la transformación desde el problema hasta la solución.
64
+ TEORÍA:
65
+ Esta fórmula se basa en el contraste entre la situación actual y el resultado deseado, usando tu solución como el puente natural entre ambos estados.
66
+ ESTRUCTURA:
67
+ 1. Antes:
68
+ - Describe vívidamente la situación problemática actual
69
+ - Refleja las frustraciones y miedos de la audiencia
70
+ - Identifica los obstáculos que impiden alcanzar objetivos
71
+ - Usa lenguaje empático y descriptivo
72
+ - Crea conexión inmediata con experiencias cotidianas
73
+ 2. Después:
74
+ - Pinta el escenario ideal post-solución
75
+ - Describe beneficios tangibles y emocionales
76
+ - Muestra la transformación positiva
77
+ - Enfatiza el contraste con la situación inicial
78
+ - Genera deseo por el resultado prometido
79
+ 3. Puente:
80
+ - Presenta tu solución como el camino natural
81
+ - Explica el proceso de transformación
82
+ - Demuestra la viabilidad del cambio
83
+ - Minimiza barreras y objeciones
84
+ - Proporciona pasos claros hacia el resultado
85
+ """,
86
+ "examples": [
87
+ {
88
+ "title": "Curso de Cocina Saludable",
89
+ "target": "Profesionales sin tiempo",
90
+ "action": "Reservar clase prueba gratuita",
91
+ "story": """
92
+ Mi nevera era el museo de las buenas intenciones: vegetales marchitos y tuppers con contenido irreconocible. Los deliverys conocían mejor mi dirección que mi familia.
93
+ El diagnóstico de pre-diabetes fue mi llamada de atención. Entre el trabajo y el gimnasio, cocinar parecía una tarea imposible.
94
+ Mi nutricionista me recomendó estas clases que cambiaron mi perspectiva. Descubrí que cocinar no requería horas ni ingredientes exóticos.
95
+ Ahora preparo comidas nutritivas en minutos. Mi energía ha vuelto y mi billetera lo agradece.
96
+ Únete a nuestra próxima clase gratuita este jueves y descubre cómo preparar comidas saludables que se ajusten a tu ritmo de vida.
97
+ Haz clic aquí para reservar tu lugar.
98
+ """
99
+ },
100
+ {
101
+ "title": "Mentoría de LinkedIn",
102
+ "target": "Profesionales buscando mejores oportunidades",
103
+ "action": "Agendar sesión estratégica",
104
+ "story": """
105
+ Actualizaba mi perfil de LinkedIn religiosamente, pero las oportunidades seguían esquivándome. Mis publicaciones se perdían en el vacío digital.
106
+ Un colega con menos experiencia consiguió el puesto que yo anhelaba. Su secreto: su presencia en LinkedIn era magnética.
107
+ Encontré un mentor que me mostró los puntos ciegos de mi estrategia. No más contenido forzado, sino conexiones genuinas.
108
+ En dos meses, los reclutadores comenzaron a contactarme. Mis publicaciones generan conversaciones relevantes.
109
+ Agenda tu sesión estratégica hoy y aprende a convertir tu experiencia en oportunidades reales de crecimiento profesional.
110
+ Solo tienes que poner tu dedo aquí para agendar.
111
+ """
112
+ },
113
+ {
114
+ "title": "App de Hábitos Matutinos",
115
+ "target": "Personas que luchan con las mañanas",
116
+ "action": "Descargar versión premium",
117
+ "story": """
118
+ El sonido del despertador era mi enemigo número uno. Cinco alarmas y tres cafés después, apenas funcionaba.
119
+ Las mañanas productivas parecían un privilegio reservado para otros. Mi creatividad y energía siempre llegaban demasiado tarde.
120
+ Esta app apareció en mi feed en un momento de desesperación.
121
+
122
+ Su enfoque gradual me permitió construir una rutina sin sentirme abrumado.
123
+ Ahora disfruto del amanecer con una taza de té.
124
+
125
+ Mi día comienza con propósito, no con caos.
126
+ Descarga la app aquí y transforma tus mañanas en el momento más productivo de tu día.
127
+ """
128
+
129
+ }
130
+ ]
131
+ },
132
+
133
+ "GHA": {
134
+ "description": """
135
+ La fórmula G.H.A. (Gancho-Historia-Acción) es una estructura narrativa poderosa que utiliza el storytelling para crear conexiones emocionales y motivar a la acción.
136
+ TEORÍA:
137
+ Esta fórmula aprovecha el poder de las historias para captar la atención, generar empatía y motivar el cambio, basándose en la identificación con los problemas y dolores de la audiencia.
138
+ ESTRUCTURA:
139
+ 1. Gancho:
140
+ - Abre identificando un problema o dolor específico de la audiencia
141
+ - Que conecta emocionalmente con la frustración o necesidad
142
+ - Genera identificación inmediata con la situación
143
+ - Plantea el escenario desde la perspectiva del dolor actual
144
+ 2. Historia:
145
+ - Desarrolla la narrativa mostrando las consecuencias del problema
146
+ - Explora cómo el dolor afecta diferentes aspectos de la vida
147
+ - Mantiene la tensión emocional sobre el problema
148
+ - Introduce el producto como solución natural al dolor
149
+ - Demuestra la transformación positiva posible
150
+ 3. Acción:
151
+ - Presenta la acción como el puente hacia el beneficio deseado, como respuesta natural al deseo de eliminar el dolor
152
+ - Enfatiza la urgencia de resolver el problema
153
+ - Minimiza las barreras para tomar acción
154
+ - Refuerza los beneficios específicos que se obtendrán si toman acción
155
+ """,
156
+ "examples": [
157
+ {
158
+ "title": "Programa de Hábitos Productivos",
159
+ "target": "Emprendedores que sienten que el día no les alcanza",
160
+ "action": "Acceder al reto gratuito de 7 días",
161
+ "story": """
162
+ "No me alcanza el tiempo" se había convertido en mi mantra diario.
163
+ Saltaba de tarea en tarea, apagando incendios, pero al final del día sentía que no había avanzado en lo realmente importante.
164
+ Probé agendas, apps, técnicas de productividad… pero siempre volvía a lo mismo: un montón de pendientes y la sensación de estar estancado. Hasta que entendí que el problema no era la falta de tiempo, sino mis hábitos.
165
+ Cuando aprendí a organizar mis días de forma estratégica, todo cambió. Logré enfocarme, trabajar menos horas y sentir que por fin estaba avanzando.
166
+ Si te pasa lo mismo, únete al reto gratuito de 7 días y empieza a transformar tu rutina con pequeños cambios que hacen la diferencia.
167
+ Haz clic aquí para reservar tu lugar.
168
+ """
169
+ },
170
+ {
171
+ "title": "Curso de Branding Personal",
172
+ "target": "Freelancers y emprendedores que quieren destacar en su industria",
173
+ "action": "Inscribirse hoy y acceder a una auditoría gratuita de perfil",
174
+ "story": """
175
+ Sabía que era bueno en lo que hacía, pero nadie me conocía.
176
+ Mi competencia cobraba el doble, tenía clientes constantes y una marca que se veía sólida.
177
+ Yo seguía dependiendo del boca a boca y esperando que alguien recomendara mi trabajo.
178
+ Todo cambió cuando entendí que no basta con ser bueno, hay que parecerlo.
179
+ Aprendí a construir una marca que reflejara mi valor, a comunicar lo que me hacía único y a atraer clientes sin perseguirlos.
180
+ Si sientes que tu talento no se refleja en lo que cobras o en los clientes que atraes, este curso es para ti.
181
+ Inscríbete aquí hoy y recibe una auditoría gratuita de tu perfil para empezar con el pie derecho.
182
+ """
183
+ },
184
+ {
185
+ "title": "Masterclass: Lanza tu Primer Producto Digital",
186
+ "target": "Emprendedores que quieren generar ingresos pasivos",
187
+ "action": "Registrarse gratis y recibir acceso a la guía de validación",
188
+ "story": """
189
+ Durante meses tuve la idea en la cabeza, pero nunca pasaba de ahí.
190
+ Pensaba que necesitaba más tiempo, más conocimientos, más perfección.
191
+ Mientras tanto, otros lanzaban sus productos y generaban ingresos mientras dormían.
192
+ Cuando finalmente decidí dejar de esperar y actuar con estrategia, todo cambió. No necesitaba un producto perfecto, sino uno que resolviera un problema real.
193
+ Lo lancé, aprendí en el proceso y hoy es una fuente de ingresos constante.
194
+ Si tienes una idea, pero no sabes cómo dar el primer paso, esta masterclass es para ti.
195
+ Regístrate gratis aquí y accede a la guía de validación para lanzar con confianza.
196
+ """
197
+ },
198
+ {
199
+ "title": "Taller de Escritura para Redes Sociales",
200
+ "target": "Creadores y emprendedores que quieren escribir posts que vendan",
201
+ "action": "Reservar lugar con 50% de descuento",
202
+ "story": """
203
+ Publicaba con constancia, pero mis posts pasaban desapercibidos.
204
+ Likes de amigos, algún comentario de cortesía… pero cero clientes.
205
+ Veía a otros escribir con naturalidad, conectar y vender sin parecer vendedores. Yo sentía que hablaba al vacío.
206
+ Hasta que entendí que escribir para redes no es solo contar cosas, es saber cómo contarlas.
207
+ Aprendí a estructurar mis mensajes, a tocar emociones y a escribir de forma que la gente quiera leer y actuar. Y cuando apliqué estos cambios, los resultados llegaron solos.
208
+ Si quieres que tus publicaciones generen impacto real, este taller es para ti.
209
+ Reserva tu lugar aquí con 50% de descuento y aprende a escribir textos que convierten.
210
+ """
211
+ },
212
+ ]
213
+ }
214
+ }
app.py CHANGED
@@ -2,10 +2,12 @@ from dotenv import load_dotenv
2
  import streamlit as st
3
  import os
4
  import google.generativeai as genai
5
- from bullet_formulas import bullet_formulas
6
  from style import styles
7
- from prompts import create_instruction
8
- from angles import bullet_angles
 
 
9
 
10
  # Cargar las variables de entorno
11
  load_dotenv()
@@ -13,7 +15,7 @@ load_dotenv()
13
  # Configurar la API de Google
14
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
15
 
16
- # Función para generar bullets de beneficios
17
  @st.cache_resource
18
  def get_model(temperature):
19
  generation_config = {
@@ -21,25 +23,27 @@ def get_model(temperature):
21
  }
22
  return genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config)
23
 
24
- # Update the generate_benefits function to include selected_angle
25
- def generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula, selected_angle):
26
  if not target_audience or not product:
27
  return "Por favor, completa todos los campos requeridos."
28
 
29
  model = get_model(temperature)
30
- benefits_instruction = create_instruction(
31
- number_of_benefits,
32
  target_audience,
33
  product,
34
  selected_formula,
35
- selected_angle
 
 
 
36
  )
37
 
38
- response = model.generate_content([benefits_instruction], generation_config={"temperature": temperature})
39
  return response.parts[0].text if response and response.parts else "Error generating content."
40
 
41
  # Configurar la interfaz de usuario con Streamlit
42
- st.set_page_config(page_title="Bullet Benefits Generator", layout="wide")
43
 
44
  # Leer el contenido del archivo manual.md
45
  with open("manual.md", "r", encoding="utf-8") as file:
@@ -52,8 +56,8 @@ st.sidebar.markdown(manual_content)
52
  st.markdown(styles["main_layout"], unsafe_allow_html=True)
53
 
54
  # Centrar el título y el subtítulo
55
- st.markdown("<h1 style='text-align: center;'>Bullet Benefits Generator</h1>", unsafe_allow_html=True)
56
- st.markdown("<h4 style='text-align: center;'>Transforma características en beneficios irresistibles que conectan emocionalmente con tu audiencia.</h4>", unsafe_allow_html=True)
57
 
58
  # Añadir CSS personalizado para el botón
59
  st.markdown(styles["button"], unsafe_allow_html=True)
@@ -62,30 +66,49 @@ st.markdown(styles["button"], unsafe_allow_html=True)
62
  col1, col2 = st.columns([1, 2])
63
 
64
  # Columnas de entrada
65
- # Inside the column section
66
  with col1:
67
- target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
68
- product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de Inglés")
69
- number_of_benefits = st.selectbox("Número de Beneficios", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
70
 
71
- # Fix indentation - remove extra spaces
72
  with st.expander("Opciones avanzadas"):
73
- selected_formula_key = st.selectbox(
74
- "Tipo de bullet", # Added label
75
- options=list(bullet_formulas.keys()),
 
76
  label_visibility="visible"
77
  )
78
- selected_formula = bullet_formulas[selected_formula_key]
79
 
80
- selected_angle_key = st.selectbox(
81
- "Ángulo del bullet", # Added label
82
- options=list(bullet_angles.keys()),
 
83
  label_visibility="visible"
84
  )
85
- selected_angle = bullet_angles[selected_angle_key]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
- temperature = st.slider(
88
- "Nivel de creatividad", # Added label
89
  min_value=0.0,
90
  max_value=2.0,
91
  value=1.0,
@@ -93,30 +116,31 @@ with col1:
93
  label_visibility="visible"
94
  )
95
 
96
- submit = st.button("GENERAR LOS BULLETS POINTS")
97
-
98
- # Mostrar los beneficios generados
99
- # Update the submit section to include selected_angle
100
- if submit:
101
- if target_audience and product and selected_formula:
102
- with st.spinner('Generando beneficios...'):
103
- generated_benefits = generate_benefits(
104
- number_of_benefits,
105
- target_audience,
106
- product,
107
- temperature,
108
- selected_formula,
109
- selected_angle
 
110
  )
111
- if not isinstance(generated_benefits, str):
112
- col2.error("Error al generar beneficios")
113
  else:
114
  col2.markdown(f"""
115
  <div style="{styles['results_container']}">
116
- <h3>Beneficios Generados:</h3>
117
- <p>{generated_benefits}</p>
118
  </div>
119
  """, unsafe_allow_html=True)
120
 
121
  else:
122
- col2.warning("Por favor, completa todos los campos antes de generar beneficios.")
 
2
  import streamlit as st
3
  import os
4
  import google.generativeai as genai
5
+ from ads_formulas import ads_formulas # Import the ads formulas
6
  from style import styles
7
+ from prompts import create_fb_ad_instruction
8
+ from emotional_angles import emotional_angles
9
+ from copywriter_personas import copywriter_personas
10
+ from ad_objectives import ad_objectives # Import ad objectives
11
 
12
  # Cargar las variables de entorno
13
  load_dotenv()
 
15
  # Configurar la API de Google
16
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
17
 
18
+ # Función para generar modelo
19
  @st.cache_resource
20
  def get_model(temperature):
21
  generation_config = {
 
23
  }
24
  return genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config)
25
 
26
+ # Function to generate Facebook ads
27
+ def generate_fb_ad(target_audience, product, temperature, selected_formula, selected_angle, selected_persona, ad_objective=None):
28
  if not target_audience or not product:
29
  return "Por favor, completa todos los campos requeridos."
30
 
31
  model = get_model(temperature)
32
+ ad_instruction = create_fb_ad_instruction(
 
33
  target_audience,
34
  product,
35
  selected_formula,
36
+ selected_angle,
37
+ selected_persona,
38
+ ad_objective,
39
+ language="español" # Fixed to Spanish
40
  )
41
 
42
+ response = model.generate_content([ad_instruction], generation_config={"temperature": temperature})
43
  return response.parts[0].text if response and response.parts else "Error generating content."
44
 
45
  # Configurar la interfaz de usuario con Streamlit
46
+ st.set_page_config(page_title="Facebook Ads Generator", layout="wide")
47
 
48
  # Leer el contenido del archivo manual.md
49
  with open("manual.md", "r", encoding="utf-8") as file:
 
56
  st.markdown(styles["main_layout"], unsafe_allow_html=True)
57
 
58
  # Centrar el título y el subtítulo
59
+ st.markdown("<h1 style='text-align: center;'>Facebook Ads Generator</h1>", unsafe_allow_html=True)
60
+ st.markdown("<h4 style='text-align: center;'>Crea anuncios persuasivos que conectan con tu audiencia y generan conversiones.</h4>", unsafe_allow_html=True)
61
 
62
  # Añadir CSS personalizado para el botón
63
  st.markdown(styles["button"], unsafe_allow_html=True)
 
66
  col1, col2 = st.columns([1, 2])
67
 
68
  # Columnas de entrada
 
69
  with col1:
70
+ ad_target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Madres trabajadoras de 30-45 años")
71
+ ad_product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de gestión del tiempo")
 
72
 
 
73
  with st.expander("Opciones avanzadas"):
74
+ # Selector de fórmula de anuncio
75
+ ad_formula_key = st.selectbox(
76
+ "Fórmula de anuncio",
77
+ options=list(ads_formulas.keys()),
78
  label_visibility="visible"
79
  )
80
+ ad_formula = ads_formulas[ad_formula_key]
81
 
82
+ # Selector de ángulo emocional
83
+ emotional_angle_key = st.selectbox(
84
+ "Ángulo emocional",
85
+ options=list(emotional_angles.keys()),
86
  label_visibility="visible"
87
  )
88
+ emotional_angle = emotional_angles[emotional_angle_key]
89
+
90
+ # Selector de personalidad de copywriter
91
+ ad_persona_key = st.selectbox(
92
+ "Estilo de copywriter",
93
+ options=list(copywriter_personas.keys()),
94
+ index=0,
95
+ format_func=lambda x: x.replace("_", " "),
96
+ label_visibility="visible"
97
+ )
98
+ ad_persona = copywriter_personas[ad_persona_key]
99
+
100
+ # Selector de objetivo de anuncio
101
+ ad_objective_key = st.selectbox(
102
+ "Objetivo de la campaña",
103
+ options=list(ad_objectives.keys()),
104
+ label_visibility="visible"
105
+ )
106
+ selected_objective = ad_objectives[ad_objective_key] if ad_objective_key != "ninguno" else None
107
+
108
+ # Removed language selector
109
 
110
+ ad_temperature = st.slider(
111
+ "Nivel de creatividad",
112
  min_value=0.0,
113
  max_value=2.0,
114
  value=1.0,
 
116
  label_visibility="visible"
117
  )
118
 
119
+ submit_ad = st.button("GENERAR ANUNCIO")
120
+
121
+ # Mostrar el anuncio generado
122
+ if submit_ad:
123
+ if ad_target_audience and ad_product:
124
+ with st.spinner('Generando anuncio...'):
125
+ generated_ad = generate_fb_ad(
126
+ ad_target_audience,
127
+ ad_product,
128
+ ad_temperature,
129
+ ad_formula,
130
+ emotional_angle,
131
+ ad_persona,
132
+ selected_objective
133
+ # Removed language parameter
134
  )
135
+ if not isinstance(generated_ad, str):
136
+ col2.error("Error al generar el anuncio")
137
  else:
138
  col2.markdown(f"""
139
  <div style="{styles['results_container']}">
140
+ <h3>Anuncio Generado:</h3>
141
+ <p>{generated_ad}</p>
142
  </div>
143
  """, unsafe_allow_html=True)
144
 
145
  else:
146
+ col2.warning("Por favor, completa todos los campos antes de generar el anuncio.")
copywriter_personas.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ copywriter_personas = {
2
+ "NINGUNO": {
3
+ "description": "Sin estilo específico de copywriter",
4
+ "style": "Estilo estándar de copywriting",
5
+ "characteristics": [
6
+ "Enfoque directo en el producto/servicio",
7
+ "Estructura clara y efectiva",
8
+ "Adaptable a cualquier industria",
9
+ "Basado en principios fundamentales de copywriting"
10
+ ],
11
+ "famous_for": "Crear copy efectivo sin adoptar un estilo particular de copywriter legendario"
12
+ },
13
+ "GARY_HALBERT": {
14
+ "description": "El Príncipe del Print. Directo, persuasivo y orientado a resultados.",
15
+ "style": "Conversacional pero incisivo, con un enfoque en la psicología del consumidor",
16
+ "characteristics": [
17
+ "Usa lenguaje simple y directo",
18
+ "Enfatiza la exclusividad y escasez",
19
+ "Incorpora historias personales convincentes",
20
+ "Utiliza pruebas sociales y testimonios"
21
+ ],
22
+ "famous_for": "The Coat of Arms Letter, una de las cartas de venta más exitosas de la historia"
23
+ },
24
+ "GARY_BENCIVENGA": {
25
+ "description": "El copywriter más respetado y mejor pagado de la historia moderna",
26
+ "style": "Meticuloso, basado en pruebas y orientado a la persuasión",
27
+ "characteristics": [
28
+ "Combina investigación exhaustiva con creatividad",
29
+ "Utiliza titulares informativos que prometen beneficios específicos",
30
+ "Presenta argumentos lógicos respaldados por hechos",
31
+ "Anticipa y responde objeciones del lector"
32
+ ],
33
+ "famous_for": "Su enfoque 'Persuasión, no promoción' y su boletín Bencivenga Bullets"
34
+ },
35
+ "DAVID_OGILVY": {
36
+ "description": "El padre de la publicidad moderna, fundador de Ogilvy & Mather",
37
+ "style": "Elegante, sofisticado y basado en investigación",
38
+ "characteristics": [
39
+ "Utiliza titulares largos y descriptivos",
40
+ "Incorpora datos y estadísticas para respaldar afirmaciones",
41
+ "Mantiene un tono de autoridad con clase",
42
+ "Enfatiza la calidad y el valor a largo plazo"
43
+ ],
44
+ "famous_for": "Anuncios icónicos para Rolls-Royce y Hathaway Shirts"
45
+ },
46
+ "JOSEPH_SUGARMAN": {
47
+ "description": "Maestro de la fluidez y el copy emocional que engancha",
48
+ "style": "Narrativo, envolvente y orientado a crear una experiencia",
49
+ "characteristics": [
50
+ "Utiliza la técnica de 'tobogán resbaladizo' para mantener al lector enganchado",
51
+ "Crea imágenes vívidas en la mente del lector",
52
+ "Incorpora elementos de curiosidad y misterio",
53
+ "Usa un tono conversacional y amigable"
54
+ ],
55
+ "famous_for": "Sus anuncios de BluBlocker sunglasses y su libro 'The Adweek Copywriting Handbook'"
56
+ },
57
+ "EUGENE_SCHWARTZ": {
58
+ "description": "Genio del marketing directo y experto en comprender los deseos del mercado",
59
+ "style": "Intenso, directo y enfocado en los deseos más profundos",
60
+ "characteristics": [
61
+ "Amplifica los deseos existentes en lugar de crear nuevos",
62
+ "Utiliza un lenguaje cargado de emoción y urgencia",
63
+ "Estructura el copy para mantener la atención hasta el final",
64
+ "Enfatiza la transformación y el cambio de estado"
65
+ ],
66
+ "famous_for": "Su libro 'Breakthrough Advertising' y sus anuncios de ventas récord"
67
+ }
68
+ }
emotional_angles.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ emotional_angles = {
2
+ "NINGUNO": {
3
+ "description": "Sin enfoque emocional específico. El texto se mantiene neutral, informativo y directo, centrándose en los hechos y características del producto sin apelar a una respuesta emocional particular.",
4
+ "style": "neutral y directo",
5
+ "keywords": ["claro", "directo", "simple", "natural"],
6
+ "power_words": ["efectivo", "funcional", "práctico", "versátil", "útil"],
7
+ "example": "Nuestro producto ofrece tres características principales que mejoran tu experiencia diaria."
8
+ },
9
+ "MIEDO": {
10
+ "description": "Evocar preocupación sobre problemas que el producto puede resolver. El texto identifica amenazas o riesgos relevantes para el lector y posiciona el producto como la solución o protección necesaria. Efectivo para productos de seguridad, salud o que resuelven problemas significativos.",
11
+ "style": "alerta y protector",
12
+ "keywords": ["prevención", "protección", "seguridad", "tranquilidad"],
13
+ "power_words": ["riesgo", "peligro", "amenaza", "proteger", "defender"],
14
+ "example": "¿Estás exponiendo a tu familia a riesgos invisibles que podrían evitarse fácilmente?"
15
+ },
16
+ "FOMO": {
17
+ "description": "Generar miedo a perderse algo importante (Fear Of Missing Out). El texto crea una sensación de urgencia y oportunidad limitada, haciendo que el lector sienta que podría quedarse fuera de algo valioso si no actúa rápidamente. Ideal para ofertas por tiempo limitado, eventos exclusivos o productos de alta demanda.",
18
+ "style": "urgente y exclusivo",
19
+ "keywords": ["oportunidad", "limitado", "último", "ahora"],
20
+ "power_words": ["último", "final", "nunca más", "agotándose", "oportunidad única"],
21
+ "example": "Últimas 24 horas para acceder a esta oferta que no volverá a repetirse. Miles ya han aprovechado."
22
+ },
23
+ "EXCLUSIVIDAD": {
24
+ "description": "Generar sensación de oportunidad limitada y privilegio. El texto enfatiza la escasez, exclusividad o acceso privilegiado, creando urgencia y deseo de pertenecer a un grupo selecto. Ideal para productos premium, ofertas limitadas o membresías exclusivas.",
25
+ "style": "exclusivo y privilegiado",
26
+ "keywords": ["exclusivo", "limitado", "selecto", "privilegio"],
27
+ "power_words": ["exclusivo", "limitado", "selecto", "élite", "privilegiado"],
28
+ "example": "Solo 50 personas tendrán acceso a esta oferta irrepetible. ¿Serás una de ellas?"
29
+ },
30
+ "CONFIANZA": {
31
+ "description": "Construir credibilidad y seguridad en la marca. El texto establece autoridad, fiabilidad y solidez, utilizando pruebas sociales, testimonios, garantías y datos verificables. Ideal para servicios profesionales, productos premium o cuando la confianza es crucial para la decisión de compra.",
32
+ "style": "fiable y sólido",
33
+ "keywords": ["confiable", "probado", "garantizado", "respaldado"],
34
+ "power_words": ["comprobado", "certificado", "garantizado", "auténtico", "respaldado"],
35
+ "example": "Respaldado por 15 años de investigación científica y más de 10,000 clientes satisfechos."
36
+ },
37
+ "ALEGRÍA": {
38
+ "description": "Generar entusiasmo y felicidad en el lector. El texto transmite optimismo, celebración y satisfacción, haciendo que el lector asocie el producto con experiencias positivas y momentos felices. Ideal para productos que mejoran la calidad de vida o proporcionan placer.",
39
+ "style": "optimista y energético",
40
+ "keywords": ["felicidad", "celebración", "diversión", "satisfacción"],
41
+ "power_words": ["brillante", "radiante", "fascinante", "maravilloso", "encantador"],
42
+ "example": "¡Descubre la alegría de despertar cada mañana con energía renovada y una sonrisa imparable!"
43
+ },
44
+ "ANTICIPACIÓN": {
45
+ "description": "Crear expectativa y deseo por los beneficios futuros. El texto construye una visión atractiva del futuro que el lector puede experimentar gracias al producto, generando entusiasmo por lo que está por venir. Perfecto para lanzamientos, preventas, productos innovadores o servicios que prometen transformación a largo plazo.",
46
+ "style": "inspirador y visionario",
47
+ "keywords": ["futuro", "oportunidad", "potencial", "transformación"],
48
+ "power_words": ["pronto", "imagina", "visualiza", "descubrirás", "transformarás"],
49
+ "example": "Imagina despertar en 30 días con la confianza y energía que siempre has deseado."
50
+ },
51
+ "SORPRESA": {
52
+ "description": "Causar asombro con información o beneficios inesperados. El texto revela datos sorprendentes, características innovadoras o resultados extraordinarios que desafían las expectativas del lector. Perfecto para productos innovadores, ofertas especiales o cuando se quiere destacar en un mercado saturado.",
53
+ "style": "revelador e impactante",
54
+ "keywords": ["increíble", "sorprendente", "inesperado", "revolucionario"],
55
+ "power_words": ["asombroso", "impactante", "revelador", "revolucionario", "inimaginable"],
56
+ "example": "Lo que descubrimos sobre la pérdida de peso desafía todo lo que creías saber hasta ahora."
57
+ },
58
+ "IRA": {
59
+ "description": "Canalizar la frustración hacia problemas que el producto resuelve. El texto identifica injusticias, obstáculos o situaciones irritantes que afectan al lector y posiciona el producto como la herramienta para superar estas frustraciones. Ideal para productos que ahorran tiempo, eliminan molestias o empoderan al usuario frente a situaciones adversas.",
60
+ "style": "intenso y motivador",
61
+ "keywords": ["solución", "cambio", "acción", "justicia"],
62
+ "power_words": ["injusto", "indignante", "inaceptable", "transformador", "liberador"],
63
+ "example": "¿Cansado de pagar tarifas abusivas por un servicio mediocre? Es hora de tomar el control."
64
+ },
65
+ "TRISTEZA": {
66
+ "description": "Conectar con el dolor emocional que el producto puede aliviar. El texto reconoce y valida los sentimientos de pérdida, frustración o dificultad que experimenta el lector, y presenta el producto como una fuente de alivio, comprensión o apoyo. Efectivo para servicios de ayuda, productos que resuelven problemas emocionales o campañas de concientización.",
67
+ "style": "empático y comprensivo",
68
+ "keywords": ["alivio", "comprensión", "apoyo", "solución"],
69
+ "power_words": ["abrumador", "solitario", "incomprendido", "reconfortante", "alivio"],
70
+ "example": "Entendemos lo difícil que es enfrentar cada día cuando te sientes incomprendido y abrumado."
71
+ }
72
+ }
prompts.py CHANGED
@@ -1,59 +1,142 @@
1
- system_prompt = """You are a world-class expert copywriter, experienced in creating benefits that emotionally connect and address the desires, problems, and motivations of the target audience.
2
 
3
- OBJECTIVE:
4
- - Generate convincing and specific benefit bullets in Spanish
5
- - Connect emotionally with the audience
6
- - Address real desires, problems, and motivations
7
- - Maintain natural and conversational language
8
- - Orient each benefit towards action
9
 
10
- FORMAT RULES:
11
- - Each benefit must start with "• "
12
- - One benefit per line
13
- - No numbers at the beginning
14
- - No explanations or categories
15
- - Add a line break between each benefit
16
- - Never include : symbols in bullets
17
- - Each benefit must be a complete and concise phrase
18
 
19
- BENEFIT STRUCTURE:
20
- - Must be relevant to target audience
21
- - Must show a specific result
22
- - Must include an emotional element
23
- - Must eliminate an objection or pain point
24
- - Must inspire immediate action
25
 
26
- EJEMPLO DE FORMATO:
27
- Transforma tu negocio con estrategias probadas que duplican tus ingresos en 90 días, sin sacrificar tu tiempo en familia.
 
 
 
 
28
 
29
- Domina las técnicas más efectivas para conquistar tu mercado, mientras mantienes el equilibrio entre trabajo y vida personal.
30
-
31
- Implementa sistemas automatizados que hacen crecer tu empresa incluso mientras duermes, eliminando la necesidad de trabajar más horas.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
- IMPORTANT:
34
- - Each benefit must be unique and specific
35
- - Avoid repetitions and generalities
36
- - Maintain a persuasive but honest tone
37
- - Adapt language to audience comprehension level
38
- - Focus on tangible and measurable results
39
- """
40
-
41
- def create_instruction(number_of_benefits, target_audience, product, selected_formula, selected_angle):
42
- angle_instruction = ""
43
- if selected_angle["description"] != "Generate the bullet without any specific angle":
44
- angle_instruction = f"\nApply this angle: {selected_angle['description']}\nStyle: {selected_angle['style']}\nUse these keywords as inspiration: {', '.join(selected_angle['keywords'])}"
45
-
46
- return (
47
- f"{system_prompt}\n\n"
48
- f"Your task is to create {number_of_benefits} irresistible benefits designed for {target_audience}. "
49
- f"The goal is to show how {product} can transform the reader's life, connecting naturally and emotionally. "
50
- f"Avoid using literal or repetitive mentions, and highlight concrete solutions, showing how the product removes obstacles or satisfies real desires. "
51
- f"{angle_instruction}\n"
52
- f"IMPORTANT: Keep bullets short and direct. "
53
- f"Use the selected formula as a guide:\n\n{selected_formula['description']}\n\n"
54
- f"Get inspired by these examples:\n"
55
- f"- {selected_formula['examples'][0]}\n"
56
- f"- {selected_formula['examples'][1]}\n"
57
- f"- {selected_formula['examples'][2]}\n\n"
58
- f"Your goal is to inspire desire and action, avoiding explanations or categories in the response."
59
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ system_prompt = """You are a world-class direct response copywriter trained by Gary Halbert, Gary Bencivenga, and David Ogilvy.
2
 
3
+ Additionally, you are a digital advertising expert specializing in Facebook Ads. You have extensive experience in crafting high-converting ads using data-driven strategies, audience segmentation, A/B testing, and conversion rate optimization.
 
 
 
 
 
4
 
5
+ Your advertising philosophy follows these core principles:
6
+ 1. **Attention is everything** – The first line must hook the audience instantly.
7
+ 2. **Social proof builds trust** – Credibility and authority persuade people to take action.
8
+ 3. **Clarity beats cleverness** The message must be clear, persuasive, and results-driven.
9
+ 4. **Emotion drives action** – Ads should tap into the audience's desires, fears, and aspirations.
10
+ 5. **Every word must sell** No fluff, just compelling, action-driven copy.
11
+ 6. **Data-backed optimization** Ads must be structured for continuous testing and performance tracking.
 
12
 
13
+ You write persuasive, high-converting Facebook ads that maximize engagement and ROI."""
 
 
 
 
 
14
 
15
+ # Importar el diccionario de objetivos
16
+ from ad_objectives import ad_objectives
17
+ # Importar el diccionario de ángulos emocionales
18
+ from emotional_angles import emotional_angles
19
+ # Importar las fórmulas de anuncios desde la carpeta ads
20
+ from ads_formulas import ads_formulas
21
 
22
+ def create_fb_ad_instruction(target_audience, product, selected_formula, selected_angle, selected_persona, ad_objective=None, language="español"):
23
+ """
24
+ Creates an instruction for generating Facebook ad copy
25
+
26
+ Parameters:
27
+ - target_audience: The target audience for the ad
28
+ - product: The product or service being advertised
29
+ - selected_formula: Formula to use for structuring the ad
30
+ - selected_angle: Angle to approach the ad from
31
+ - selected_persona: Copywriting legend personality to adopt
32
+ - ad_objective: The campaign objective (awareness, traffic, engagement, etc.)
33
+ - language: Target language for the ad (default: "español")
34
+
35
+ Returns:
36
+ - Instruction string for the model
37
+ """
38
+
39
+ # Create objective instruction if provided
40
+ objective_instruction = ""
41
+ if ad_objective:
42
+ objective_instruction = f"""
43
+ **Campaign Objective: {ad_objective['name']}**
44
+
45
+ Focus on: {ad_objective['description']}
46
+
47
+ Key metrics to optimize for:
48
+ - {', '.join(ad_objective['key_metrics'])}
49
+
50
+ Adapt your copy to specifically support this objective by:
51
+ - {ad_objective['copy_strategy']}
52
+ """
53
+
54
+ persona_instruction = f"""
55
+ Adopt the personality and writing style of {selected_persona['description']}
56
+
57
+ Key characteristics of this style:
58
+ - {' '.join(selected_persona['characteristics'])}
59
+ - Famous for: {selected_persona['famous_for']}
60
 
61
+ When writing as this copywriting legend:
62
+ - Use their signature tone and rhythm in your sentences
63
+ - Apply their known persuasion techniques throughout the ad
64
+ - Structure arguments in their characteristic way
65
+ - Incorporate their typical emotional appeals
66
+ """
67
+
68
+ # Prepare angle instruction
69
+ angle_instruction = f"""
70
+ Apply this angle: {selected_angle['description']}
71
+ Style of the angle: {selected_angle['style']}
72
+ """
73
+
74
+ # Add keywords if they exist in the selected angle
75
+ if 'keywords' in selected_angle:
76
+ angle_instruction += f"""
77
+ Suggested keywords: {', '.join(selected_angle['keywords'])}
78
+ """
79
+
80
+ # Add power words if they exist in the selected angle (for emotional angles)
81
+ if 'power_words' in selected_angle:
82
+ angle_instruction += f"""
83
+ Power words to include: {', '.join(selected_angle['power_words'])}
84
+ """
85
+
86
+ # Add example if it exists in the selected angle (for emotional angles)
87
+ if 'example' in selected_angle:
88
+ angle_instruction += f"""
89
+ Example of this angle: {selected_angle['example']}
90
+ """
91
+
92
+ # Add formula examples if available
93
+ formula_examples = ""
94
+ if 'examples' in selected_formula:
95
+ formula_examples = f"""
96
+ Get inspired by these examples:
97
+ - {selected_formula['examples'][0]}
98
+ - {selected_formula['examples'][1]}
99
+ - {selected_formula['examples'][2]}
100
+ """
101
+
102
+ instruction = f"""
103
+ {system_prompt}
104
+
105
+ Create a high-converting Facebook ad copy for {product}, channeling the voice of {selected_persona['description']} while leveraging the selected angle to persuade {target_audience} to try it and share their positive experience.
106
+
107
+ {objective_instruction if ad_objective else ""}
108
+
109
+ {persona_instruction}
110
+
111
+ Ad Requirements:
112
+ 1. **Powerful Hook:** Start with an attention-grabbing line that immediately stops scrolling.
113
+ 2. **Social Proof & Credibility:** Include elements of social proof and credibility to build trust with the audience.
114
+ 3. **Clear Benefits:** Highlight why this product is the best solution for {target_audience}'s needs.
115
+ 4. **Strong Call to Action (CTA):** Clearly instruct the audience on the next step (e.g., "Try it now," "Sign up today," "Get 20% off").
116
+ 5. **Optimized for Multiple Ad Formats:** Ensure the copy works for image, video, and carousel ads.
117
+
118
+ Use this formula to structure the ad: {selected_formula['description']}
119
+ {formula_examples}
120
+
121
+ **Strategic Angle Instructions:**
122
+ This angle defines the unique perspective and emotional approach for the ad.
123
+ {angle_instruction}
124
+
125
+ When applying this angle:
126
+ - Frame all benefits through this specific perspective
127
+ - Use the suggested keywords naturally throughout the copy
128
+ - Maintain the specified style consistently in your tone and language
129
+ - Ensure this angle is evident in both the hook and the call to action
130
+
131
+ The goal is to show how {product} can transform the reader's life, connecting naturally and emotionally.
132
+ Avoid literal or repetitive mentions, and highlight concrete solutions, showing how the product removes obstacles or satisfies real desires.
133
+
134
+ Additional Instructions:
135
+ - Ensure the tone and style match the brand and audience expectations.
136
+ - Generate the ad copy in {language}.
137
+
138
+ Output format: Present the complete ad with a powerful hook, clear benefits, and a compelling call to action.
139
+ Your goal is to inspire desire and action, avoiding explanations or categories in the response.
140
+ """
141
+
142
+ return instruction