Spaces:
Sleeping
Sleeping
Upload 4 files
Browse files- app.py +220 -217
- cta_formulas.py +144 -0
- manual.md +117 -0
- styles.py +81 -0
app.py
CHANGED
@@ -1,217 +1,220 @@
|
|
1 |
-
from dotenv import load_dotenv
|
2 |
-
import streamlit as st
|
3 |
-
import os
|
4 |
-
import google.generativeai as genai
|
5 |
-
import
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
#
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
"
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
""
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
|
|
|
|
|
|
|
1 |
+
from dotenv import load_dotenv
|
2 |
+
import streamlit as st
|
3 |
+
import os
|
4 |
+
import google.generativeai as genai
|
5 |
+
from cta_formulas import cta_formulas
|
6 |
+
from postdata_types import postdata_types
|
7 |
+
from styles import apply_styles
|
8 |
+
|
9 |
+
# Cargar variables de entorno
|
10 |
+
load_dotenv()
|
11 |
+
|
12 |
+
# Configurar API de Google Gemini
|
13 |
+
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
|
14 |
+
|
15 |
+
def get_gemini_response(product_service, target_audience, desired_action, formula_type, postdata_type, postdata_data, include_timezone, temperature):
|
16 |
+
if not product_service or not target_audience or not desired_action:
|
17 |
+
return "Por favor, completa todos los campos requeridos."
|
18 |
+
|
19 |
+
formula = cta_formulas[formula_type]
|
20 |
+
|
21 |
+
model = genai.GenerativeModel('gemini-1.5-flash')
|
22 |
+
full_prompt = f"""
|
23 |
+
You are an expert copywriter specialized in creating persuasive Calls to Action (CTAs).
|
24 |
+
Analyze (internally, don't include in output) the following information:
|
25 |
+
|
26 |
+
BUSINESS INFORMATION:
|
27 |
+
Product/Service: {product_service}
|
28 |
+
Target Audience: {target_audience}
|
29 |
+
Desired Action: {desired_action}
|
30 |
+
CTA Type: {formula_type}
|
31 |
+
{formula["description"]}
|
32 |
+
|
33 |
+
EXAMPLES TO FOLLOW:
|
34 |
+
{formula["examples"]}
|
35 |
+
|
36 |
+
First, analyze (but don't show) these points:
|
37 |
+
1. TARGET AUDIENCE ANALYSIS:
|
38 |
+
- What motivates them to take action?
|
39 |
+
- What obstacles prevent them from acting?
|
40 |
+
- What immediate benefits are they seeking?
|
41 |
+
- What fears or doubts do they have?
|
42 |
+
- What language and tone resonates with them?
|
43 |
+
|
44 |
+
2. DESIRED ACTION ANALYSIS:
|
45 |
+
- How complex is the requested action?
|
46 |
+
- What immediate benefit do they get from acting?
|
47 |
+
- What guarantees or social proof can motivate action?
|
48 |
+
- What real urgency or scarcity exists?
|
49 |
+
- What specific value will they receive?
|
50 |
+
|
51 |
+
Based on your internal analysis (don't include it in the output), create FIVE different CTAs in Spanish following the provided formula structure.
|
52 |
+
|
53 |
+
CRITICAL INSTRUCTIONS:
|
54 |
+
- Each CTA must be specific and action-oriented
|
55 |
+
- Use powerful imperative verbs
|
56 |
+
- Include a clear, measurable benefit
|
57 |
+
- Create urgency when appropriate
|
58 |
+
- Maximum 2 lines per CTA
|
59 |
+
- DO NOT include any analysis in the output
|
60 |
+
- ONLY output the five CTAs
|
61 |
+
- ALL CTAs MUST BE IN SPANISH
|
62 |
+
|
63 |
+
Output EXACTLY in this format (no additional text):
|
64 |
+
1. [First CTA in Spanish]
|
65 |
+
2. [Second CTA in Spanish]
|
66 |
+
3. [Third CTA in Spanish]
|
67 |
+
4. [Fourth CTA in Spanish]
|
68 |
+
5. [Fifth CTA in Spanish]
|
69 |
+
"""
|
70 |
+
|
71 |
+
# Add postdata information to the prompt
|
72 |
+
postdata_info = postdata_types[postdata_type]
|
73 |
+
|
74 |
+
full_prompt = f"""
|
75 |
+
You are an expert copywriter specialized in creating persuasive Calls to Action (CTAs).
|
76 |
+
Analyze (internally, don't include in output) the following information:
|
77 |
+
|
78 |
+
BUSINESS INFORMATION:
|
79 |
+
Product/Service: {product_service}
|
80 |
+
Target Audience: {target_audience}
|
81 |
+
Desired Action: {desired_action}
|
82 |
+
CTA Type: {formula_type}
|
83 |
+
{formula["description"]}
|
84 |
+
|
85 |
+
EXAMPLES TO FOLLOW:
|
86 |
+
{formula["examples"]}
|
87 |
+
|
88 |
+
First, analyze (but don't show) these points:
|
89 |
+
1. TARGET AUDIENCE ANALYSIS:
|
90 |
+
- What motivates them to take action?
|
91 |
+
- What obstacles prevent them from acting?
|
92 |
+
- What immediate benefits are they seeking?
|
93 |
+
- What fears or doubts do they have?
|
94 |
+
- What language and tone resonates with them?
|
95 |
+
|
96 |
+
2. DESIRED ACTION ANALYSIS:
|
97 |
+
- How complex is the requested action?
|
98 |
+
- What immediate benefit do they get from acting?
|
99 |
+
- What guarantees or social proof can motivate action?
|
100 |
+
- What real urgency or scarcity exists?
|
101 |
+
- What specific value will they receive?
|
102 |
+
|
103 |
+
Based on your internal analysis (don't include it in the output), create FIVE different CTAs in Spanish following the provided formula structure.
|
104 |
+
|
105 |
+
CRITICAL INSTRUCTIONS:
|
106 |
+
- Each CTA must be specific and action-oriented
|
107 |
+
- Use powerful imperative verbs
|
108 |
+
- Include a clear, measurable benefit
|
109 |
+
- Create urgency when appropriate
|
110 |
+
- Maximum 2 lines per CTA
|
111 |
+
- DO NOT include any analysis in the output
|
112 |
+
- ONLY output the five CTAs
|
113 |
+
- ALL CTAs MUST BE IN SPANISH
|
114 |
+
|
115 |
+
Output EXACTLY in this format (no additional text):
|
116 |
+
1. [First CTA in Spanish]
|
117 |
+
2. [Second CTA in Spanish]
|
118 |
+
3. [Third CTA in Spanish]
|
119 |
+
4. [Fourth CTA in Spanish]
|
120 |
+
5. [Fifth CTA in Spanish]
|
121 |
+
"""
|
122 |
+
|
123 |
+
response = model.generate_content([full_prompt], generation_config={"temperature": temperature})
|
124 |
+
return response.parts[0].text if response and response.parts else "Error al generar contenido."
|
125 |
+
|
126 |
+
# Configurar la aplicación Streamlit
|
127 |
+
st.set_page_config(page_title="CTA Generator", page_icon="🎯", layout="wide")
|
128 |
+
|
129 |
+
# Aplicar estilos
|
130 |
+
st.markdown(apply_styles(), unsafe_allow_html=True)
|
131 |
+
|
132 |
+
# Título de la app
|
133 |
+
st.markdown("<h1>Generador de CTAs Persuasivos</h1>", unsafe_allow_html=True)
|
134 |
+
st.markdown("<h3>Crea llamados a la acción que motiven a tu audiencia a dar el siguiente paso.</h3>", unsafe_allow_html=True)
|
135 |
+
|
136 |
+
# Crear dos columnas
|
137 |
+
col1, col2 = st.columns([1, 1])
|
138 |
+
|
139 |
+
# Columna izquierda para inputs
|
140 |
+
with col1:
|
141 |
+
target_audience = st.text_area(
|
142 |
+
"¿Cuál es tu público objetivo?",
|
143 |
+
placeholder="Ejemplo: Emprendedores que buscan automatizar su negocio..."
|
144 |
+
)
|
145 |
+
|
146 |
+
product_service = st.text_area(
|
147 |
+
"¿Cuál es tu producto o servicio?",
|
148 |
+
placeholder="Ejemplo: Curso de automatización con IA, Software de gestión..."
|
149 |
+
)
|
150 |
+
|
151 |
+
desired_action = st.text_area(
|
152 |
+
"¿Qué acción quieres que realicen?",
|
153 |
+
placeholder="Ejemplo: Registrarse al webinar, Descargar la guía gratuita..."
|
154 |
+
)
|
155 |
+
|
156 |
+
with st.expander("Opciones avanzadas"):
|
157 |
+
formula_type = st.selectbox(
|
158 |
+
"Tipo de CTA:",
|
159 |
+
options=list(cta_formulas.keys())
|
160 |
+
)
|
161 |
+
|
162 |
+
postdata_type = st.selectbox(
|
163 |
+
"Tipo de Postdata:",
|
164 |
+
options=list(postdata_types.keys()),
|
165 |
+
help="Selecciona el tipo de postdata que quieres incluir"
|
166 |
+
)
|
167 |
+
|
168 |
+
if postdata_type == "Testimonial":
|
169 |
+
testimonial_name = st.text_input("Nombre del cliente", placeholder="Ej: María López")
|
170 |
+
testimonial_result = st.text_input("Resultado obtenido", placeholder="Ej: duplicó sus ventas en 2 meses")
|
171 |
+
testimonial_quote = st.text_input("Cita del testimonio", placeholder="Ej: Este método transformó mi negocio")
|
172 |
+
elif postdata_type == "Urgencia":
|
173 |
+
urgency_reason = st.text_input("Razón de urgencia", placeholder="Ej: Solo quedan 5 plazas disponibles")
|
174 |
+
elif postdata_type == "Beneficio_Extra":
|
175 |
+
bonus_description = st.text_input("Descripción del bonus", placeholder="Ej: Guía de headlines que convierten")
|
176 |
+
bonus_value = st.number_input("Valor del bonus ($)", min_value=0, value=97)
|
177 |
+
|
178 |
+
include_timezone = st.checkbox("Incluir tabla de horarios", value=True)
|
179 |
+
|
180 |
+
temperature = st.slider(
|
181 |
+
"Nivel de creatividad:",
|
182 |
+
min_value=0.0,
|
183 |
+
max_value=2.0,
|
184 |
+
value=1.0,
|
185 |
+
step=0.1,
|
186 |
+
help="Valores más altos generan CTAs más creativos pero menos predecibles."
|
187 |
+
)
|
188 |
+
|
189 |
+
generate_button = st.button("Generar CTAs")
|
190 |
+
|
191 |
+
# Update the button click handler
|
192 |
+
if generate_button:
|
193 |
+
# Prepare postdata data based on type
|
194 |
+
postdata_data = {}
|
195 |
+
if postdata_type == "Testimonial":
|
196 |
+
postdata_data = {
|
197 |
+
"nombre_cliente": testimonial_name,
|
198 |
+
"resultado_específico": testimonial_result,
|
199 |
+
"cita_testimonial": testimonial_quote
|
200 |
+
}
|
201 |
+
elif postdata_type == "Urgencia":
|
202 |
+
postdata_data = {"razón_urgencia": urgency_reason}
|
203 |
+
elif postdata_type == "Beneficio_Extra":
|
204 |
+
postdata_data = {
|
205 |
+
"beneficio_sorpresa": bonus_description,
|
206 |
+
"precio": bonus_value
|
207 |
+
}
|
208 |
+
|
209 |
+
response = get_gemini_response(
|
210 |
+
product_service,
|
211 |
+
target_audience,
|
212 |
+
desired_action,
|
213 |
+
formula_type,
|
214 |
+
postdata_type,
|
215 |
+
postdata_data,
|
216 |
+
include_timezone,
|
217 |
+
temperature
|
218 |
+
)
|
219 |
+
st.write("### Tus Llamados a la Acción")
|
220 |
+
st.write(response)
|
cta_formulas.py
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
cta_formulas = {
|
2 |
+
"Directo": {
|
3 |
+
"description": """
|
4 |
+
Fórmula: [Verbo imperativo + Beneficio inmediato]
|
5 |
+
Esta fórmula va directo al grano, indicando exactamente qué hacer y qué obtendrá.
|
6 |
+
""",
|
7 |
+
"examples": """
|
8 |
+
- "Regístrate ahora y obtén acceso instantáneo a 50 plantillas"
|
9 |
+
- "Descarga gratis la guía y domina el copywriting en 30 días"
|
10 |
+
- "Reserva tu lugar hoy y ahorra 40% en tu entrada VIP"
|
11 |
+
"""
|
12 |
+
},
|
13 |
+
"Urgencia": {
|
14 |
+
"description": """
|
15 |
+
Fórmula: [Límite de tiempo/cantidad + Acción + Beneficio]
|
16 |
+
Crea sensación de escasez y motiva la acción inmediata.
|
17 |
+
""",
|
18 |
+
"examples": """
|
19 |
+
- "¡Solo quedan 5 plazas! Asegura tu lugar en el programa"
|
20 |
+
- "Última oportunidad: Inscríbete antes del viernes y recibe un bonus exclusivo"
|
21 |
+
- "Oferta por 24 horas: Accede al curso con 50% de descuento"
|
22 |
+
"""
|
23 |
+
},
|
24 |
+
"Problema-Solución": {
|
25 |
+
"description": """
|
26 |
+
Fórmula: [¿Problema? + Solución + Acción]
|
27 |
+
Conecta con el dolor del lector y ofrece la solución inmediata.
|
28 |
+
""",
|
29 |
+
"examples": """
|
30 |
+
- "¿Cansado de no conseguir clientes? Descubre el método probado aquí"
|
31 |
+
- "¿Frustrado con tu marketing? Aprende la estrategia que funciona"
|
32 |
+
- "¿Sin tiempo para crear contenido? Accede a nuestro sistema automatizado"
|
33 |
+
"""
|
34 |
+
},
|
35 |
+
"Beneficio-Acción": {
|
36 |
+
"description": """
|
37 |
+
Fórmula: [Beneficio principal + Cómo obtenerlo]
|
38 |
+
Enfatiza el resultado deseado y muestra cómo conseguirlo.
|
39 |
+
""",
|
40 |
+
"examples": """
|
41 |
+
- "Duplica tus ingresos en 90 días: Únete al programa ahora"
|
42 |
+
- "Domina la persuasión en 4 semanas: Reserva tu plaza aquí"
|
43 |
+
- "Consigue tus primeros 1000 suscriptores: Descarga la guía gratuita"
|
44 |
+
"""
|
45 |
+
},
|
46 |
+
# In each formula where you want to add postdata variations, update the examples like this:
|
47 |
+
|
48 |
+
"Cierre-Urgente": {
|
49 |
+
"description": """
|
50 |
+
Fórmula: [Emoji + Invitación personal + Hora específica + Beneficio claro + Firma personal + (Tabla de horarios/Postdata persuasiva)]
|
51 |
+
Crea conexión inmediata con emoji visual, especifica hora exacta y beneficio claro.
|
52 |
+
Incluye firma personal para humanizar y una postdata estratégica.
|
53 |
+
""",
|
54 |
+
"examples": """
|
55 |
+
- "👀 Te veo hoy a las 05:00 pm de México para compartirte lo que necesitas saber para conectar, persuadir y vender con tus textos.
|
56 |
+
|
57 |
+
Hasta entonces,
|
58 |
+
Jesús Cabrera
|
59 |
+
|
60 |
+
P.D. María, una de mis estudiantes, facturó $5,000 en su primer mes aplicando estas técnicas. "El sistema de Jesús cambió mi forma de ver el copywriting para siempre"
|
61 |
+
|
62 |
+
P.D.2 Si tienes dudas de horarios:
|
63 |
+
05:00 pm: México, El Salvador, Nicaragua"
|
64 |
+
|
65 |
+
- "🚀 Te espero mañana a las 07:00 pm de México para revelarte las 5 estrategias que multiplicarán tus ventas.
|
66 |
+
|
67 |
+
¡Nos vemos!
|
68 |
+
Ana Martínez
|
69 |
+
|
70 |
+
P.D. Solo tengo 20 lugares disponibles y ya hay 15 registrados. Los últimos 5 recibirán una revisión personal de sus textos (valor: $200)"
|
71 |
+
"""
|
72 |
+
},
|
73 |
+
"Cierre-Emocional": {
|
74 |
+
"description": """
|
75 |
+
Fórmula: [Emoji + Expresión emocional + Anticipación de valor + Acción clara + Beneficio aspiracional + Firma personal]
|
76 |
+
Crea conexión emocional y genera expectativa, usando tono cercano y amigable.
|
77 |
+
Enfatiza el valor futuro y la transformación personal.
|
78 |
+
""",
|
79 |
+
"examples": """
|
80 |
+
- "✨ Estoy tan emocionado por verte para aplicar todos estos conceptos.
|
81 |
+
|
82 |
+
Haz clic aquí para registrarte al webinar y volverte el copy que todo mundo quiere que les escriba sus textos.
|
83 |
+
|
84 |
+
Hasta luego,
|
85 |
+
Jesús Cabrera"
|
86 |
+
|
87 |
+
- "🌟 No puedo esperar para compartirte todas las estrategias que he preparado.
|
88 |
+
|
89 |
+
Reserva tu lugar ahora y conviértete en el experto en ventas que las marcas buscan desesperadamente.
|
90 |
+
|
91 |
+
¡Nos vemos pronto!
|
92 |
+
María González"
|
93 |
+
|
94 |
+
- "💫 Me emociona saber que pronto descubrirás todo lo que puedes lograr.
|
95 |
+
|
96 |
+
Asegura tu acceso al taller y transfórmate en el consultor digital que las empresas necesitan.
|
97 |
+
|
98 |
+
Con entusiasmo,
|
99 |
+
Carlos Mendoza"
|
100 |
+
"""
|
101 |
+
},
|
102 |
+
"Cierre-Divertido": {
|
103 |
+
"description": """
|
104 |
+
Fórmula: [Emoji + Pregunta divertida + Metáfora creativa + Hora específica + Firma con apodo + Tabla de horarios]
|
105 |
+
Usa humor y metáforas creativas para generar interés y anticipación.
|
106 |
+
Incluye un toque personal con apodo divertido en la firma.
|
107 |
+
""",
|
108 |
+
"examples": """
|
109 |
+
- "🔥 ¿Listo para sacarle chispas a tus textos? Porque esta tarde te enseñaré cómo convertir palabras en armas secretas de persuasión.
|
110 |
+
|
111 |
+
Te espero a las 05:00 pm de México, no llegues tarde.
|
112 |
+
|
113 |
+
Hasta entonces,
|
114 |
+
Jesús "el transformador de textos" Cabrera
|
115 |
+
|
116 |
+
P.D. En caso de que necesites confirmar horarios, aquí te dejo una ayudita:
|
117 |
+
05:00 pm: México, El Salvador, Nicaragua, Costa Rica, Honduras"
|
118 |
+
|
119 |
+
- "⚡ ¿Preparado para hacer que tu Instagram eche humo? Hoy revelaré los trucos ninja del contenido viral.
|
120 |
+
|
121 |
+
La diversión comienza a las 07:00 pm hora México, ¡no te lo pierdas!
|
122 |
+
|
123 |
+
Nos vemos al rato,
|
124 |
+
Ana "la maga del engagement" Rodríguez
|
125 |
+
|
126 |
+
P.D. Aquí los horarios para que no te pierdas la fiesta:
|
127 |
+
07:00 pm: México, Guatemala
|
128 |
+
08:00 pm: Colombia, Ecuador
|
129 |
+
10:00 pm: Argentina, Chile"
|
130 |
+
|
131 |
+
- "🎯 ¿Quieres que tus emails sean tan irresistibles como el último capítulo de tu serie favorita? Prepárate para dominar el arte del email marketing que engancha.
|
132 |
+
|
133 |
+
La magia sucede a las 06:00 pm Colombia, ¡trae palomitas!
|
134 |
+
|
135 |
+
¡Hasta pronto!
|
136 |
+
Carlos "el hechicero de emails" Mendoza
|
137 |
+
|
138 |
+
P.D. Encuentra tu hora mágica aquí:
|
139 |
+
04:00 pm: México, Guatemala
|
140 |
+
06:00 pm: Colombia, Perú
|
141 |
+
08:00 pm: Argentina, Chile"
|
142 |
+
"""
|
143 |
+
}
|
144 |
+
}
|
manual.md
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
**Bienvenid@ Copy Xpert**
|
2 |
+
|
3 |
+
Crea Propuestas Únicas de Valor (PUV) persuasivas que conecten con tus clientes ideales y comuniquen efectivamente tu valor en el mercado.
|
4 |
+
|
5 |
+
### ¿Cómo usar el Generador de PUV?
|
6 |
+
|
7 |
+
Sigue estos pasos para aprovechar al máximo la herramienta:
|
8 |
+
|
9 |
+
### 1. Configuración Básica
|
10 |
+
|
11 |
+
#### Producto/Servicio
|
12 |
+
- Describe tu solución claramente
|
13 |
+
- Enfócate en los beneficios principales
|
14 |
+
- Ejemplos específicos:
|
15 |
+
|
16 |
+
- "Curso de LinkedIn Orgánico: De 0 a 10k seguidores en 90 días"
|
17 |
+
- "Software de Automatización para Pequeños Negocios"
|
18 |
+
- "Programa de Coaching Transformacional de 12 Semanas"
|
19 |
+
- "Agencia de Marketing Digital Especializada en E-commerce"
|
20 |
+
- "Plataforma de Cursos Online para Creadores"
|
21 |
+
|
22 |
+
#### Público Objetivo
|
23 |
+
- Define quién es tu cliente ideal
|
24 |
+
- Incluye sus dolores, deseos y aspiraciones
|
25 |
+
- Ejemplos detallados:
|
26 |
+
|
27 |
+
- "Emprendedores digitales entre 30-45 años que luchan por conseguir clientes en LinkedIn"
|
28 |
+
- "Coaches profesionales que quieren destacar en un mercado saturado"
|
29 |
+
- "Dueños de pequeños negocios que buscan automatizar sus procesos"
|
30 |
+
- "Dueños de tiendas online con ingresos de $10k-50k mensuales"
|
31 |
+
- "Creadores de contenido que luchan por monetizar su audiencia"
|
32 |
+
|
33 |
+
### 2. Fórmulas Disponibles
|
34 |
+
|
35 |
+
#### Fórmula Tradicional
|
36 |
+
Ideal para:
|
37 |
+
- Comunicación clara y directa
|
38 |
+
- Servicios profesionales tradicionales
|
39 |
+
- Cuando necesitas un enfoque directo y estructurado
|
40 |
+
- Mercados que valoran la claridad
|
41 |
+
- Servicios B2B establecidos
|
42 |
+
|
43 |
+
#### Fórmula Anti-tradicional
|
44 |
+
Ideal para:
|
45 |
+
- Servicios innovadores
|
46 |
+
- Cuando buscas diferenciarte
|
47 |
+
- Mercados competitivos
|
48 |
+
- Propuestas disruptivas
|
49 |
+
- Transformaciones profundas
|
50 |
+
|
51 |
+
#### Contrato Imposible
|
52 |
+
Ideal para:
|
53 |
+
- Ofertas disruptivas
|
54 |
+
- Soluciones innovadoras
|
55 |
+
- Desafiar las normas de la industria
|
56 |
+
- Productos/servicios de alto ticket
|
57 |
+
- Cuando quieres destacar
|
58 |
+
|
59 |
+
#### Reto Ridículo
|
60 |
+
Ideal para:
|
61 |
+
- Simplificar soluciones complejas
|
62 |
+
- Romper barreras con humor
|
63 |
+
- Abordar frustraciones comunes
|
64 |
+
- Cuando quieres mostrar facilidad de uso
|
65 |
+
- Convertir escépticos con historias
|
66 |
+
|
67 |
+
### 3. Mejores Prácticas
|
68 |
+
|
69 |
+
#### Para Resultados Óptimos
|
70 |
+
1. Sé específico con tu público objetivo
|
71 |
+
- ❌ "Emprendedores que quieren vender más"
|
72 |
+
- ✅ "Emprendedores de e-commerce que facturan $5k-$10k mensuales y buscan escalar"
|
73 |
+
|
74 |
+
2. Enfócate en la transformación
|
75 |
+
- ❌ "Un buen curso de marketing"
|
76 |
+
- ✅ "Un sistema probado que convierte coaches frustrados en expertos con agenda llena"
|
77 |
+
|
78 |
+
3. Usa resultados medibles
|
79 |
+
- ❌ "Mejora tu negocio"
|
80 |
+
- ✅ "Duplica tu base de clientes en 90 días"
|
81 |
+
|
82 |
+
4. Incluye diferenciadores
|
83 |
+
- ❌ "Ayudo a negocios a crecer"
|
84 |
+
- ✅ "Ayudo a proveedores de servicios a triplicar sus precios sin perder clientes"
|
85 |
+
|
86 |
+
#### Evitar
|
87 |
+
1. Declaraciones genéricas
|
88 |
+
- ❌ "El mejor servicio del mercado"
|
89 |
+
- ✅ "La única estrategia de LinkedIn que garantiza 50 leads mensuales"
|
90 |
+
|
91 |
+
2. Jerga técnica
|
92 |
+
- ❌ "Implementando modelos de atribución multicanal"
|
93 |
+
- ✅ "Por fin sabrás exactamente de dónde vienen tus mejores clientes"
|
94 |
+
|
95 |
+
3. Promesas vagas
|
96 |
+
- ❌ "Obtén mejores resultados"
|
97 |
+
- ✅ "Genera tus primeros $10k mensuales en 90 días"
|
98 |
+
|
99 |
+
### Consejos Avanzados
|
100 |
+
|
101 |
+
1. **Ajuste del Nivel de Creatividad**
|
102 |
+
- Bajo (0.0-0.7): Resultados más conservadores y consistentes
|
103 |
+
- Medio (0.8-1.2): Balance entre creatividad y confiabilidad
|
104 |
+
- Alto (1.3-2.0): Ángulos más innovadores e inesperados
|
105 |
+
|
106 |
+
2. **Selección de Fórmula**
|
107 |
+
- Fórmula Tradicional: Para comunicación clara y directa
|
108 |
+
- Fórmula Anti-tradicional: Para un enfoque más creativo y personal
|
109 |
+
- Contrato Imposible: Para disrumpir el mercado
|
110 |
+
- Reto Ridículo: Para conectar con humor y autenticidad
|
111 |
+
|
112 |
+
3. **Pruebas y Mejora**
|
113 |
+
- Prueba diferentes fórmulas para la misma oferta
|
114 |
+
- Experimenta con varios niveles de creatividad
|
115 |
+
- Mantén lo que resuena con tu audiencia
|
116 |
+
|
117 |
+
Recuerda: Una gran PUV debe hacer que tu cliente ideal piense, "¡Esto es exactamente lo que estaba buscando!"
|
styles.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
def apply_styles():
|
4 |
+
return """
|
5 |
+
<style>
|
6 |
+
h1, h3 {
|
7 |
+
text-align: center;
|
8 |
+
}
|
9 |
+
|
10 |
+
.stButton > button {
|
11 |
+
background-color: #FFD700 !important;
|
12 |
+
color: black !important;
|
13 |
+
border: 1px solid black !important;
|
14 |
+
font-weight: bold !important;
|
15 |
+
width: 80% !important;
|
16 |
+
margin-left: 10% !important;
|
17 |
+
}
|
18 |
+
</style>
|
19 |
+
"""
|
20 |
+
st.markdown("""
|
21 |
+
<style>
|
22 |
+
.stTextArea > label {
|
23 |
+
font-size: 1.2rem;
|
24 |
+
font-weight: bold;
|
25 |
+
color: #2c3e50;
|
26 |
+
}
|
27 |
+
|
28 |
+
.stSelectbox > label {
|
29 |
+
font-size: 1.2rem;
|
30 |
+
font-weight: bold;
|
31 |
+
color: #2c3e50;
|
32 |
+
}
|
33 |
+
|
34 |
+
.stSlider > label {
|
35 |
+
font-size: 1.2rem;
|
36 |
+
font-weight: bold;
|
37 |
+
color: #2c3e50;
|
38 |
+
}
|
39 |
+
|
40 |
+
.stButton > button {
|
41 |
+
background-color: #2c3e50;
|
42 |
+
color: white;
|
43 |
+
padding: 0.5rem 2rem;
|
44 |
+
font-size: 1.1rem;
|
45 |
+
font-weight: bold;
|
46 |
+
border-radius: 5px;
|
47 |
+
}
|
48 |
+
|
49 |
+
.stButton > button:hover {
|
50 |
+
background-color: #34495e;
|
51 |
+
}
|
52 |
+
|
53 |
+
h1 {
|
54 |
+
color: #2c3e50;
|
55 |
+
font-size: 2.5rem;
|
56 |
+
margin-bottom: 1rem;
|
57 |
+
}
|
58 |
+
|
59 |
+
h3 {
|
60 |
+
color: #34495e;
|
61 |
+
font-size: 1.3rem;
|
62 |
+
font-weight: normal;
|
63 |
+
margin-bottom: 2rem;
|
64 |
+
}
|
65 |
+
|
66 |
+
.stMarkdown {
|
67 |
+
font-size: 1.1rem;
|
68 |
+
}
|
69 |
+
|
70 |
+
.element-container {
|
71 |
+
margin-bottom: 1.5rem;
|
72 |
+
}
|
73 |
+
</style>
|
74 |
+
""", unsafe_allow_html=True)
|
75 |
+
|
76 |
+
def format_story_output(story_text):
|
77 |
+
return f"""
|
78 |
+
<div class="story-output">
|
79 |
+
{story_text}
|
80 |
+
</div>
|
81 |
+
"""
|