// Ejecutora — Campañas y Contenido const CampanasScreen = () => { const [tab, setTab] = React.useState('activas'); const [showModal, setShowModal] = React.useState(false); const [campanas, setCampanas] = React.useState([ { id: 1, nombre: 'Pack Bienvenida — Mayo', tipo: 'adquisicion', producto: 'Pack Bienvenida $37', inicio: '28 abr', fin: '7 may', diasRestantes: 6, estado: 'activa', ventas: 4, meta: 10, notas: 'Story diaria + WA a leads fríos', checks: { historia: true, consultas: true, registro: false, recordatorio: false, seguimiento: false } }, { id: 2, nombre: 'Upsell Clientes Actuales', tipo: 'monetizacion', producto: 'Programa Completo $197', inicio: '10 may', fin: '20 may', diasRestantes: 19, estado: 'planificada', ventas: 0, meta: 5, notas: 'Solo para clientas que compraron Esencial', checks: { historia: false, consultas: false, registro: false, recordatorio: false, seguimiento: false } }, { id: 3, nombre: 'Reactivación Inactivas', tipo: 'activacion', producto: 'Pack Reincorporación $57', inicio: '1 abr', fin: '10 abr', diasRestantes: 0, estado: 'finalizada', ventas: 3, meta: 5, notas: 'Mencioné su compra anterior específica', checks: { historia: true, consultas: true, registro: true, recordatorio: true, seguimiento: true } }, ]); const [nueva, setNueva] = React.useState({ nombre: '', tipo: 'adquisicion', producto: '', inicio: '', fin: '', meta: '', notas: '' }); // Calendario de contenido (semana) const [contenido, setContenido] = React.useState([ { dia: 'Lun', objetivo: 'atraer', formato: 'Carrusel', tema: 'Las 3 señales de que no tienes sistema de ventas', listo: true }, { dia: 'Mar', objetivo: 'atraer', formato: 'Reel', tema: 'Mi rutina de ventas de 60 minutos', listo: true }, { dia: 'Mié', objetivo: 'convertir', formato: 'Story', tema: 'Oferta pack bienvenida + CTA directo', listo: false }, { dia: 'Jue', objetivo: 'fidelizar', formato: 'Post', tema: 'Testimonio de clienta + resultado específico', listo: false }, { dia: 'Vie', objetivo: 'convertir', formato: 'WA Broadcast', tema: 'Último día del pack — urgencia real', listo: false }, ]); const tipos = { adquisicion: { label: 'Adquisición', color: EJ.cyan, bg: EJ.cyanLight, emoji: '🎯' }, monetizacion: { label: 'Monetización', color: EJ.violet, bg: EJ.violetLight, emoji: '💰' }, activacion: { label: 'Activación', color: EJ.pink, bg: EJ.pinkLight, emoji: '🔁' }, }; const estadoColors = { activa: EJ.green, planificada: EJ.cyan, finalizada: EJ.muted }; const estadoBg = { activa: EJ.greenLight, planificada: EJ.cyanLight, finalizada: EJ.bgApp }; const objColors = { atraer: EJ.cyan, convertir: EJ.pink, fidelizar: EJ.violet }; const objBg = { atraer: EJ.cyanLight, convertir: EJ.pinkLight, fidelizar: EJ.violetLight }; const guardarCampana = () => { if (!nueva.nombre) return; setCampanas(prev => [...prev, { ...nueva, id: Date.now(), diasRestantes: 0, estado: 'planificada', ventas: 0, meta: Number(nueva.meta) || 5, checks: { historia: false, consultas: false, registro: false, recordatorio: false, seguimiento: false } }]); setNueva({ nombre: '', tipo: 'adquisicion', producto: '', inicio: '', fin: '', meta: '', notas: '' }); setShowModal(false); }; const toggleCheck = (campId, checkKey) => { setCampanas(prev => prev.map(c => c.id === campId ? { ...c, checks: { ...c.checks, [checkKey]: !c.checks[checkKey] } } : c)); }; const campanasFiltradas = campanas.filter(c => tab === 'todas' || c.estado === tab || (tab === 'activas' && c.estado === 'activa')); // Modelos de contenido rápidos (selección de los 46) const modelos = [ { n: '01', nombre: 'Técnico e Informativo', eng: 'Guardados', desc: 'Enseña algo de calidad, muestra expertise', color: EJ.cyan }, { n: '03', nombre: 'Moneda Social', eng: 'Marcaciones', desc: 'Identificación: "estamos en el mismo barco"', color: EJ.violet }, { n: '05', nombre: 'Empatía y Abrazo', eng: 'Comentarios', desc: 'Haz que la audiencia se sienta "abrazada"', color: EJ.pink }, { n: '08', nombre: 'Dualidades', eng: 'Compartidos', desc: '"Lo que creen vs. Lo que realmente es"', color: EJ.cyan }, { n: '15', nombre: 'Testimonios', eng: 'Marcaciones', desc: 'Prueba social: situación → solución → resultado', color: EJ.green }, { n: '22', nombre: 'Jalón de Orejas', eng: 'Reflexión', desc: 'Motiva a través de reflexión directa', color: EJ.violet }, { n: '29', nombre: 'Storytelling FMAE', eng: 'Conexión', desc: 'Fracaso → Miedo → Amor → Éxito', color: EJ.pink }, { n: '45', nombre: 'Contenido Aspiracional', eng: 'Atracción', desc: 'Muestra el resultado prometido', color: EJ.cyan }, ]; return (
{/* Header */}

