// Ejecutora — La Rutina que Vende™ — Los 3 Pilares
const RutinaScreen = () => {
const [activePilar, setActivePilar] = React.useState('pilar1');
const [mesActual, setMesActual] = React.useState('mayo');
const [okrForm, setOkrForm] = React.useState({ objetivo: '', kr1: '', kr2: '', kr3: '' });
// Pilar 1 — Planificación
const [planMes, setPlanMes] = React.useState({
campana: 'adquisicion',
productoProtagonista: 'Pack Bienvenida',
metaFacturacion: '8000',
metaClientes: '15',
inversion: '200',
fechaClave: 'Día de la Madre — 11 may',
});
const [areas, setAreas] = React.useState([
{ id: 'producto', label: 'Producto', icon: '📦', pregunta: '¿Hay coherencia entre lo que ofreces y la transformación prometida?', semaforo: 'verde', notas: '' },
{ id: 'marketing', label: 'Marketing', icon: '📢', pregunta: '¿Qué canal genera más pedidos reales? ¿Tu contenido atrae al cliente ideal?', semaforo: 'amarillo', notas: '' },
{ id: 'ventas', label: 'Ventas', icon: '💰', pregunta: '¿Tienes rutina de ventas o dependes de que lleguen solas? ¿Haces upsell?', semaforo: 'amarillo', notas: '' },
{ id: 'operaciones',label: 'Operaciones', icon: '⚙️', pregunta: '¿Tu operación te libera o te consume? ¿Qué necesitas delegar?', semaforo: 'rojo', notas: '' },
]);
const [tiposProducto, setTiposProducto] = React.useState([
{ tipo: 'A', nombre: 'Generador de lead', descripcion: 'Atracción gratuita (PDF, clase gratis, muestra)', ejemplo: '', color: EJ.cyan },
{ tipo: 'B', nombre: 'Generador de cliente', descripcion: 'Primera compra fácil y accesible', ejemplo: '', color: EJ.violet },
{ tipo: 'C', nombre: 'Generador de caja', descripcion: 'Inyección rápida (workshops, ediciones limitadas)', ejemplo: '', color: EJ.pink },
{ tipo: 'D', nombre: 'Generador de lucro', descripcion: 'Producto principal de mayor margen', ejemplo: '', color: EJ.navy },
]);
// Pilar 2 — Campañas checklist
const [campCheck, setCampCheck] = React.useState({
producto: false, oferta: false, urgencia: false, prueba: false, cta: false,
objetivo: false, inicio: false, imagenes: false, copy: false, canales: false,
});
// Pilar 3 — Semana
const [semanal, setSemanal] = React.useState([
{ dia: 'Lunes', foco: 'Planificación semanal (90 min) + arranque', done: true },
{ dia: 'Martes', foco: 'Contenido de atracción + comunidad', done: true },
{ dia: 'Miércoles', foco: 'Conversión directa + publicar oferta', done: true },
{ dia: 'Jueves', foco: 'Relaciones + prueba social + contacto VIP', done: false },
{ dia: 'Viernes', foco: 'Revisión de métricas + cierre fuerte', done: false },
]);
const [indicadores, setIndicadores] = React.useState([
{ id: 1, label: 'Ventas del día', frecuencia: 'Diario', valor: '$250', meta: '$300', color: EJ.cyan },
{ id: 2, label: 'Nuevos contactos', frecuencia: 'Semanal', valor: '8', meta: '10', color: EJ.violet },
{ id: 3, label: 'Tasa de cierre', frecuencia: 'Semanal', valor: '38%', meta: '30%', color: EJ.green },
{ id: 4, label: 'Ticket promedio', frecuencia: 'Mensual', valor: '$185', meta: '$200', color: EJ.cyan },
{ id: 5, label: 'Clientes reactivadas', frecuencia: 'Mensual', valor: '5', meta: '8', color: EJ.pink },
{ id: 6, label: 'Canal más efectivo', frecuencia: 'Mensual', valor: 'WhatsApp', meta: '—', color: EJ.navy },
]);
const semColors = { rojo: EJ.pink, amarillo: '#F59E0B', verde: EJ.green };
const semBg = { rojo: EJ.pinkLight, amarillo: '#FEF9EC', verde: EJ.greenLight };
const updateArea = (id, field, val) => {
setAreas(prev => prev.map(a => a.id === id ? { ...a, [field]: val } : a));
};
const pilares = [
{ id: 'pilar1', num: '1', label: 'Planificación', sublabel: 'Mensual · último viernes · 45 min', color: EJ.cyan, bg: EJ.cyanLight },
{ id: 'pilar2', num: '2', label: 'Campañas', sublabel: 'Semanal · Lunes · 60-90 min', color: EJ.violet, bg: EJ.violetLight },
{ id: 'pilar3', num: '3', label: 'Rutina Diaria', sublabel: 'Todos los días · 60-75 min máx.', color: EJ.pink, bg: EJ.pinkLight },
];
return (
{/* Header */}
La Rutina que Vende™
Sistema completo de ventas — 3 Pilares conectados
{/* Selector de pilar */}
{pilares.map(p => (
setActivePilar(p.id)}
style={{
padding: '18px 20px', borderRadius: 20, cursor: 'pointer', transition: 'all 0.2s',
background: activePilar === p.id ? p.color : EJ.white,
boxShadow: activePilar === p.id ? `0 8px 30px ${p.color}44` : '0 4px 20px rgba(26,31,110,0.08)',
border: `2px solid ${activePilar === p.id ? p.color : 'transparent'}`,
display: 'flex', alignItems: 'center', gap: 14,
}}
>
{p.num}
Pilar {p.num}: {p.label}
{p.sublabel}
))}
{/* PILAR 1 */}
{activePilar === 'pilar1' && (
{/* Plan del mes */}
setPlanMes(p => ({...p, campana: e.target.value}))} options={[
{ value: 'adquisicion', label: '🎯 Adquisición — atraer nuevas' },
{ value: 'monetizacion', label: '💰 Monetización — vender más a las actuales' },
{ value: 'activacion', label: '🔁 Activación — reactivar inactivas' },
]} />
setPlanMes(p => ({...p, productoProtagonista: e.target.value}))} placeholder="ej. Pack Bienvenida" />
setPlanMes(p => ({...p, fechaClave: e.target.value}))} placeholder="ej. Día de la Madre" />
setPlanMes(p => ({...p, metaFacturacion: e.target.value}))} type="number" />
setPlanMes(p => ({...p, metaClientes: e.target.value}))} type="number" />
setPlanMes(p => ({...p, inversion: e.target.value}))} type="number" />
{/* Tipos de producto */}
{tiposProducto.map((tp, i) => (
))}
{/* Análisis 4 áreas */}
{areas.map(area => (
{area.icon}
{area.label}
{area.pregunta}
{['verde', 'amarillo', 'rojo'].map(s => (
updateArea(area.id, 'semaforo', s)} style={{
flex: 1, padding: '6px 0', borderRadius: 50, border: `2px solid ${area.semaforo === s ? semColors[s] : 'transparent'}`,
background: area.semaforo === s ? semColors[s] : EJ.bgApp,
color: area.semaforo === s ? '#fff' : EJ.muted,
fontSize: 11, fontWeight: 700, cursor: 'pointer', fontFamily: 'Nunito, sans-serif',
transition: 'all 0.15s',
}}>
{s === 'verde' ? '🟢' : s === 'amarillo' ? '🟡' : '🔴'} {s.charAt(0).toUpperCase() + s.slice(1)}
))}
))}
{/* Revisión mensual */}
{[
'¿Cuánto gané de verdad (ganancia neta, no facturamiento)?',
'¿Cuál área tuvo el semáforo más rojo y cuál es la única acción para mejorarla?',
'¿Qué funcionó bien y cómo lo repito el mes que viene?',
'¿Ejecuté la rutina más del 80% de los días?',
'¿Qué dinero dejé sobre la mesa (seguimientos no hechos, upsells no ofrecidos)?',
'Si mi negocio siguiera igual 6 meses más, ¿estaría satisfecha?',
].map((q, i) => (
))}
)}
{/* PILAR 2 */}
{activePilar === 'pilar2' && (
{/* 3 tipos de campaña */}
{[
{
num: '1', nombre: 'Adquisición', emoji: '🎯', color: EJ.cyan, bg: EJ.cyanLight,
desc: 'Atraer clientes nuevos · quien nunca te ha comprado',
producto: 'El más fácil de probar',
oferta: 'Regalo adicional o valor añadido — NUNCA descuento puro',
canal: 'Instagram y Facebook + WhatsApp para cierre',
duracion: '5 a 10 días',
},
{
num: '2', nombre: 'Monetización', emoji: '💰', color: EJ.violet, bg: EJ.violetLight,
desc: 'Vender más a quienes ya confían · clientes actuales',
producto: 'Combos, packs, upsell y cross-sell',
oferta: 'Exclusivo para mis clientes — nunca bajar precios',
canal: 'WhatsApp directo + email',
duracion: '7 a 14 días',
},
{
num: '3', nombre: 'Activación', emoji: '🔁', color: EJ.pink, bg: EJ.pinkLight,
desc: 'Reactivar clientes inactivos · 3-6 meses sin comprar',
producto: 'Menciona su compra anterior específica',
oferta: 'Mensaje personalizado con oferta de reincorporación',
canal: 'WhatsApp personal · LinkedIn si aplica',
duracion: '3 a 7 días',
},
].map(c => (
{c.emoji}
Campaña {c.num}
{c.nombre}
{c.desc}
{[
{ label: '📦 Producto', val: c.producto },
{ label: '🎁 Oferta', val: c.oferta },
{ label: '📣 Canal', val: c.canal },
{ label: '⏱ Duración', val: c.duracion },
].map((row, i) => (
))}
))}
{/* Checklist campaña + Palancas urgencia */}
{[
{ key: 'producto', label: '📦 Producto claro (uno solo)' },
{ key: 'oferta', label: '🎁 Oferta irresistible (el "por qué ahora" es obvio)' },
{ key: 'urgencia', label: '⏰ Urgencia real (fecha o cupo definido)' },
{ key: 'prueba', label: '⭐ Prueba social (testimonio, foto, reseña)' },
{ key: 'cta', label: '📣 Una sola llamada a la acción' },
].map(item => (
setCampCheck(p => ({...p, [item.key]: !p[item.key]}))} label={item.label} />
))}
Durante la campaña
{[
{ key: 'objetivo', label: 'Historia diaria publicada' },
{ key: 'inicio', label: 'Consultas respondidas en < 2 horas' },
{ key: 'imagenes', label: 'Recordatorio enviado a mitad de campaña' },
{ key: 'copy', label: 'Ventas diarias registradas' },
{ key: 'canales', label: 'Seguimiento a quienes preguntaron y no compraron' },
].map(item => (
setCampCheck(p => ({...p, [item.key]: !p[item.key]}))} label={item.label} style={{ marginBottom: 8 }} />
))}
{[
{ n: '1', label: 'Tiempo limitado real', desc: 'Fecha de cierre concreta y cumplida', color: EJ.cyan },
{ n: '2', label: 'Cupos/unidades limitadas', desc: 'Cantidad específica y real', color: EJ.violet },
{ n: '3', label: 'Valor añadido que desaparece', desc: 'Bonus que se elimina al vencer el plazo', color: EJ.pink },
{ n: '4', label: 'Edición limitada', desc: 'Versión especial que no se repetirá', color: EJ.cyan },
{ n: '5', label: 'Preventa con beneficio', desc: 'Precio o acceso especial por comprar antes', color: EJ.violet },
{ n: '6', label: 'Acceso exclusivo VIP', desc: 'Solo para tu comunidad cercana', color: EJ.pink },
].map((p, i) => (
))}
⚠️ Regla de oro
Nunca compitas por precio. Compite por valor.
)}
{/* PILAR 3 */}
{activePilar === 'pilar3' && (
{/* Rutina semanal */}
{semanal.map((d, i) => (
setSemanal(prev => prev.map((x, j) => j === i ? {...x, done: !x.done} : x))}
style={{
padding: '18px 14px', borderRadius: 16, cursor: 'pointer',
background: d.done ? EJ.cyanLight : EJ.bgApp,
border: `1.5px solid ${d.done ? EJ.cyan : EJ.border}`,
textAlign: 'center', transition: 'all 0.2s',
}}
>
{d.done ? '✅' : '○'}
{d.dia}
{d.foco}
))}
{/* 6 indicadores */}
{indicadores.map((ind, i) => (
{ind.frecuencia}
#{i + 1}
{ind.label}
))}
{/* Regla de oro + árbol */}
⚡
Regla de oro
"1 acción de venta por día, todos los días."
)}
);
};
Object.assign(window, { RutinaScreen });