Spaces:
Running
Running
Upload 4 files
Browse files- app.py +123 -118
- manual.md +184 -178
- puv_formulas.py +81 -0
- styles.py +65 -65
app.py
CHANGED
@@ -1,119 +1,124 @@
|
|
1 |
-
from dotenv import load_dotenv
|
2 |
-
import streamlit as st
|
3 |
-
import os
|
4 |
-
import google.generativeai as genai
|
5 |
-
from
|
6 |
-
from styles import apply_styles
|
7 |
-
|
8 |
-
# Cargar variables de entorno
|
9 |
-
load_dotenv()
|
10 |
-
|
11 |
-
# Configurar API de Google Gemini
|
12 |
-
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
|
13 |
-
|
14 |
-
# Función para obtener la respuesta del modelo Gemini
|
15 |
-
def get_gemini_response(
|
16 |
-
if not
|
17 |
-
return "
|
18 |
-
|
19 |
-
formula =
|
20 |
-
|
21 |
-
model = genai.GenerativeModel('gemini-2.0-flash')
|
22 |
-
full_prompt = f"""
|
23 |
-
You are a
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
{formula["description"]}
|
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 |
st.divider()
|
|
|
1 |
+
from dotenv import load_dotenv
|
2 |
+
import streamlit as st
|
3 |
+
import os
|
4 |
+
import google.generativeai as genai
|
5 |
+
from puv_formulas import puv_formulas
|
6 |
+
from styles import apply_styles
|
7 |
+
|
8 |
+
# Cargar variables de entorno
|
9 |
+
load_dotenv()
|
10 |
+
|
11 |
+
# Configurar API de Google Gemini
|
12 |
+
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
|
13 |
+
|
14 |
+
# Función para obtener la respuesta del modelo Gemini
|
15 |
+
def get_gemini_response(product_service, target_audience, formula_type, temperature):
|
16 |
+
if not product_service or not target_audience:
|
17 |
+
return "Please complete all required fields."
|
18 |
+
|
19 |
+
formula = puv_formulas[formula_type]
|
20 |
+
|
21 |
+
model = genai.GenerativeModel('gemini-2.0-flash')
|
22 |
+
full_prompt = f"""
|
23 |
+
You are a UVP (Unique Value Proposition) expert. Analyze the following information and create THREE compelling UVPs:
|
24 |
+
|
25 |
+
BUSINESS INFORMATION:
|
26 |
+
Product/Service: {product_service}
|
27 |
+
Target Audience: {target_audience}
|
28 |
+
Formula Type: {formula_type}
|
29 |
+
|
30 |
+
{formula["description"]}
|
31 |
+
|
32 |
+
First, analyze and provide:
|
33 |
+
1. TARGET AUDIENCE ANALYSIS - Pain Points:
|
34 |
+
- What specific frustrations does this audience experience?
|
35 |
+
- What are their biggest daily challenges?
|
36 |
+
- What emotional problems do they face?
|
37 |
+
- What have they tried before that didn't work?
|
38 |
+
- What's stopping them from achieving their goals?
|
39 |
+
|
40 |
+
2. PRODUCT/SERVICE ANALYSIS - Benefits:
|
41 |
+
- What tangible results do clients get?
|
42 |
+
- What specific transformation does it offer?
|
43 |
+
- What's the unique method or differentiator?
|
44 |
+
- What competitive advantages does it have?
|
45 |
+
- What emotional benefits does it provide?
|
46 |
+
|
47 |
+
Then, create THREE different UVPs following the formula structure provided above.
|
48 |
+
|
49 |
+
CRITICAL INSTRUCTIONS:
|
50 |
+
- Each UVP must be specific and measurable
|
51 |
+
- Focus on the transformation journey
|
52 |
+
- Use natural, conversational language
|
53 |
+
- Avoid generic phrases and buzzwords
|
54 |
+
- Maximum 2 lines per UVP
|
55 |
+
- Separate sections with "---"
|
56 |
+
|
57 |
+
Format your response as:
|
58 |
+
TARGET AUDIENCE ANALYSIS (Pain Points)
|
59 |
+
[Detailed target audience analysis]
|
60 |
+
---
|
61 |
+
PRODUCT/SERVICE ANALYSIS (Benefits)
|
62 |
+
[Detailed product/service benefits]
|
63 |
+
---
|
64 |
+
VALUE PROPOSITIONS:
|
65 |
+
[Three UVPs]
|
66 |
+
"""
|
67 |
+
|
68 |
+
response = model.generate_content([full_prompt], generation_config={"temperature": temperature})
|
69 |
+
return response.parts[0].text if response and response.parts else "Error generating content."
|
70 |
+
|
71 |
+
# Configurar la aplicación Streamlit
|
72 |
+
st.set_page_config(page_title="UVP Generator", page_icon="💡", layout="wide")
|
73 |
+
|
74 |
+
# Título de la app
|
75 |
+
st.markdown("<h1>UVP Generator</h1>", unsafe_allow_html=True)
|
76 |
+
st.markdown("<h3>Create powerful Unique Value Propositions that attract your ideal clients and communicate your unique value.</h3>", unsafe_allow_html=True)
|
77 |
+
|
78 |
+
# Sidebar manual
|
79 |
+
with open("manual.md", "r", encoding="utf-8") as file:
|
80 |
+
manual_content = file.read()
|
81 |
+
st.sidebar.markdown(manual_content)
|
82 |
+
|
83 |
+
# Crear dos columnas
|
84 |
+
col1, col2 = st.columns([1, 1])
|
85 |
+
|
86 |
+
# Columna izquierda para inputs
|
87 |
+
with col1:
|
88 |
+
product_service = st.text_area(
|
89 |
+
"What's your product or service?",
|
90 |
+
placeholder="Example: AI-powered copywriting course, Coaching program..."
|
91 |
+
)
|
92 |
+
|
93 |
+
target_audience = st.text_area(
|
94 |
+
"Who's your target audience?",
|
95 |
+
placeholder="Example: Coaches who want to attract more clients..."
|
96 |
+
)
|
97 |
+
with st.expander("Advanced options"):
|
98 |
+
formula_type = st.selectbox(
|
99 |
+
"UVP Formula:",
|
100 |
+
options=list(puv_formulas.keys())
|
101 |
+
)
|
102 |
+
temperature = st.slider(
|
103 |
+
"Creativity level:",
|
104 |
+
min_value=0.0,
|
105 |
+
max_value=2.0,
|
106 |
+
value=1.0,
|
107 |
+
step=0.1,
|
108 |
+
help="Higher values generate more creative but less predictable propositions."
|
109 |
+
)
|
110 |
+
|
111 |
+
generate_button = st.button("Generate UVP")
|
112 |
+
|
113 |
+
with col2:
|
114 |
+
if generate_button:
|
115 |
+
response = get_gemini_response(
|
116 |
+
product_service,
|
117 |
+
target_audience,
|
118 |
+
formula_type,
|
119 |
+
temperature
|
120 |
+
)
|
121 |
+
sections = response.split("---")
|
122 |
+
for section in sections:
|
123 |
+
st.write(section.strip())
|
124 |
st.divider()
|
manual.md
CHANGED
@@ -1,179 +1,185 @@
|
|
1 |
-
**Bienvenid@ Copy Xpert**
|
2 |
-
|
3 |
-
Story Genius Maker está diseñada para ayudarte a tejer historias inolvidables en segundos, guiada por la magia de la inteligencia artificial que da vida a tus ideas en relatos cautivadores.
|
4 |
-
|
5 |
-
### ¿Cómo utilizar Story Genius Maker?
|
6 |
-
|
7 |
-
Sigue estos pasos para sacar el máximo provecho de la herramienta:
|
8 |
-
|
9 |
-
### 1. Configuración Básica
|
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 |
-
- Productos
|
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 |
- Memorabilidad del mensaje: Las historias se recuerdan 22 veces más que los hechos
|
|
|
1 |
+
**Bienvenid@ Copy Xpert**
|
2 |
+
|
3 |
+
Story Genius Maker está diseñada para ayudarte a tejer historias inolvidables en segundos, guiada por la magia de la inteligencia artificial que da vida a tus ideas en relatos cautivadores.
|
4 |
+
|
5 |
+
### ¿Cómo utilizar Story Genius Maker?
|
6 |
+
|
7 |
+
Sigue estos pasos para sacar el máximo provecho de la herramienta:
|
8 |
+
|
9 |
+
### 1. Configuración Básica
|
10 |
+
|
11 |
+
#### Público Objetivo
|
12 |
+
- Define quién es tu audiencia ideal
|
13 |
+
- Incluye sus dolores, deseos y aspiraciones
|
14 |
+
- Ejemplos detallados:
|
15 |
+
|
16 |
+
+ "Emprendedores digitales entre 30-45 años que luchan por conseguir clientes en LinkedIn"
|
17 |
+
+ "Madres profesionales de 35-50 años buscando balance entre trabajo y familia"
|
18 |
+
+ "Profesionales de marketing frustrados con el bajo engagement en redes sociales"
|
19 |
+
+ "Coaches de vida que quieren destacar en un mercado saturado"
|
20 |
+
+ "Dueños de pequeños negocios que buscan automatizar sus procesos"
|
21 |
+
|
22 |
+
#### Producto/Servicio
|
23 |
+
- Describe tu solución claramente
|
24 |
+
- Enfócate en beneficios principales
|
25 |
+
- Ejemplos específicos:
|
26 |
+
|
27 |
+
- "Curso de LinkedIn Orgánico: De 0 a 10k seguidores en 90 días"
|
28 |
+
- "App de productividad para madres: Organiza tu vida en 15 minutos al día"
|
29 |
+
- "Mentoría VIP de Instagram: Estrategia personalizada de contenido"
|
30 |
+
- "Software de automatización para pequeños negocios"
|
31 |
+
- "Programa de coaching transformacional de 12 semanas"
|
32 |
+
|
33 |
+
#### Acción Deseada
|
34 |
+
- Especifica qué quieres que haga tu audiencia
|
35 |
+
- Sé claro y directo
|
36 |
+
- Ejemplos concretos:
|
37 |
+
|
38 |
+
- "Registrarse al webinar gratuito este jueves"
|
39 |
+
- "Descargar la guía PDF con 27 templates"
|
40 |
+
- "Agendar llamada de diagnóstico sin costo"
|
41 |
+
- "Aprovechar 50% de descuento - solo 48 horas"
|
42 |
+
- "Unirse al grupo privado de Facebook"
|
43 |
+
|
44 |
+
### 2. Personalización de la Historia
|
45 |
+
|
46 |
+
#### Control de Longitud
|
47 |
+
- Corta: 100-115 palabras (ideal para posts y emails cortos)
|
48 |
+
- Media: 116-130 palabras (ideal para emails y landing pages)
|
49 |
+
- Larga: 131-150 palabras (ideal para historias detalladas)
|
50 |
+
|
51 |
+
Nota: La longitud está optimizada para mantener la atención del lector mientras se transmite el mensaje completo. Las historias más efectivas combinan impacto y detalle, manteniendo un equilibrio entre profundidad y engagement.
|
52 |
+
|
53 |
+
Recomendaciones por canal:
|
54 |
+
|
55 |
+
- LinkedIn/Facebook: 100-115 palabras
|
56 |
+
- Email marketing: 116-130 palabras
|
57 |
+
- Páginas de ventas: 131-150 palabras
|
58 |
+
- Landing pages: 100-115 palabras
|
59 |
+
- Historias detalladas: 131-150 palabras
|
60 |
+
|
61 |
+
#### Tono Emocional
|
62 |
+
- Inspirador: Eleva y motiva con historias de superación
|
63 |
+
- Empático: Conecta desde la comprensión y el entendimiento
|
64 |
+
- Profesional: Establece autoridad y credibilidad
|
65 |
+
- Humorístico: Entretiene mientras educa
|
66 |
+
- Desafiante: Provoca reflexión y acción
|
67 |
+
- Conversacional: Natural y cercano
|
68 |
+
- Nostálgico: Evoca recuerdos y emociones
|
69 |
+
- Urgente: Genera acción inmediata
|
70 |
+
|
71 |
+
### 3. Fórmulas Disponibles
|
72 |
+
|
73 |
+
#### P.A.S.A. (Problema-Agitación-Solución-Acción)
|
74 |
+
Ideal para:
|
75 |
+
- Productos que resuelven dolores específicos
|
76 |
+
- Servicios de transformación personal
|
77 |
+
- Soluciones a problemas urgentes
|
78 |
+
- Ofertas de alto ticket
|
79 |
+
- Cuando el dolor es el principal motivador
|
80 |
+
- Ventas de servicios profesionales
|
81 |
+
- Productos de bienestar y salud
|
82 |
+
|
83 |
+
#### A.D.P. (Antes-Después-Puente)
|
84 |
+
Ideal para:
|
85 |
+
- Historias de transformación personal
|
86 |
+
- Testimonios de clientes
|
87 |
+
- Lanzamientos de productos
|
88 |
+
- Casos de estudio
|
89 |
+
- Servicios de coaching
|
90 |
+
- Programas de formación
|
91 |
+
- Productos de desarrollo personal
|
92 |
+
|
93 |
+
#### G.H.A. (Gancho-Historia-Acción)
|
94 |
+
Ideal para:
|
95 |
+
- Contenido viral en redes sociales
|
96 |
+
- Emails de nurturing
|
97 |
+
- Posts de blog
|
98 |
+
- Videos de YouTube
|
99 |
+
- Podcasts
|
100 |
+
- Webinars
|
101 |
+
- Presentaciones en vivo
|
102 |
+
|
103 |
+
### Mejores Prácticas
|
104 |
+
|
105 |
+
#### Para Resultados Óptimos
|
106 |
+
1. Sé específico con tu audiencia
|
107 |
+
- ❌ "Emprendedores que quieren vender más"
|
108 |
+
- ✅ "Emprendedores de e-commerce que facturan $5k-$10k mensuales y buscan escalar"
|
109 |
+
|
110 |
+
2. Usa detalles sensoriales
|
111 |
+
- ❌ "Estaba frustrado con mis ventas"
|
112 |
+
- ✅ "Mis manos temblaban cada vez que revisaba el dashboard de ventas vacío"
|
113 |
+
|
114 |
+
3. Mantén coherencia narrativa
|
115 |
+
- ❌ Saltar entre diferentes tiempos y perspectivas
|
116 |
+
- ✅ Mantener una línea temporal clara y una voz consistente
|
117 |
+
|
118 |
+
4. Incluye elementos emocionales
|
119 |
+
- ❌ "Implementé la estrategia y funcionó"
|
120 |
+
- ✅ "Por fin pude dormir tranquilo, sabiendo que mi negocio estaba en crecimiento"
|
121 |
+
|
122 |
+
5. Termina con CTA claro
|
123 |
+
- ❌ "Contáctanos para más información"
|
124 |
+
- ✅ "Reserva tu diagnóstico gratuito de 30 minutos - solo 5 espacios disponibles esta semana"
|
125 |
+
|
126 |
+
#### Evitar
|
127 |
+
1. Historias genéricas
|
128 |
+
- ❌ "Un día decidí cambiar mi vida"
|
129 |
+
- ✅ "El 15 de marzo, mientras miraba mi cuenta bancaria con $127, tomé una decisión"
|
130 |
+
|
131 |
+
2. Exceso de jerga técnica
|
132 |
+
- ❌ "Implementamos una estrategia de growth hacking con KPIs optimizados"
|
133 |
+
- ✅ "Creamos un sistema simple que duplicó nuestras ventas en 30 días"
|
134 |
+
|
135 |
+
3. CTAs débiles o confusos
|
136 |
+
- ❌ "Piénsalo y decide"
|
137 |
+
- ✅ "Haz clic en el botón azul para reservar tu lugar - solo 3 espacios disponibles"
|
138 |
+
|
139 |
+
4. Narrativas desconectadas
|
140 |
+
- ❌ Mezclar historias sin relación
|
141 |
+
- ✅ Mantener un hilo conductor claro
|
142 |
+
|
143 |
+
### Solución de Problemas
|
144 |
+
|
145 |
+
#### Problemas Comunes
|
146 |
+
1. **Historia poco engaging**
|
147 |
+
- Aumenta temperatura a 1.2-1.5
|
148 |
+
- Añade detalles específicos: "Mi primer webinar tuvo 2 asistentes, y uno era mi mamá"
|
149 |
+
- Incluye diálogo interno: "¿Realmente estoy hecho para esto?, me preguntaba cada noche"
|
150 |
+
|
151 |
+
2. **CTA débil**
|
152 |
+
- Añade urgencia real: "Solo 5 espacios disponibles - 3 ya reservados"
|
153 |
+
- Especifica el siguiente paso: "Haz clic en el botón verde para agendar tu llamada"
|
154 |
+
- Refuerza el beneficio: "En 30 minutos, diseñaremos tu plan personalizado de ventas"
|
155 |
+
|
156 |
+
3. **Narrativa dispersa**
|
157 |
+
- Usa una estructura clara: Situación → Complicación → Resolución
|
158 |
+
- Mantén un solo tema central: "Mi viaje de $0 a $10k mensuales"
|
159 |
+
- Conecta cada párrafo con el siguiente
|
160 |
+
|
161 |
+
### Consejos Avanzados
|
162 |
+
|
163 |
+
1. **Optimización de Historias**
|
164 |
+
- Prueba P.A.S.A. para productos que resuelven dolores claros
|
165 |
+
- Usa A.D.P. para servicios de transformación
|
166 |
+
- Aplica G.H.A. para contenido en redes sociales
|
167 |
+
|
168 |
+
2. **Personalización Avanzada**
|
169 |
+
- Incluye jerga de tu industria: "De 0 leads a pipeline lleno"
|
170 |
+
- Usa metáforas relevantes: "Tu LinkedIn es como un vendedor 24/7"
|
171 |
+
- Adapta el tono según la red social
|
172 |
+
|
173 |
+
3. **Testing y Mejora**
|
174 |
+
- A/B testing con diferentes ganchos
|
175 |
+
- Mide engagement por tipo de historia
|
176 |
+
- Analiza qué CTAs generan más conversiones
|
177 |
+
|
178 |
+
## ¿Por qué las Historias son Importantes?
|
179 |
+
|
180 |
+
Las historias son el vehículo más poderoso para:
|
181 |
+
- Conectar emocionalmente: "Me sentí exactamente igual hace un año"
|
182 |
+
- Demostrar transformación: "De consultor frustrado a mentor buscado"
|
183 |
+
- Inspirar acción: "Si yo pude, tú también puedes"
|
184 |
+
- Construir confianza: A través de vulnerabilidad y autenticidad
|
185 |
- Memorabilidad del mensaje: Las historias se recuerdan 22 veces más que los hechos
|
puv_formulas.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
puv_formulas = {
|
2 |
+
"Fórmula Tradicional": {
|
3 |
+
"description": """
|
4 |
+
The Traditional Formula creates a clear and direct UVP that focuses on four key objectives:
|
5 |
+
- Attracting your ideal client by highlighting specific characteristics and pain points
|
6 |
+
- Repelling non-ideal clients to ensure resource efficiency
|
7 |
+
- Explaining the promised transformation clearly
|
8 |
+
- Generating purchase commitment through value demonstration
|
9 |
+
|
10 |
+
Structure:
|
11 |
+
1. I help [SPECIFIC AVATAR]
|
12 |
+
(Describe in detail: situation, problems, desires)
|
13 |
+
|
14 |
+
2. To achieve [PROMISED TRANSFORMATION]
|
15 |
+
(Explain the change/result simply and convincingly)
|
16 |
+
|
17 |
+
Key elements to include:
|
18 |
+
- Emotional appeal
|
19 |
+
- Clear and direct language
|
20 |
+
- Service highlights
|
21 |
+
- Natural filtering of non-ideal clients
|
22 |
+
""",
|
23 |
+
"example": "I help single business women with no time for love, who feel trapped in their careers and have had bad experiences in the past, to find a compatible partner who respects their success and time, without getting lost in frustrating dates or unfulfilling relationships."
|
24 |
+
},
|
25 |
+
"Contrato Imposible": {
|
26 |
+
"description": """
|
27 |
+
The "Impossible Contract" formula creates a compelling and disruptive UVP by challenging conventional approaches.
|
28 |
+
It works by:
|
29 |
+
- Making a bold, specific promise to a well-defined audience
|
30 |
+
- Presenting your solution in an unexpected, intriguing way
|
31 |
+
- Highlighting a transformative benefit that seems "too good to be true"
|
32 |
+
- Differentiating from traditional solutions by stating what you won't do
|
33 |
+
|
34 |
+
This formula is particularly effective when you want to:
|
35 |
+
- Stand out in a crowded market
|
36 |
+
- Challenge industry conventions
|
37 |
+
- Appeal to audiences frustrated with traditional solutions
|
38 |
+
- Create an emotional connection while maintaining credibility
|
39 |
+
|
40 |
+
Structure:
|
41 |
+
1. I offer [TARGET AUDIENCE]
|
42 |
+
(Be specific: e.g., "single business women with no time for love", "busy parents planning parties")
|
43 |
+
|
44 |
+
2. [PRODUCT/SERVICE]
|
45 |
+
(Describe it in a fun, unexpected way that shows transformation)
|
46 |
+
|
47 |
+
3. You won't believe [TRANSFORMATIVE BENEFIT]
|
48 |
+
(Must be directly related to the expected change/result)
|
49 |
+
|
50 |
+
4. But watch out: [ANTI-TRADITIONAL APPROACH]
|
51 |
+
(Show how you're different from conventional solutions)
|
52 |
+
""",
|
53 |
+
"example": "I offer single business women with no time for love a transformative course that teaches you how to attract a compatible partner without sacrificing your career. You won't believe how you'll find a partner who values your time and success. But watch out: no more wasting time on dead-end dates or dating apps that lead nowhere - and no pretending to be someone you're not."
|
54 |
+
},
|
55 |
+
"Reto Ridículo": {
|
56 |
+
"description": """
|
57 |
+
The "Ridiculous Challenge" formula creates an engaging UVP by making complex problems seem surprisingly simple.
|
58 |
+
It works through three key steps:
|
59 |
+
- Acknowledging a common frustration
|
60 |
+
- Revealing an unexpected solution
|
61 |
+
- Demonstrating surprising simplicity
|
62 |
+
|
63 |
+
Structure:
|
64 |
+
1. You know that [COMMON CHALLENGE]
|
65 |
+
(Describe a relatable daily frustration your ideal client faces)
|
66 |
+
|
67 |
+
2. But I have a secret [UNIQUE SOLUTION]
|
68 |
+
(Introduce an unexpected or little-known solution that changes their reality)
|
69 |
+
|
70 |
+
3. And actually, it's much easier than it seems [SIMPLE TRANSFORMATION]
|
71 |
+
(Show how easily they can achieve the desired result)
|
72 |
+
|
73 |
+
Key elements to include:
|
74 |
+
- Relatable pain points
|
75 |
+
- Unexpected twist
|
76 |
+
- Simplification of complex problems
|
77 |
+
- Heart-centered approach
|
78 |
+
""",
|
79 |
+
"example": "You know that as a personal development expert, attracting ideal clients doesn't have to be as complicated as launching a million-dollar advertising campaign, right? But I have a secret: using authentic storytelling to connect emotionally with your audience is much easier than you think. All you have to do is speak from the heart, and yes, the clients who really want you will find their way to you."
|
80 |
+
}
|
81 |
+
}
|
styles.py
CHANGED
@@ -1,66 +1,66 @@
|
|
1 |
-
import streamlit as st
|
2 |
-
|
3 |
-
def apply_styles():
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
.
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
}
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
color: #
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
color:
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
margin:
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
}
|
58 |
-
</style>
|
59 |
-
""", unsafe_allow_html=True)
|
60 |
-
|
61 |
-
def format_story_output(story_text):
|
62 |
-
return f"""
|
63 |
-
<div class="story-output">
|
64 |
-
{story_text}
|
65 |
-
</div>
|
66 |
"""
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
def apply_styles():
|
4 |
+
"""Apply custom CSS styles to the Streamlit app"""
|
5 |
+
st.markdown("""
|
6 |
+
<style>
|
7 |
+
.stTextArea > label {
|
8 |
+
font-size: 1.2rem;
|
9 |
+
font-weight: bold;
|
10 |
+
color: #2c3e50;
|
11 |
+
}
|
12 |
+
|
13 |
+
.stSelectbox > label {
|
14 |
+
font-size: 1.2rem;
|
15 |
+
font-weight: bold;
|
16 |
+
color: #2c3e50;
|
17 |
+
}
|
18 |
+
|
19 |
+
.stSlider > label {
|
20 |
+
font-size: 1.2rem;
|
21 |
+
font-weight: bold;
|
22 |
+
color: #2c3e50;
|
23 |
+
}
|
24 |
+
|
25 |
+
.stButton > button {
|
26 |
+
background-color: #2c3e50;
|
27 |
+
color: white;
|
28 |
+
padding: 0.5rem 2rem;
|
29 |
+
font-size: 1.1rem;
|
30 |
+
font-weight: bold;
|
31 |
+
border-radius: 5px;
|
32 |
+
}
|
33 |
+
|
34 |
+
.stButton > button:hover {
|
35 |
+
background-color: #34495e;
|
36 |
+
}
|
37 |
+
|
38 |
+
h1 {
|
39 |
+
color: #2c3e50;
|
40 |
+
font-size: 2.5rem;
|
41 |
+
margin-bottom: 1rem;
|
42 |
+
}
|
43 |
+
|
44 |
+
h3 {
|
45 |
+
color: #34495e;
|
46 |
+
font-size: 1.3rem;
|
47 |
+
font-weight: normal;
|
48 |
+
margin-bottom: 2rem;
|
49 |
+
}
|
50 |
+
|
51 |
+
.stMarkdown {
|
52 |
+
font-size: 1.1rem;
|
53 |
+
}
|
54 |
+
|
55 |
+
.element-container {
|
56 |
+
margin-bottom: 1.5rem;
|
57 |
+
}
|
58 |
+
</style>
|
59 |
+
""", unsafe_allow_html=True)
|
60 |
+
|
61 |
+
def format_story_output(story_text):
|
62 |
+
return f"""
|
63 |
+
<div class="story-output">
|
64 |
+
{story_text}
|
65 |
+
</div>
|
66 |
"""
|