Campañas y Contenido

Pilar 2 — Define el CÓMO de la venta · Rota los 3 tipos mensualmente

setShowModal(true)}>+ Nueva campaña
{/* Stats */}
c.estado === 'activa').length} color={EJ.green} icon="📣" /> s + c.ventas, 0)} color={EJ.cyan} icon="💰" />
{/* Tabs campañas */}
{/* Tarjetas de campaña */}
{campanasFiltradas.map(c => { const tipo = tipos[c.tipo]; const pct = Math.round((c.ventas / c.meta) * 100); return (
{tipo.emoji} {tipo.label} {c.estado.charAt(0).toUpperCase() + c.estado.slice(1)}
{c.nombre}
📦 {c.producto}
{c.estado === 'activa' && (
{c.diasRestantes}d
restantes
)}
📅 {c.inicio} → {c.fin}
{/* Progreso ventas */}
Ventas {c.ventas}/{c.meta}
{/* Checklist diario */} {c.estado === 'activa' && (
Checklist diario
{[ { key: 'historia', label: 'Historia publicada' }, { key: 'consultas', label: 'Consultas < 2h' }, { key: 'registro', label: 'Ventas registradas' }, { key: 'recordatorio', label: 'Recordatorio enviado' }, { key: 'seguimiento', label: 'Seguimiento hecho' }, ].map(item => ( toggleCheck(c.id, item.key)} label={item.label} /> ))}
)} {c.notas && (
💬 {c.notas}
)}
); })}
{/* Planificador de contenido semanal */}
{contenido.map((d, i) => (
{d.dia}
setContenido(prev => prev.map((x, j) => j === i ? {...x, listo: !x.listo} : x))} style={{ cursor: 'pointer', fontSize: 16 }} >{d.listo ? '✅' : '○'}
{d.objetivo}
📱 {d.formato}
{d.tema}
))}
{[ { obj: 'atraer', desc: 'Nuevas personas descubren tu negocio' }, { obj: 'convertir', desc: 'Las personas compran o se acercan a comprar' }, { obj: 'fidelizar', desc: 'Clientes existentes se quedan y comparten' }, ].map(o => (
{o.obj.charAt(0).toUpperCase() + o.obj.slice(1)}: {o.desc}
))}
{/* Modelos de contenido */}
{modelos.map((m, i) => (
Modelo {m.n}
{m.nombre}
{m.desc}
↑ {m.eng}
))}
{/* Modal nueva campaña */} setShowModal(false)} title="Nueva campaña" width={500}>
setNueva(p => ({...p, nombre: e.target.value}))} placeholder="Pack Bienvenida — Mayo" /> setNueva(p => ({...p, producto: e.target.value}))} placeholder="Solo uno — ej. Pack Bienvenida $37" />
setNueva(p => ({...p, inicio: e.target.value}))} /> setNueva(p => ({...p, fin: e.target.value}))} /> setNueva(p => ({...p, meta: e.target.value}))} placeholder="10" />