Files
4ventures-client-portal/scripts/complete_brandbooks.py
4Ventures 4a1abd3318 feat: LinkedIn editorial, accesos agencia estables y deshacer en historial
Integra estrategias LinkedIn en calendarios (backlog publicado vs pendiente), unifica roles/cookies de vista agencia y permite deshacer cambios de brandbook dejando constancia en el historial.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 04:15:51 +02:00

1712 lines
80 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Completa brandbooks de tenants activos con datos reales de marca
(webs, IG, FB, LinkedIn, oferta, voz, ads, blog, compliance).
Corrige handles numéricos / webs erróneas. Preserva kit visual (colores/fuentes/assets).
"""
from __future__ import annotations
import json
import re
import urllib.request
from pathlib import Path
from typing import Any
ROOT = Path(__file__).resolve().parents[1]
def env(k: str) -> str:
for line in (ROOT / ".env.local").read_text().splitlines():
if line.startswith(k + "="):
return line.split("=", 1)[1].strip().strip('"').strip("'")
return ""
URL = env("NEXT_PUBLIC_SUPABASE_URL")
KEY = env("SUPABASE_SERVICE_ROLE_KEY")
HR = {"apikey": KEY, "Authorization": f"Bearer {KEY}"}
HW = {**HR, "Content-Type": "application/json", "Prefer": "return=minimal"}
def get(path: str) -> Any:
req = urllib.request.Request(f"{URL}/rest/v1/{path}", headers=HR)
return json.loads(urllib.request.urlopen(req).read())
def patch(path: str, body: dict) -> None:
req = urllib.request.Request(
f"{URL}/rest/v1/{path}",
data=json.dumps(body).encode(),
headers=HW,
method="PATCH",
)
urllib.request.urlopen(req)
def handles(
ig: str = "",
fb: str = "",
li: str = "",
blog: str = "",
yt: str = "",
tiktok: str = "",
) -> dict:
return {
"instagram": ig,
"facebook": fb,
"linkedin": li,
"tiktok": tiktok,
"blog": blog,
"youtube": yt,
}
def channels(
ig: str = "",
fb: str = "",
li: str = "",
blog: str = "",
yt: str = "",
email: str = "",
tiktok: str = "",
other: str = "",
) -> dict:
return {
"instagram": ig,
"facebook": fb,
"linkedin": li,
"tiktok": tiktok,
"blog": blog,
"youtube": yt,
"email": email,
"other": other,
}
# ---------------------------------------------------------------------------
# PACKS — brand manager packs (datos verificados en webs / Meta / LinkedIn)
# ---------------------------------------------------------------------------
PACKS: dict[str, dict[str, Any]] = {
"4ventures-hub": {
"brand_name": "4Ventures",
"website": "https://4ventures.es/",
"vertical": "Agencia boutique de marketing y ventas",
"tagline": "Aceleramos tu crecimiento con estrategia de marketing y ventas",
"elevator_pitch": "Agencia boutique que une marketing, ventas y operación para marcas que quieren crecer con sistema (España, EE.UU. y LatAm).",
"brand_promise": "Estrategia accionable, creatividades y performance bajo un mismo techo.",
"positioning": "Boutique de crecimiento: menos ruido, más sistema comercial y de marca.",
"archetype": "El Sabio + El Gobernante (claridad + ejecución)",
"mission": "Ayudar a empresas a vender más y mejor con marca, demanda y procesos medibles.",
"vision": "Ser el centro de mando de marketing y ventas de marcas ambiciosas.",
"values": ["Claridad", "Ejecución", "Transparencia", "Orientación a resultado"],
"tone": "Directo, experto, cercano a founders y directores de marketing; sin jerga vacía.",
"personality": ["estratégico", "operativo", "claro", "ambicioso"],
"voice_do": [
"Hablar de métricas y sistemas",
"Mostrar casos y bastidores de ejecución",
"Proponer el siguiente paso concreto",
],
"voice_dont": [
"Promesas mágicas de viralidad",
"Jerga de agencia sin sustancia",
"Hablar como consultora genérica",
],
"messaging_pillars": [
"Marketing + ventas alineados",
"Creatividades con sistema",
"Datos y centro de mando",
"Equipo boutique",
],
"example_good": [
"No necesitás más anuncios: necesitás un sistema que convierta tráfico en pipeline.",
],
"example_bad": ["Somos la mejor agencia del mercado 🚀🚀🚀"],
"icp": "PYMES y scale-ups B2B/B2C con ticket medio-alto que ya invierten en ads o RRSS y necesitan orden, marca y ROI.",
"geo": "España (HQ) · operaciones con clientes en EE.UU. y LatAm",
"languages": ["es", "en"],
"value_proposition": "Estrategia, creatividades, paid media y CRM/ventas integrados en un centro de mando.",
"products_services": [
"Estrategia de marca y go-to-market",
"Creatividades Ads + RRSS",
"Meta Ads / Google Ads",
"RRSS y calendarios editoriales",
"SEO / web / inbound",
"CRM y procesos comerciales",
],
"differentiators": [
"Boutique con ownership real",
"Marketing y ventas en el mismo tablero",
"Producción creativa propia + performance",
],
"proof_points": [
"Portfolio multi-sector (formación, legal, beauty, B2B industrial)",
"Operación con Meta, Google y creatividades en Drive por cliente",
],
"pillars_rrss": ["ops", "casos", "tips", "equipo", "thought-leadership"],
"series_recurrentes": ["Bastidores de campaña", "Errores que matan el ROAS", "Sistema comercial"],
"formats_priority": ["carrusel", "reel", "post", "stories"],
"channel_handles": handles(
ig="https://www.instagram.com/4lincesventures/",
fb="https://www.facebook.com/4ventures",
li="https://www.linkedin.com/company/4ventures-es/",
blog="https://4ventures.es/",
),
"channels": channels(
ig="Marca, bastidores y prueba social",
fb="Comunidad y alcance local",
li="Autoridad B2B y captación de clientes agencia",
blog="SEO y artículos de método",
email="Nurturing y propuestas",
),
"ads_usps": [
"Marketing + ventas en un sistema",
"Creatividades con ADN de marca",
"Reporting accionable",
],
"ads_ctas": ["Agendar diagnóstico", "Hablar con el equipo", "Ver método"],
"ads_objections": ["Ya tengo agencia", "Es caro", "No tengo tiempo de onboarding"],
"ads_angles": ["Orden vs caos", "ROAS con marca", "Equipo senior sin overhead"],
"ads_funnel": ["TOFU awareness", "MOFU método", "BOFU diagnóstico"],
"linkedin_themes": [
"Go-to-market",
"Paid media con marca",
"Procesos comerciales",
"Leadership de growth",
],
"linkedin_formats": ["carrusel método", "caso corto", "opinión founder"],
"linkedin_cta": ["Diagnóstico", "Mensaje directo", "Newsletter"],
"blog_themes": ["Performance", "Marca", "Ventas", "Stack de marketing"],
"blog_seo_keywords": [
"agencia marketing españa",
"meta ads agencia",
"estrategia go to market",
],
"blog_cta": ["Agendar llamada", "Descargar checklist"],
"claims_forbidden": ["Garantía de ROAS fijo", "Resultados en X días sin contexto"],
"required_disclaimers": ["Resultados dependen de sector, oferta y presupuesto"],
"emoji_policy": "Pocos, funcionales; evitar spam de cohetes.",
"b2b_offering": "Retainer de marketing integral + proyectos de creatividades y paid media.",
"b2c_offering": "",
"usp_differentiators": "Centro de mando: marca, creatividades, ads y ventas en un mismo hilo.",
"current_priorities": "Captación de clientes con ticket medio-alto y casos publicables.",
"jobs_to_be_done": [
"Ordenar marketing disperso",
"Subir calidad creativa",
"Conectar ads con ventas",
],
"buying_triggers": [
"Cambio de agencia",
"Caída de ROAS",
"Lanzamiento de producto",
],
"barriers": ["Miedo a cambiar de proveedor", "Presupuesto fragmentado"],
"customer_frustrations": "Agencias que entregan posts sin estrategia ni ownership de pipeline.",
"desired_transformation": "Pasar de ruido táctico a un sistema de crecimiento medible.",
"freeform_notes": "Operador por defecto marketing@4ventures.es. Hub interno + marca pública 4Ventures / @4lincesventures.",
},
"agua-miia": {
"brand_name": "Agua Miia",
"website": "https://aguamiia.es/",
"vertical": "Agua filtrada por ósmosis inversa (hogar, empresa, hostelería)",
"tagline": "Agua filtrada por ósmosis inversa para hogar, empresa y hostelería",
"elevator_pitch": "Agua Miia lleva agua de alta pureza por ósmosis inversa a hogares, oficinas y hostelería, con instalación y servicio pensados para dejar de comprar garrafas.",
"brand_promise": "Agua más pura, más cómoda y con menos plástico de un solo uso.",
"positioning": "Ósmosis inversa por suscripción / servicio: pureza + comodidad vs garrafa y filtro básico.",
"archetype": "El Cuidador + El Explorador (salud + modernidad)",
"mission": "Facilitar acceso a agua de calidad en el punto de consumo.",
"vision": "Ser la referencia de agua filtrada inteligente en España.",
"values": ["Pureza", "Comodidad", "Sostenibilidad", "Cercanía"],
"tone": "Cercano, fresco, confiable; pedagogía suave sobre calidad del agua.",
"personality": ["limpio", "moderno", "cercano", "práctico"],
"voice_do": [
"Hablar de beneficios cotidianos (sabor, cocina, café, piel)",
"Mostrar hogar/oficina reales",
"Explicar ósmosis sin tecnicismos extremos",
],
"voice_dont": [
"Miedo sanitario exagerado",
"Claims médicos no demostrados",
"Atacar marcas de agua embotellada con insultos",
],
"messaging_pillars": [
"Pureza 99%",
"Adiós a las garrafas",
"Hogar / empresa / hostelería",
"Sabor y hábitos saludables",
],
"example_good": [
"El café sabe distinto cuando el agua está bien filtrada. Ósmosis en casa, sin logistics de garrafas.",
],
"example_bad": ["Cura enfermedades con nuestra agua"],
"icp": "Hogares urbanos conscientes + oficinas y HORECA que quieren agua de calidad sin logística de botellas.",
"geo": "España",
"languages": ["es"],
"value_proposition": "Ósmosis inversa con servicio: agua premium en el grifo, menos plástico, mejor sabor.",
"products_services": [
"Equipos de ósmosis inversa",
"Instalación y mantenimiento",
"Soluciones hogar",
"Soluciones empresa",
"Soluciones hostelería",
],
"differentiators": [
"Enfoque suscripción/servicio",
"Cobertura hogar + B2B",
"Narrativa anti-garrafa",
],
"proof_points": ["+99% purificación comunicada en RRSS", "Presencia IG activa @aguamiia"],
"pillars_rrss": ["producto", "hábitos", "antes-después", "B2B hostelería", "sostenibilidad"],
"series_recurrentes": ["El agua del café", "Adiós garrafas", "Miia en empresas"],
"formats_priority": ["reel", "stories", "carrusel", "post"],
"channel_handles": handles(
ig="https://www.instagram.com/aguamiia/",
fb="https://www.facebook.com/AguaMiia",
blog="https://aguamiia.es/",
),
"channels": channels(
ig="Demanda y prueba de producto",
fb="Alcance local y remarketing",
blog="SEO y educación sobre ósmosis",
email="Leads y nurturing instalación",
),
"ads_usps": [
"Ósmosis inversa",
"Sin garrafas",
"Hogar y negocio",
],
"ads_ctas": ["Pedir información", "Calcular ahorro", "WhatsApp"],
"ads_objections": ["Ya tengo filtro de jarra", "Es caro", "No quiero obras"],
"ads_angles": ["Sabor", "Ahorro vs embotellada", "Oficina sin plástico"],
"linkedin_themes": ["Bienestar en la oficina", "HORECA y calidad del agua", "ESG plástico"],
"linkedin_formats": ["caso B2B", "carrusel beneficio"],
"linkedin_cta": ["Solicitar demo empresa"],
"blog_themes": ["Calidad del agua", "Ósmosis vs otros filtros", "Hostelería"],
"blog_seo_keywords": [
"ósmosis inversa hogar",
"agua filtrada suscripción",
"filtro agua oficina",
],
"claims_forbidden": [
"Cura o previene enfermedades",
"Afirmaciones médicas sin respaldo",
],
"required_disclaimers": [
"Beneficios referidos a calidad organoléptica y reducción de residuos, no a pretensiones terapéuticas",
],
"b2b_offering": "Equipos y servicio para oficinas, clínicas y hostelería.",
"b2c_offering": "Ósmosis para el hogar con instalación.",
"usp_differentiators": "Pureza + servicio + menos plástico de un solo uso.",
"current_priorities": "Captación hogar y cuentas HORECA/empresa.",
"jobs_to_be_done": ["Mejorar sabor", "Eliminar cartera de garrafas", "Imagen sostenible"],
"buying_triggers": ["Mudanza", "Nacimiento/familia", "Apertura local"],
"customer_frustrations": "Garrafas pesadas, plástico y agua con mal sabor.",
"desired_transformation": "Agua buena siempre disponible en el grifo.",
"freeform_notes": "Web canónica https://aguamiia.es/ (también responde aguamiia.com). IG @aguamiia.",
},
"bps": {
"brand_name": "Blue Parrot School",
"website": "https://blueparrotschool.com/",
"vertical": "Escuela de idiomas (inglés) · B2C + B2B FUNDAE",
"tagline": "Inglés real, cultura pop y certificaciones",
"elevator_pitch": "Escuela de inglés práctica (Madrid/Málaga + online) con metodología usable, series educativas y preparación oficial Cambridge/Aptis/IELTS; en B2B, Entidad Organizadora FUNDAE.",
"brand_promise": "Salir hablando con confianza, no solo aprobando teoría.",
"positioning": "Inglés útil + pop culture + certificación seria (vs apps de 15 min).",
"archetype": "El Sabio + El Bufón",
"mission": "Ayudar a alumnos a hablar inglés con confianza para trabajo, viajes y exámenes.",
"vision": "Referencia de inglés práctico y certificaciones en España.",
"values": ["Cercanía", "Rigor", "Diversión útil", "Progreso medible"],
"tone": "Cercano, divertido y riguroso; pop sin frivolidad.",
"personality": ["cercano", "divertido", "riguroso", "pop"],
"voice_do": [
"Ejemplos reales y micro-lecciones",
"Series FALSE FRIEND / SLANG / MTW",
"Dato concreto > adjetivo vacío",
],
"voice_dont": [
"Black Friday genérico",
"Tono académico seco",
"Anglicismos de postureo (boost, unlock)",
],
"messaging_pillars": [
"Errores que delatan",
"Inglés de la calle / pop",
"Certificaciones con método",
"Profesor fijo + 60 min",
],
"icp": "Adultos 25-45 que necesitan inglés real o certificado; empresas que quieren FUNDAE sin papeleo.",
"geo": "Madrid · Málaga · Online (España)",
"languages": ["es", "en"],
"value_proposition": "Inglés usable desde la primera semana, con camino claro a certificado y B2B FUNDAE llave en mano.",
"products_services": [
"Cursos generales e intensivos",
"Trinity / IELTS / Cambridge / Aptis",
"Inglés oposiciones",
"1to1 y online",
"In-company + FUNDAE (Entidad Organizadora)",
],
"channel_handles": handles(
ig="https://www.instagram.com/blueparrotschool/",
fb="https://www.facebook.com/blueparrotschool",
li="https://www.linkedin.com/company/blue-parrot-school/",
blog="https://blueparrotschool.com/",
),
"channels": channels(
ig="Adquisición B2C y comunidad educativa",
fb="Alcance y remarketing cursos",
li="Captación B2B RRHH / FUNDAE",
blog="SEO exámenes y método",
email="Leads y matrículas",
),
"ads_usps": [
"Profesor fijo",
"Sesiones 60 min",
"FUNDAE Entidad Organizadora",
"Madrid / Málaga / Online",
],
"ads_ctas": ["Test de nivel", "Reservar plaza", "Solicitar presupuesto B2B", "WhatsApp"],
"linkedin_themes": [
"FUNDAE sin fricción",
"Inglés por vertical (Legal, IT, Financiero)",
"ROI formación idiomas",
],
"blog_themes": ["False friends", "Preparación exámenes", "Inglés profesional"],
"blog_seo_keywords": [
"academia inglés madrid",
"preparación cambridge",
"cursos inglés fundae",
],
"claims_forbidden": ["Garantía de aprobado", "Nivel C1 en X semanas sin matices"],
"b2b_offering": "Programas in-company / online con gestión FUNDAE integral.",
"b2c_offering": "Cursos adultos, intensivos, 1to1 y preparación de exámenes oficiales.",
"usp_differentiators": "Profesor fijo + 60 min + especialización sectorial + FUNDAE propia.",
"current_priorities": "Matrículas B2C certificados + captación empresas FUNDAE.",
"pillars_rrss": [
"false-friend",
"slang",
"certificaciones",
"método",
"comunidad",
],
"freeform_notes": "Linktree: https://linktr.ee/blueparrotschool. Preservar DNA B2B FUNDAE ya en brandbook.",
},
"brava-dermoestetica": {
"brand_name": "BRAVA Dermoestética",
"website": "https://www.bravadermoestetica.com/",
"vertical": "Clínica de dermoestética / enfermería estética (Madrid)",
"tagline": "Realza tu belleza natural",
"elevator_pitch": "Clínica de dermoestética avanzada en Barrio de Salamanca (Madrid) liderada por enfermeras especializadas: diagnóstico facial personalizado y tratamientos con resultado natural.",
"brand_promise": "Belleza que se nota en vitalidad, no en artificialidad.",
"positioning": "Enfermería dermoestética premium y cercana vs clínicas de volumen o estética agresiva.",
"archetype": "El Cuidador + El Amante (cuidado + belleza)",
"mission": "Devolver confianza con tratamientos seguros, personalizados y naturales.",
"vision": "Referencia de dermoestética natural en Madrid Salamanca.",
"values": ["Naturalidad", "Seguridad", "Personalización", "Cercanía clínica"],
"tone": "Cálido, experto, femenino-elegante; sin miedo ni promesas milagro.",
"personality": ["elegante", "cercana", "clínica", "natural"],
"voice_do": [
"Educar sobre piel y tratamientos",
"Mostrar bastidores con profesionalidad",
"Insistir en valoración personalizada",
],
"voice_dont": [
"Antes/después engañosos",
"Garantizar resultados idénticos",
"Lenguaje quirúrgico agresivo",
],
"messaging_pillars": [
"Diagnóstico facial",
"Resultado natural",
"Enfermería especializada",
"Tratamientos avanzados",
],
"icp": "Mujeres (y hombres) 25-55 en Madrid que buscan dermoestética segura y natural en Salamanca.",
"geo": "Calle de Castelló 41, Barrio de Salamanca, Madrid 28001",
"languages": ["es"],
"value_proposition": "Valoración personalizada + tratamientos de estética avanzada con enfoque enfermero y resultado natural.",
"products_services": [
"Limpieza facial profunda",
"Peeling",
"Dermapen",
"Mesoterapia facial / capilar",
"PRP capilar",
"Polinucleótidos / biorevitalización",
"Bioestimuladores",
"Pack Piel Renovada",
"Valoración / test de piel",
],
"differentiators": [
"Equipo de enfermería dermoestética",
"Enfoque natural",
"Ubicación Salamanca",
],
"proof_points": [
"Clínica en Castelló 41",
"Comunidad IG @bravadermoestetica",
"Presencia Doctoralia",
],
"pillars_rrss": [
"educación-piel",
"tratamientos",
"bastidores-clínica",
"resultados-naturales",
"comunidad",
],
"series_recurrentes": ["Qué necesita tu piel", "Mitos dermoestética", "Día en BRAVA"],
"formats_priority": ["reel", "stories", "carrusel", "post"],
"channel_handles": handles(
ig="https://www.instagram.com/bravadermoestetica/",
fb="https://www.facebook.com/BRAVADermoestetica",
blog="https://www.bravadermoestetica.com/",
),
"channels": channels(
ig="Canal principal de captación y confianza",
fb="Remarketing local Madrid",
blog="Web + test de piel / captación leads",
other="Beacons/link-in-bio: https://beacons.ai/bravadermoestetica",
),
"ads_usps": [
"Resultado natural",
"Valoración personalizada",
"Salamanca, Madrid",
"Enfermería especializada",
],
"ads_ctas": ["Pedir cita", "Test de piel gratis", "WhatsApp", "Reservar valoración"],
"ads_objections": ["Miedo a quedar artificial", "Dolor", "Precio", "Primera vez"],
"ads_angles": ["Naturalidad", "Primera valoración", "Pack piel renovada"],
"linkedin_themes": [],
"blog_themes": ["Cuidado facial", "Tratamientos", "Mitos estética"],
"blog_seo_keywords": [
"dermoestética madrid",
"clínica estética salamanca madrid",
"mesoterapia facial madrid",
],
"claims_forbidden": [
"Resultados permanentes garantizados",
"Sin riesgos",
"Equivalencia a cirugía",
],
"required_disclaimers": [
"Resultados individuales variables",
"Información no sustituye valoración sanitaria",
],
"sector_rules": "Publicidad sanitaria responsable; sin promesas milagro; consentimientos de imagen.",
"b2c_offering": "Tratamientos faciales y capilares de dermoestética avanzada.",
"usp_differentiators": "Belleza natural con criterio clínico de enfermería.",
"current_priorities": "Citas valoración + packs faciales en Madrid.",
"jobs_to_be_done": ["Mejorar textura/luminosidad", "Rejuvenecer sin artificialidad"],
"buying_triggers": ["Evento", "Cambio de estación", "Primera consulta gratis/test"],
"customer_frustrations": "Clínicas que empujan tratamientos sin escuchar la piel.",
"desired_transformation": "Piel cuidada y confianza sin verse 'hech@'.",
"freeform_notes": "Web oficial https://www.bravadermoestetica.com/ (NO usar solo beacons como web). Tel +34 628 625 958.",
},
}
def pack_legal_delgado() -> dict:
return {
"brand_name": "Delgado Abogados",
"website": "https://abogadosdelgado.es/",
"vertical": "Despacho de abogados multidisciplinar · derecho bancario",
"tagline": "Despacho multidisciplinar con especial fortaleza en derecho bancario",
"elevator_pitch": "Delgado Abogados es un despacho multidisciplinar con fuerte expertise en derecho bancario y atención cercana a particulares y empresas.",
"brand_promise": "Asesoramiento legal claro, cercano y orientado a proteger tus derechos.",
"positioning": "Abogacía seria y cercana, con foco bancario, frente a despachos fríos o genéricos.",
"archetype": "El Cuidador + El Gobernante",
"mission": "Defender los intereses de clientes con rigor y cercanía.",
"vision": "Ser el despacho de referencia en banca y servicios legales integrales para sus clientes.",
"values": ["Rigor", "Cercanía", "Transparencia", "Compromiso"],
"tone": "Serio, cercano, autoridad legal sin frialdad ni fear-mongering.",
"personality": ["profesional", "cercano", "claro", "protector"],
"voice_do": [
"Explicar en lenguaje entendible",
"Educar sobre derechos bancarios",
"Transmitir calma y control",
],
"voice_dont": [
"Garantizar resultados judiciales",
"Sensacionalismo",
"Atacar a bancos con insultos",
],
"messaging_pillars": [
"Derecho bancario",
"Casos y educación legal",
"Cercanía",
"Multidisciplinar",
],
"icp": "Particulares y pymes afectados por productos bancarios o que necesitan asesoría legal integral.",
"geo": "España (despacho Delgado Abogados — web abogadosdelgado.es)",
"languages": ["es"],
"value_proposition": "Experiencia en derecho bancario + trato humano + capacidad multidisciplinar.",
"products_services": [
"Derecho bancario",
"Asesoramiento a particulares",
"Asesoramiento a empresas",
"Litigación y gestiones asociadas",
],
"channel_handles": handles(
ig="https://www.instagram.com/delgadoabogados/",
fb="https://www.facebook.com/delgadoabogados",
li="https://www.linkedin.com/company/abogados-delgado/",
blog="https://abogadosdelgado.es/",
),
"channels": channels(
ig="Educación legal y confianza",
fb="Alcance y remarketing local",
li="Autoridad profesional y B2B suave",
blog="SEO jurídico / contenidos",
),
"ads_usps": ["Expertos en derecho bancario", "Trato cercano", "Despacho multidisciplinar"],
"ads_ctas": ["Consulta", "Llamar", "WhatsApp", "Pedir información"],
"ads_objections": ["Es caro", "No sé si tengo caso", "Miedo a juzgados"],
"linkedin_themes": ["Derecho bancario", "Actualidad jurídica", "Consejos legales"],
"blog_themes": ["Cláusulas abusivas", "Reclamaciones bancarias", "Guías prácticas"],
"blog_seo_keywords": [
"abogados derecho bancario",
"reclamación banco",
"despacho abogados",
],
"claims_forbidden": [
"Garantía de ganar el caso",
"Porcentajes de éxito inventados",
],
"required_disclaimers": [
"Cada caso requiere estudio individualizado",
"La información no constituye asesoramiento legal formal",
],
"sector_rules": "Publicidad de servicios jurídicos: veracidad, no garantismo de resultado.",
"pillars_rrss": ["educativo-legal", "bancario", "casos", "confianza"],
"b2c_offering": "Defensa y asesoramiento a particulares (foco bancario).",
"b2b_offering": "Asesoramiento legal a empresas según áreas del despacho.",
"usp_differentiators": "Especialización bancaria + cercanía.",
"current_priorities": "Leads de consultas bancarias y branding de confianza.",
"jobs_to_be_done": ["Entender si tengo caso", "Reclamar al banco", "Sentirme acompañado"],
"buying_triggers": ["Carta del banco", "Hipoteca/cláusula", "Conflicto legal"],
"customer_frustrations": "Lenguaje jurídico opaco y despachos inaccesibles.",
"desired_transformation": "Claridad y defensa efectiva de mis derechos.",
"freeform_notes": "Web canónica https://abogadosdelgado.es/. LinkedIn company/abogados-delgado (no confundir con otros 'Delgado Abogados').",
}
PACKS["delgado-abogados"] = pack_legal_delgado()
PACKS["dtatf"] = {
"brand_name": "De Tú a Tú Formación",
"website": "https://detuatuformacion.es/",
"vertical": "Formación profesional, soft skills, IA y empleabilidad (FUNDAE / abierta)",
"tagline": "Formación para la nueva era profesional",
"elevator_pitch": "detuatuformación diseña experiencias de aprendizaje innovadoras para profesionales y empresas: IA, liderazgo, inclusión, soft skills y empleabilidad, con acreditaciones FUNDAE y certificados de profesionalidad.",
"brand_promise": "Aprender de forma cercana, práctica y transformadora.",
"positioning": "Formación innovadora y humana (de tú a tú) frente a academias frías o genéricas.",
"archetype": "El Cuidador + El Sabio",
"mission": "Impulsar el crecimiento de personas y organizaciones con aprendizaje personalizado.",
"vision": "Ser el aliado de referencia en formación que transforma vidas y equipos.",
"values": ["Cercanía", "Innovación", "Impacto", "Inclusión"],
"origin_story": "Nace en 2015 de la visión de Meti Manuel y Marta Martín; crece con formación en abierto y proyectos in-company.",
"tone": "Cercano, práctico, motivador; transformación laboral sin postureo.",
"personality": ["cercano", "innovador", "humano", "profesional"],
"voice_do": [
"Hablar de transformación real en el puesto de trabajo",
"Mostrar cursos y convocatorias con claridad",
"Tono de tú a tú",
],
"voice_dont": [
"Confundir marca con ECP / cuidadores",
"Promesas de empleo garantizado",
"Jerga vacía de 'revolucionar tu vida' sin oferta",
],
"messaging_pillars": [
"Cursos (IA, liderazgo, soft skills)",
"Empleabilidad",
"Testimonios",
"Convocatorias",
"Tips formación",
],
"icp": "Profesionales que quieren upskilling y empresas que buscan formación in-company / FUNDAE.",
"geo": "Madrid (Calle Araucaria 22) · online · España",
"languages": ["es"],
"value_proposition": "Formación práctica e innovadora, cercana, con foco en IA, liderazgo e inclusión, para personas y empresas.",
"products_services": [
"Cursos en abierto",
"Formación empresas / in-company",
"IA para profesionales y docentes",
"Liderazgo y soft skills",
"Inclusión LGTBIQ+ / protocolos RD",
"FUNDAE (entidad formadora/organizadora)",
"Certificados de profesionalidad (acreditación)",
],
"differentiators": [
"Metodología experiencial",
"De tú a tú",
"Catálogo IA + skills humanas",
"Marca hermana separada de ECP",
],
"proof_points": [
"Entidad FUNDAE",
"Centro acreditado certificados profesionalidad (CAM/SEPE según oferta)",
"Sede Madrid Tetuán",
],
"pillars_rrss": ["cursos", "empleabilidad", "testimonios", "convocatorias", "tips-formacion"],
"series_recurrentes": ["Curso de la semana", "Tips empleabilidad", "IA en el trabajo"],
"channel_handles": handles(
ig="https://www.instagram.com/detuatuformacion/",
fb="https://www.facebook.com/detuatuformacion",
li="https://www.linkedin.com/company/detuatuformacion/",
blog="https://detuatuformacion.es/blog/",
),
"channels": channels(
ig="Comunidad alumnos y lanzamientos",
fb="Convocatorias y familias/profesionales",
li="B2B empresas y thought leadership formación",
blog="SEO y contenidos de upskilling",
email="Leads y convocatorias",
),
"ads_usps": [
"Formación práctica",
"IA y skills del futuro",
"FUNDAE / bonificable (cuando aplique)",
"Cercanía de tú a tú",
],
"ads_ctas": ["Más información", "Reservar plaza", "Hablar con un asesor", "Ver cursos"],
"ads_objections": ["No tengo tiempo", "Ya hice un curso similar", "Precio"],
"ads_angles": ["Docencia", "IA", "Liderazgo femenino", "Inclusión", "Empleabilidad"],
"linkedin_themes": [
"Upskilling IA",
"Cultura y liderazgo",
"FUNDAE",
"Aprendizaje experiencial",
],
"linkedin_formats": ["artículo corto", "carrusel curso", "caso empresa"],
"linkedin_cta": ["Solicitar info in-company", "Ver catálogo"],
"blog_themes": ["IA en la empresa", "Liderazgo", "Empleabilidad", "Inclusión"],
"blog_seo_keywords": [
"formación empresas fundae",
"curso inteligencia artificial empresas",
"formación liderazgo",
],
"claims_forbidden": ["Empleo garantizado", "Bonificación FUNDAE sin condiciones"],
"required_disclaimers": [
"Condiciones FUNDAE según crédito y normativa vigente",
"Plazas y fechas según convocatoria",
],
"b2b_offering": "Formación in-company y programas bonificables para equipos.",
"b2c_offering": "Cursos en abierto para profesionales.",
"usp_differentiators": "Innovación pedagógica + cercanía + catálogo IA/skills.",
"current_priorities": "Captación cursos IA/docencia y cuentas empresa.",
"jobs_to_be_done": ["Actualizar skills", "Bonificar formación", "Transformar equipos"],
"buying_triggers": ["Crédito FUNDAE a punto de caducar", "Nueva herramienta IA", "Convocatoria"],
"customer_frustrations": "Cursos teóricos que no se aplican al día a día.",
"desired_transformation": "Competencias aplicables y confianza profesional.",
"freeform_notes": "NO mezclar creatividades/Meta/Drive con ECP. LinkedIn company/detuatuformacion. Email info@detuatuformacion.es · +34 630 54 93 74.",
}
PACKS["ecp"] = {
"brand_name": "ECP · Escuela de Cuidadores Profesionales",
"website": "https://escueladecuidadoresprofesionales.com/",
"vertical": "Formación sociosanitaria · certificados de profesionalidad (cuidados)",
"tagline": "Formación oficial para cuidadores profesionales",
"elevator_pitch": "Escuela especializada en formación de cuidadores profesionales con certificaciones de profesionalidad (SEPE/CAM) en atención sociosanitaria.",
"brand_promise": "Formarte con rigor para cuidar con profesionalidad.",
"positioning": "Escuela especializada en cuidadores vs academias generalistas o DTATF (marca hermana de soft skills/IA).",
"archetype": "El Cuidador + El Sabio",
"mission": "Profesionalizar el cuidado con formación oficial y cercana.",
"vision": "Referencia en formación sociosanitaria de cuidadores en España.",
"values": ["Cuidado", "Rigor", "Empleabilidad", "Cercanía"],
"tone": "Cercano, humano, claro; respeto por el sector sociosanitario.",
"personality": ["humano", "profesional", "claro", "motivador"],
"voice_do": [
"Hablar de vocación y profesionalización",
"Explicar certificados y salidas",
"Testimonios de alumnos",
],
"voice_dont": [
"Mezclar con De Tú a Tú Formación",
"Prometer empleo fijo",
"Tonos infantiles o melodramáticos",
],
"messaging_pillars": [
"Certificados de profesionalidad",
"Atención sociosanitaria",
"Empleabilidad",
"Vocación de cuidado",
],
"icp": "Personas que quieren trabajar o profesionalizarse como cuidadores; reconversión laboral sociosanitaria.",
"geo": "España (formación ECP)",
"languages": ["es"],
"value_proposition": "Formación especializada en cuidados con vía a certificación oficial.",
"products_services": [
"Certificados de profesionalidad atención sociosanitaria",
"Formación para cuidadores profesionales",
"Itinerarios de empleabilidad sociosanitaria",
],
"channel_handles": handles(
ig="https://www.instagram.com/escuelaecp/",
fb="https://www.facebook.com/Escueladecuidadoresprofesionales",
li="https://www.linkedin.com/company/ecp-escuela-de-cuidadores-profesionales/",
blog="https://escueladecuidadoresprofesionales.com/",
),
"channels": channels(
ig="Captación y comunidad @escuelaecp",
fb="Convocatorias y alcance",
li="Autoridad sector sociosanitario",
blog="SEO certificados / cuidadores",
),
"ads_usps": [
"Especialistas en cuidadores",
"Certificación profesionalidad",
"Formación práctica",
],
"ads_ctas": ["Más información", "Reservar plaza", "WhatsApp"],
"linkedin_themes": ["Profesionalización del cuidado", "Formación sociosanitaria"],
"blog_themes": ["Salidas profesionales", "Certificados", "Cuidados"],
"blog_seo_keywords": [
"certificado profesionalidad atención sociosanitaria",
"curso cuidador profesional",
"escuela cuidadores",
],
"claims_forbidden": ["Empleo garantizado", "Título universitario"],
"required_disclaimers": ["Requisitos y reconocimiento según convocatoria y normativa"],
"pillars_rrss": ["formacion", "empleabilidad", "testimonios", "convocatorias"],
"b2c_offering": "Cursos y certificados para futuros cuidadores profesionales.",
"usp_differentiators": "Especialización exclusiva en cuidadores (separada de DTATF).",
"current_priorities": "Convocatorias CP y captación Meta/IG.",
"jobs_to_be_done": ["Conseguir certificado", "Reorientar carrera al cuidado"],
"buying_triggers": ["Nueva convocatoria", "Desempleo / reconversión"],
"customer_frustrations": "Formación genérica que no habilita para el sector.",
"desired_transformation": "Cualificación reconocida para trabajar cuidando.",
"freeform_notes": "Marca hermana separada: DTATF. No mezclar Meta/Drive/creatividades.",
}
PACKS["equinsa-parking"] = {
"brand_name": "Equinsa Parking",
"website": "https://equinsaparking.com/",
"vertical": "Fabricante de sistemas de gestión de aparcamientos",
"tagline": "Innovación y eficiencia en la gestión de aparcamiento",
"elevator_pitch": "Equinsa Parking fabrica e integra sistemas de gestión de aparcamientos (acceso, pago, guiado, LPR, ticketless) con +30 años de especialización y miles de instalaciones.",
"brand_promise": "Tecnología que humaniza el aparcamiento: eficiente, fiable y sin fricciones.",
"positioning": "Especialista industrial en parking systems (B2B) frente a integradores genéricos.",
"archetype": "El Creador + El Gobernante (tecnología + control)",
"mission": "Optimizar la operación de aparcamientos con tecnología propia y SAT nacional.",
"vision": "Referencia internacional en smart parking.",
"values": ["Fiabilidad", "Innovación", "Servicio", "Especialización"],
"tone": "Técnico-claro, B2B, confiable; sin hype startup vacío.",
"personality": ["industrial", "preciso", "innovador", "cercano-B2B"],
"voice_do": [
"Hablar de instalaciones y gamas (Sense PRO, Essens, Espark)",
"Beneficios para operador y usuario",
"Datos de experiencia (+instalaciones, países)",
],
"voice_dont": ["Promesas smart city vacías", "Confundir con Equinsa Networking"],
"messaging_pillars": [
"Gamas de producto",
"Smart parking / ciudades",
"SAT y fiabilidad",
"Casos de instalación",
],
"icp": "Operadores de parking, constructoras, ayuntamientos, hospitales, centros comerciales, parkings privados.",
"geo": "Torrejón de Ardoz (Madrid) · España · presencia internacional",
"languages": ["es", "en"],
"value_proposition": "Sistemas propios de parking + I+D + SAT nacional para maximizar operación y experiencia de usuario.",
"products_services": [
"Gama Sense PRO",
"Gama Essens",
"Gama Espark (ticketless)",
"Control de acceso y pago",
"Guiado de vehículos",
"Reconocimiento de matrículas (LPR)",
"Centralización / on-line",
"App móvil",
"SAT postventa",
],
"differentiators": [
"+30 años especializados solo en parking",
"I+D propio",
"SAT propio líder",
"Miles de instalaciones",
],
"proof_points": [
"ISO 9001",
"+1700 / +3500 instalaciones (según materiales)",
"Sede C. Primavera 16, Torrejón de Ardoz",
],
"pillars_rrss": ["producto", "instalaciones", "tips-parking", "b2b", "innovacion"],
"channel_handles": handles(
li="https://www.linkedin.com/company/equinsa-parking/",
yt="https://www.youtube.com/channel/UCWuygaSlmr2fpJKx8UIc3lA",
blog="https://equinsaparking.com/",
),
"channels": channels(
li="Canal principal B2B y captación",
yt="Demo productos e instalaciones",
blog="SEO soluciones parking",
email="Presupuestos y proyectos",
other="Contacto sat@equinsa.es · +34 618 18 89 24",
),
"ads_usps": [
"Especialistas en parking",
"Tecnología propia",
"SAT nacional",
"Ticketless / LPR / guiado",
],
"ads_ctas": ["Solicitar demo", "Hablar con comercial", "Descargar ficha", "Presupuesto"],
"ads_objections": ["Ya tengo proveedor", "Capex alto", "Integración compleja"],
"linkedin_themes": [
"Smart parking",
"Ticketless",
"Experiencia de usuario",
"Casos de éxito",
"Mantenimiento SAT",
],
"linkedin_formats": ["caso instalación", "ficha gama", "vídeo producto"],
"linkedin_cta": ["Pedir demo", "Contactar ventas"],
"blog_themes": ["Gestión de aparcamientos", "Movilidad", "Tecnología LPR"],
"blog_seo_keywords": [
"sistemas gestión aparcamiento",
"parking ticketless",
"reconocimiento matrículas parking",
],
"claims_forbidden": ["Garantía de ocupación 100%", "Compatibilidad universal sin estudio"],
"b2b_offering": "Diseño, suministro e integración de sistemas de parking + SAT.",
"usp_differentiators": "Especialización exclusiva + producto propio + SAT.",
"current_priorities": "Leads B2B LinkedIn/Google Ads y notoriedad de gamas.",
"jobs_to_be_done": ["Modernizar parking", "Reducir colas", "Centralizar operación"],
"buying_triggers": ["Obra nueva", "Renovación equipos", "Quejas de usuarios"],
"customer_frustrations": "Sistemas obsoletos y SAT lento.",
"desired_transformation": "Parking fluido, medible y fácil de operar.",
"freeform_notes": "Web https://equinsaparking.com/ (grupo también equinsa.es). LinkedIn company/equinsa-parking. IG no encontrado con handle propio fiable — dejar vacío.",
}
PACKS["fbm-abogados"] = {
"brand_name": "FBM & Asociados",
"website": "https://fbmasociados.com/",
"vertical": "Despacho de abogados · herencias y sucesiones",
"tagline": "Abogados especialistas en herencias y sucesiones",
"elevator_pitch": "Franco Blanco Menchaca & Asociados es un despacho especializado en derecho sucesorio que ofrece servicio llave en mano tras un fallecimiento, con cobertura nacional.",
"brand_promise": "Acompañamiento empático y exhaustivo cuando más se necesita.",
"positioning": "Especialistas en herencias (llave en mano) vs generalistas.",
"archetype": "El Cuidador + El Sabio",
"mission": "Guiar a familias en procesos sucesorios con claridad, empatía y rigor.",
"vision": "Referencia nacional en derecho sucesorio cercano.",
"values": ["Empatía", "Rigor", "Cercanía", "Discreción"],
"tone": "Empático, claro, autoridad en sucesiones; humano sin sensacionalismo.",
"personality": ["empático", "claro", "profesional", "discreto"],
"voice_do": [
"Acompañar sin alarmismo",
"Explicar pasos del proceso sucesorio",
"Ofrecer tranquilidad y siguiente paso",
],
"voice_dont": [
"Garantizar resultados",
"Usar dolor familiar como clickbait",
"Lenguaje frío de bufete elitista",
],
"messaging_pillars": ["Herencias", "Educativo-legal", "Llave en mano", "Cobertura nacional"],
"icp": "Familias y herederos que necesitan gestionar una herencia o planificar sucesión; también gestión inmobiliaria asociada.",
"geo": "España (Madrid, Bilbao, Vitoria, red en crecimiento)",
"languages": ["es"],
"value_proposition": "Asesoramiento sucesorio personal y asistencial, llave en mano, a nivel nacional.",
"products_services": [
"Herencias y sucesiones",
"Instancias / tramitación hereditaria",
"Asesoramiento post-fallecimiento",
"Gestión inmobiliaria asociada",
"Otras ramas del derecho (despacho multidisciplinar con foco sucesorio)",
],
"channel_handles": handles(
ig="https://www.instagram.com/fbmasociados/",
blog="https://fbmasociados.com/",
),
"channels": channels(
ig="Educación y cercanía @fbmasociados",
blog="SEO herencias / guías",
email="Captación consultas",
other="madrid@fbmasociados.com · +34 911 97 18 64",
),
"ads_usps": [
"Especialistas en herencias",
"Servicio llave en mano",
"Cobertura nacional",
"Trato humano",
],
"ads_ctas": ["Consulta", "Pedir información", "Llamar", "WhatsApp"],
"ads_objections": ["Es caro", "No sé por dónde empezar", "Ya tengo notario"],
"linkedin_themes": ["Derecho sucesorio", "Planificación hereditaria", "Guías prácticas"],
"blog_themes": ["Pasos de una herencia", "Impuestos sucesiones", "Preguntas frecuentes"],
"blog_seo_keywords": [
"abogados herencias",
"gestión sucesiones",
"tramitar herencia españa",
],
"claims_forbidden": ["Garantía de resultado", "Plazos fijos universales"],
"required_disclaimers": [
"Cada herencia es distinta",
"La información no sustituye consulta personalizada",
],
"sector_rules": "Publicidad jurídica prudente; sensibilidad con duelo.",
"pillars_rrss": ["herencias", "educativo-legal", "casos", "confianza"],
"b2c_offering": "Tramitación y asesoramiento sucesorio a familias.",
"usp_differentiators": "Especialización sucesoria + llave en mano + red nacional.",
"current_priorities": "Leads de herencias y branding de confianza.",
"jobs_to_be_done": ["Tramitar herencia sin caos", "Entender impuestos y plazos"],
"buying_triggers": ["Fallecimiento reciente", "Conflicto entre herederos"],
"customer_frustrations": "Procesos opacos y falta de acompañamiento emocional.",
"desired_transformation": "Herencia resuelta con claridad y menos carga mental.",
"freeform_notes": "Razón social Franco Blanco Menchaca & Asociados. Web https://fbmasociados.com/. IG @fbmasociados.",
}
PACKS["halal-safety"] = {
"brand_name": "Halal Safety",
"website": "https://www.halalsafety.com/",
"vertical": "Certificación Halal (España / Europa / internacional)",
"tagline": "Certificación Halal reconocida a nivel internacional",
"elevator_pitch": "Halal Safety es una entidad de certificación Halal con +15 años de trayectoria que ayuda a empresas alimentarias y afines a obtener y mantener certificación reconocida internacionalmente.",
"brand_promise": "Certificación Halal rigurosa, clara y con reconocimiento internacional.",
"positioning": "Entidad de certificación seria y global vs sellos locales poco reconocidos.",
"archetype": "El Gobernante + El Sabio (estándar + pedagogía)",
"mission": "Facilitar el acceso de empresas a mercados Halal con certificación confiable.",
"vision": "Referencia europea de certificación Halal de confianza.",
"values": ["Integridad", "Rigor", "Internacionalización", "Claridad"],
"tone": "Profesional, claro, intercultural; autoridad técnica sin arrogancia.",
"personality": ["riguroso", "internacional", "claro", "cercano-B2B"],
"voice_do": [
"Explicar beneficios de certificación para exportar",
"Mostrar proceso y confianza",
"Hablar a calidad/export/dirección",
],
"voice_dont": ["Estereotipos religiosos", "Prometer mercados sin matices"],
"messaging_pillars": [
"Certificación internacional",
"Proceso claro",
"Mercados Halal",
"Confianza y compliance",
],
"icp": "Empresas agroalimentarias, cosmética, logística y exportadoras que necesitan sello Halal.",
"geo": "España · Europa · proyección internacional",
"languages": ["es", "en"],
"value_proposition": "Certificación Halal con reconocimiento internacional y acompañamiento experto.",
"products_services": [
"Certificación Halal",
"Auditorías y acompañamiento",
"Renovaciones / mantenimiento",
"Asesoría para acceso a mercados Halal",
],
"channel_handles": handles(
ig="https://www.instagram.com/halalsafety/",
fb="https://www.facebook.com/SAFETYHORIZON",
li="https://www.linkedin.com/company/halal-safety-certification/",
blog="https://www.halalsafety.com/",
),
"channels": channels(
ig="Notoriedad y educación @halalsafety",
fb="Comunidad / Safety Horizon",
li="Captación B2B principal",
blog="SEO certificación Halal",
),
"ads_usps": [
"+15 años",
"Reconocimiento internacional",
"Proceso experto",
"España y Europa",
],
"ads_ctas": ["Solicitar información", "Hablar con un auditor", "Empezar certificación"],
"linkedin_themes": [
"Exportación mercados Halal",
"Compliance alimentario",
"Casos de certificación",
],
"blog_themes": ["Qué es Halal", "Proceso de certificación", "Mercados"],
"blog_seo_keywords": [
"certificación halal españa",
"certificado halal empresas",
"halal certification europe",
],
"claims_forbidden": ["Acceso automático a todos los mercados", "Certificación en 24h sin auditoría"],
"b2b_offering": "Certificación y acompañamiento Halal para empresas.",
"usp_differentiators": "Trayectoria + reconocimiento internacional + foco Europa.",
"current_priorities": "Leads LinkedIn/Google y educación de marca.",
"pillars_rrss": ["certificacion", "educativo", "mercados", "confianza"],
"jobs_to_be_done": ["Obtener sello Halal", "Exportar con confianza"],
"buying_triggers": ["Oportunidad de export", "Cliente exige sello", "Auditoría próxima"],
"customer_frustrations": "Procesos opacos y sellos sin reconocimiento.",
"desired_transformation": "Certificación clara que abre mercados.",
"freeform_notes": "LinkedIn principal company/halal-safety-certification. También aparece eci-safety-horizon en web.",
}
PACKS["la-freseria"] = {
"brand_name": "La Fresería",
"website": "https://lafreseria.es/",
"vertical": "Retail food · fresas con toppings / foodie viral (franquicia)",
"tagline": "Las fresas más famosas del mundo",
"elevator_pitch": "La Fresería es la marca de fresas con chocolate y creaciones foodie virales con decenas de locales en España y Europa, y modelo de franquicia.",
"brand_promise": "Una experiencia dulce, visual y adictiva alrededor de la fresa.",
"positioning": "Foodie viral de fresas premium vs neverías genéricas.",
"archetype": "El Bufón + El Amante (diversión + indulgencia)",
"mission": "Hacer de la fresa un momento memorable y compartible.",
"vision": "Llevar las fresas más famosas del mundo a más ciudades (franquicia).",
"values": ["Frescura", "Diversión", "Calidad", "Comunidad"],
"tone": "Fresco, apetitoso, cercano, estacional y con energía social.",
"personality": ["divertido", "visual", "cercano", "goloso"],
"voice_do": [
"Mostrar producto hero (ASMR/close-up)",
"Estacionalidad y lanzamientos",
"UGC y comunidad",
],
"voice_dont": ["Claims nutricionales engañosos", "Tono corporativo frío"],
"messaging_pillars": ["Producto", "Novedades", "Tiendas", "Franquicia", "Comunidad"],
"icp": "Gen Z / millennials foodies + familias; inversores/franquiciados para expansión.",
"geo": "España (+ Portugal/Francia en red) · HQ Madrid",
"languages": ["es"],
"value_proposition": "Fresas 100% nacionales y creaciones virales en locales pequeños de alta rotación.",
"products_services": [
"Fresas con chocolate y toppings",
"Creaciones de temporada (Fresalado, matcha, ube, etc.)",
"Cajitas / regalos",
"Franquicia La Fresería",
],
"differentiators": [
"Concepto viral de fresa",
"Modelo de local pequeño sin salida de humos",
"Red >30 locales España",
],
"proof_points": [
"+33 locales en España / +35 en Europa (según web franquicia)",
"Inversión franquicia desde ~65.000 € (material web)",
],
"pillars_rrss": ["producto", "lanzamientos", "tiendas", "ugc", "franquicia"],
"series_recurrentes": ["Novedad de temporada", "Detrás del mostrador", "Spotting tiendas"],
"formats_priority": ["reel", "stories", "carrusel", "post"],
"channel_handles": handles(
ig="https://www.instagram.com/lafreseriaoficial/",
blog="https://lafreseria.es/",
),
"channels": channels(
ig="Canal héroe @lafreseriaoficial",
blog="Web tiendas + franquicia",
email="Franquicia expansion@lafreseria.com / hola@lafreseria.com",
other="TikTok/other UGC según campaña",
),
"ads_usps": [
"Fresas más famosas del mundo",
"Novedades virales",
"Regalo perfecto",
"Franquicia rentable (B2B)",
],
"ads_ctas": ["Encuentra tu tienda", "Pedir", "Info franquicia", "Síguenos"],
"ads_angles": ["Producto hero", "Temporada", "Franquicia EBITDA"],
"linkedin_themes": ["Expansión franquicia", "Food retail", "Emprendimiento"],
"blog_themes": ["Novedades", "Franquicia", "Tiendas"],
"blog_seo_keywords": ["fresas con chocolate", "franquicia food", "la fresería tiendas"],
"claims_forbidden": ["Claims de salud / dietéticos engañosos", "EBITDA garantizado"],
"required_disclaimers": [
"Cifras de franquicia orientativas según material comercial",
"Disponibilidad de producto según tienda/temporada",
],
"b2b_offering": "Modelo de franquicia (expansión).",
"b2c_offering": "Producto foodie en tienda.",
"usp_differentiators": "Concepto fresa viral + red europea + formato local ágil.",
"current_priorities": "Tráfico a tiendas + leads franquicia.",
"jobs_to_be_done": ["Darme un capricho visual", "Regalar", "Abrir franquicia"],
"buying_triggers": ["Novedad", "Cumpleaños", "Apertura ciudad"],
"customer_frustrations": "Postres feos o poco instagrameables.",
"desired_transformation": "Momento wow para compartir.",
"freeform_notes": "Razón social BRUTAL VIRAL FOODIES, S.L. Web https://lafreseria.es/. IG @lafreseriaoficial.",
}
PACKS["noberplast"] = {
"brand_name": "Noberplast",
"website": "https://noberplast.com/",
"vertical": "Fabricación y distribución de envases, bolsas y productos para hogar/comercio/HORECA",
"tagline": "Productos para el cuidado del hogar, comercio y profesionales",
"elevator_pitch": "Noberplast fabrica y distribuye bolsas de papel y plástico, celulosa, aluminio y envases para hogar, comercios y profesionales, con +30–40 años de experiencia y logística propia.",
"brand_promise": "Suministro fiable, amplio catálogo y entregas ágiles para que tu negocio no pare.",
"positioning": "Partner de suministros HORECA/comercio con fabricación/distribución propia vs puro marketplace.",
"archetype": "El Cuidador + El Gobernante (servicio + fiabilidad)",
"mission": "Simplificar y rentabilizar las compras de consumibles para negocios y hogar.",
"vision": "Ser el partner de referencia de suministros desechables y celulosa en la península.",
"values": ["Fiabilidad", "Servicio", "Calidad", "Cercanía comercial"],
"tone": "Práctico, claro, B2B cercano; orientado a catálogo y beneficio operativo.",
"personality": ["fiable", "práctico", "industrial-cercano", "resolutivo"],
"voice_do": [
"Hablar de catálogo y ahorro por volumen",
"Destacar plazos de entrega y stock",
"Casos HORECA / comercio",
],
"voice_dont": ["Greenwashing sin matiz", "Prometer plazos imposibles"],
"messaging_pillars": ["Catálogo", "Logística 48h", "HORECA", "Personalización bolsas", "Sostenibilidad responsable"],
"icp": "Comercios, HORECA, profesionales e industria que compran consumibles de forma recurrente.",
"geo": "Ajalvir (Madrid) · Península Ibérica",
"languages": ["es"],
"value_proposition": "Catálogo amplio + experiencia + vehículos propios y entregas rápidas en península.",
"products_services": [
"Bolsas papel y plástico (también personalizadas)",
"Celulosa / papel multiusos",
"Aluminio y envases",
"Productos limpieza / hogar",
"Suministros HORECA",
"Venta online B2B/B2C",
],
"differentiators": [
"+30/40 años",
"Logística propia",
"ISO 9001 / 14001",
"Personalización",
],
"proof_points": [
"ISO 9001, ISO 14001",
"Entregas ~48h península",
"Tel. 800 76 00 53 / 91 658 42 42",
],
"pillars_rrss": ["producto", "catalogo", "tips-negocio", "sostenibilidad", "bastidores"],
"channel_handles": handles(
ig="https://www.instagram.com/noberplastsl/",
li="https://www.linkedin.com/company/noberplast/",
blog="https://noberplast.com/",
),
"channels": channels(
ig="@noberplastsl producto y marca",
li="B2B y captación mayorista",
blog="SEO catálogo / consejos",
email="Pedidos y cuentas clave",
),
"ads_usps": [
"Amplio catálogo",
"Entrega rápida",
"Precios por volumen",
"40 años de experiencia",
],
"ads_ctas": ["Ver catálogo", "Pedir presupuesto", "Comprar online", "Llamar"],
"linkedin_themes": ["Suministros HORECA", "Envases", "Logística", "Sostenibilidad materiales"],
"blog_themes": ["Consejos hostelería", "Productos destacados", "Navidad/temporada"],
"blog_seo_keywords": [
"bolsas papel personalizadas",
"suministros horeca",
"distribuidor celulosa madrid",
],
"b2b_offering": "Suministro recurrente y personalización para comercios y HORECA.",
"b2c_offering": "Tienda online de productos hogar/profesionales.",
"usp_differentiators": "Fabricación/distribución + logística propia + certificaciones.",
"current_priorities": "Pedidos online y cuentas B2B.",
"jobs_to_be_done": ["Reponer stock sin roturas", "Bajar coste por unidad", "Personalizar packaging"],
"buying_triggers": ["Rotura de stock", "Nueva apertura", "Cambio de proveedor"],
"customer_frustrations": "Proveedores lentos o catálogo incompleto.",
"desired_transformation": "Suministro estable y simple.",
"freeform_notes": "Web https://noberplast.com/. IG @noberplastsl. LinkedIn company/noberplast. Crta. Torrejón-Ajalvir Km 0,6 nº16, 28864 Ajalvir.",
}
PACKS["tsp"] = {
"brand_name": "Talento Scholar Program",
"website": "https://talentoscholarprogram.com/",
"vertical": "Certificaciones universitarias USA para estudiantes preuniversitarios",
"tagline": "Certificaciones universitarias americanas antes de la universidad",
"elevator_pitch": "Talento Scholar Program permite a estudiantes de 4º ESO, Bachillerato y FP obtener certificaciones oficiales de universidad americana (p. ej. Utah Tech) 100% online, con acompañamiento.",
"brand_promise": "Un perfil académico diferencial e internacional antes de entrar en la universidad.",
"positioning": "Línea académica/scholar de Talento (separada de becas deportivas TYD).",
"archetype": "El Sabio + El Explorador",
"mission": "Dar a estudiantes españoles acceso real a credencial universitaria USA mientras cursan Bach/FP.",
"vision": "Ser el puente de referencia hacia certificaciones universitarias americanas desde España.",
"values": ["Excelencia", "Accesibilidad", "Acompañamiento", "Internacionalización"],
"tone": "Orientador, serio-cercano, aspiracional académico (padres + alumnos).",
"personality": ["orientador", "aspiracional", "claro", "cercano"],
"voice_do": [
"Hablar a padres y alumnos",
"Explicar certificaciones y compatibilidad con el cole/FP",
"Destacar Utah Tech / oficialidad",
],
"voice_dont": [
"Mezclar con becas deportivas TYD",
"Prometer admisión universitaria garantizada",
"Vender como 'título completo USA' confuso",
],
"messaging_pillars": [
"Certificación universitaria USA",
"4º ESO / Bach / FP",
"100% online",
"Perfil diferencial",
"Acompañamiento",
],
"icp": "Familias con hijos en 4º ESO–Bach–FP que buscan diferenciación académica internacional.",
"geo": "España (online) · partner universidad USA",
"languages": ["es", "en"],
"value_proposition": "Certificaciones oficiales de universidad americana compatibles con estudios actuales, con orientación del equipo.",
"products_services": [
"Technology Innovation & Entrepreneurship",
"Cybersecurity",
"Photography & Digital Imaging",
"Orientación y acompañamiento al estudiante",
],
"channel_handles": handles(
ig="https://www.instagram.com/talentoscholarprogram/",
blog="https://talentoscholarprogram.com/",
),
"channels": channels(
ig="Marca y prueba social @talentoscholarprogram",
blog="Landing + captación leads",
email="Nurturing familias",
other="Powered by Talento y Deporte (marca hermana TYD — no mezclar Meta/creatividades)",
),
"ads_usps": [
"Universidad americana",
"Antes de la universidad",
"100% online",
"Compatible con cole/FP",
],
"ads_ctas": ["Solicitar información", "Quiero información", "Hablar con el equipo"],
"ads_objections": [
"Es caro",
"Nivel de inglés",
"No sirve en España",
"Es solo un curso más",
],
"linkedin_themes": [
"Educación internacional",
"Credentialing preuniversitario",
"EdTech",
],
"blog_themes": ["Por qué certificar antes", "Áreas del programa", "FAQ padres"],
"blog_seo_keywords": [
"certificación universitaria americana",
"cursos universidad eeuu bachillerato",
"talento scholar program",
],
"claims_forbidden": [
"Admisión garantizada a universidades",
"Equivalencia automática a grado",
],
"required_disclaimers": [
"Las certificaciones dependen del programa y requisitos de la universidad partner",
"No garantiza admisión universitaria",
],
"pillars_rrss": [
"beca-academica",
"admisiones",
"campus",
"financiacion",
"objeciones",
"casos-exito",
],
"b2c_offering": "Programa de certificaciones para estudiantes y familias.",
"usp_differentiators": "Credencial USA oficial + online + acompañamiento TYD ecosystem.",
"current_priorities": "Leads de información y branding Scholar separado de deporte.",
"jobs_to_be_done": ["Diferenciar el CV del hijo", "Explorar camino internacional"],
"buying_triggers": ["Orientación bachillerato", "Interés STEM/USA", "Comparar con extracurriculares"],
"customer_frustrations": "Extracurriculares que no aportan credencial real.",
"desired_transformation": "Perfil académico internacional verificable.",
"freeform_notes": "Web https://talentoscholarprogram.com/. IG @talentoscholarprogram. GA4 G-3ERLFE3PVL. Hermana TYD: no mezclar.",
}
PACKS["tyd"] = {
"brand_name": "Talento y Deporte",
"website": "https://talentoydeporte.com/",
"vertical": "Becas deportivas y académicas para estudiar en EE.UU.",
"tagline": "Te llevamos a estudiar a Estados Unidos con beca deportiva o académica",
"elevator_pitch": "Talento y Deporte ayuda a jóvenes deportistas y estudiantes a conseguir becas en universidades de EE.UU., con acompañamiento en el proceso de admisión y colocación.",
"brand_promise": "Un camino real y acompañado hacia estudiar y competir en Estados Unidos.",
"positioning": "Especialistas en becas USA (deporte + academic pathways) vs agencias genéricas de 'estudia fuera'.",
"archetype": "El Héroe + El Cuidador (ambición + acompañamiento familiar)",
"mission": "Abrir puertas universitarias en EE.UU. a talento español e internacional.",
"vision": "Ser la referencia ibérica en placement universitario USA.",
"values": ["Ambición", "Transparencia", "Acompañamiento", "Excelencia deportiva/académica"],
"tone": "Motivador, aspiracional, claro para familias; serio en el proceso.",
"personality": ["aspiracional", "cercano", "exigente", "orientador"],
"voice_do": [
"Hablar de becas, universidades y proceso",
"Mostrar casos de alumnos",
"Dirigirse a padres y atletas",
],
"voice_dont": [
"Mezclar con Talento Scholar Program",
"Garantizar beca del 100%",
"Vender turismo académico",
],
"messaging_pillars": [
"Becas deportivas USA",
"Proceso paso a paso",
"Casos de éxito",
"Vida universitaria",
"Familias",
],
"icp": "Familias con hijos deportistas / estudiantes con proyección que buscan universidad en EE.UU.",
"geo": "España · LatAm (operaciones TYD) · destino EE.UU.",
"languages": ["es", "en"],
"value_proposition": "Proceso guiado para becas deportivas/académicas en universidades USA con equipo experto.",
"products_services": [
"Asesoramiento becas deportivas",
"Placement universitario USA",
"Preparación de perfil / video / academic",
"Acompañamiento a familias",
],
"channel_handles": handles(
ig="https://www.instagram.com/talentoydeporte/",
fb="https://www.facebook.com/talentoydeporte",
yt="https://www.youtube.com/@talentoydeporte",
blog="https://talentoydeporte.com/",
),
"channels": channels(
ig="Canal héroe @talentoydeporte",
fb="Alcance familias",
yt="Historias y proceso",
blog="SEO becas USA",
email="Nurturing familias",
other="Linktree https://linktr.ee/talentoydeporte",
),
"ads_usps": [
"Becas en EE.UU.",
"Acompañamiento real",
"Casos de éxito",
"Deporte + estudios",
],
"ads_ctas": ["Pedir información", "Evalúa tu perfil", "Hablar con un asesor"],
"linkedin_themes": ["Educación internacional", "Deporte universitario", "Employability"],
"blog_themes": ["Cómo funciona la beca", "Vida en USA", "Requisitos"],
"blog_seo_keywords": [
"becas deportivas estados unidos",
"estudiar en usa con beca",
"universidad americana deporte",
],
"claims_forbidden": ["Beca 100% garantizada", "Visa/admision asegurada"],
"required_disclaimers": [
"La beca depende del perfil deportivo/académico y de la universidad",
],
"pillars_rrss": ["becas", "casos", "proceso", "vida-usa", "familias"],
"b2c_offering": "Programa de asesoramiento y placement para familias/atletas.",
"usp_differentiators": "Especialización becas USA + track record + marca TYD.",
"current_priorities": "Leads España (y mercados TYD) sin canibalizar Scholar.",
"jobs_to_be_done": ["Conseguir beca", "Entender el proceso", "Elegir universidad"],
"buying_triggers": ["Temporada de scouting", "Fin de etapa escolar", "Torneo destacado"],
"customer_frustrations": "Agencias opacas y falsas promesas de beca total.",
"desired_transformation": "Plaza universitaria USA con plan claro.",
"freeform_notes": "Hermana TSP (Scholar) separada. GSC https://talentoydeporte.com/.",
}
PACKS["virginia-molet"] = {
"brand_name": "Gravitae Academy (Virginia Molet)",
"website": "https://gravitaeacademy.com/",
"vertical": "Executive coaching / leadership academy",
"tagline": "Transformación del liderazgo a través de un coaching de primer nivel",
"elevator_pitch": "Gravitae Academy, fundada por Virginia Molet (ICF PCC), ayuda a ejecutivos de alto rendimiento a convertirse en líderes reconocidos mediante coaching ejecutivo y de equipos.",
"brand_promise": "Liderazgo con gravitas: influencia, claridad y crecimiento de carrera.",
"positioning": "Coaching ejecutivo premium internacional (ICF) vs coaching genérico o motivational speaking.",
"archetype": "El Sabio + El Magician (transformación)",
"mission": "Elevar el liderazgo de ejecutivos y equipos en contextos complejos e internacionales.",
"vision": "Red de coaching de primer nivel para líderes globales.",
"values": ["Excelencia", "Confidencialidad", "Profundidad", "Impacto"],
"tone": "Cercano-premium, internacional (ES/EN), aspiracional sin postureo vacío.",
"personality": ["premium", "internacional", "cercana", "exigente"],
"voice_do": [
"Hablar de liderazgo, carrera e influencia",
"Credenciales ICF / experiencia +20 años / +50 nacionalidades",
"Casos y frameworks prácticos",
],
"voice_dont": [
"Frases motivacionales vacías",
"Prometer ascenso/salario garantizado",
"Confundir marca personal con clínica o producto físico",
],
"messaging_pillars": [
"Executive coaching",
"Liderazgo",
"Carrera",
"Equipos / systemic coaching",
"Comunidad Gravitae",
],
"icp": "Directores, heads y C-level que quieren influir más, navegar complejidad y acelerar carrera.",
"geo": "Internacional (España/Europa/remoto) · fundadora con trayectoria global",
"languages": ["es", "en"],
"value_proposition": "Coaching ejecutivo ICF de alto nivel para líderes que operan en entornos internacionales complejos.",
"products_services": [
"Executive coaching 1:1",
"Team / systemic coaching",
"Programas Gravitae Academy",
"Formación en liderazgo y comunicación persuasiva",
],
"channel_handles": handles(
ig="https://www.instagram.com/gravitaeacademyofficial/",
li="https://www.linkedin.com/in/virginiamolet",
blog="https://gravitaeacademy.com/",
),
"channels": channels(
ig="@gravitaeacademyofficial comunidad y marca academy",
li="Canal B2B principal (Virginia Molet PCC)",
blog="Web Gravitae + contenidos",
other="Marca personal: https://www.virginiamolet.com/ · también @virginiamoletcoach",
),
"ads_usps": [
"ICF PCC",
"+20 años experiencia internacional",
"Líderes de alto rendimiento",
"Coaching 1:1 y equipos",
],
"ads_ctas": ["Agendar conversación", "Conocer Gravitae", "LinkedIn"],
"linkedin_themes": [
"Liderazgo ejecutivo",
"Carrera e influencia",
"Coaching de equipos",
"Positive psychology aplicada",
],
"linkedin_formats": ["artículo", "carrusel framework", "historia de cliente (anon)"],
"linkedin_cta": ["Mensaje", "Reservar discovery call"],
"blog_themes": ["Liderazgo", "Coaching", "Carrera"],
"blog_seo_keywords": [
"executive coaching",
"coaching ejecutivo icf",
"leadership coaching spain",
],
"claims_forbidden": ["Ascenso garantizado", "Aumento salarial asegurado"],
"required_disclaimers": ["Resultados dependen del compromiso del coachee y contexto organizacional"],
"pillars_rrss": ["liderazgo", "carrera", "bastidores-coaching", "comunidad"],
"b2b_offering": "Programas para empresas y equipos directivos.",
"b2c_offering": "Coaching ejecutivo individual (B2C premium / B2B2C).",
"usp_differentiators": "ICF + experiencia business internacional + Gravitae network.",
"current_priorities": "Leads discovery + autoridad LinkedIn/IG Gravitae.",
"jobs_to_be_done": ["Ganar influencia", "Navegar cambio", "Preparar siguiente rol"],
"buying_triggers": ["Nuevo rol", "Estancamiento", "Reorganización"],
"customer_frustrations": "Coaching superficial o formación genérica de liderazgo.",
"desired_transformation": "Liderar con claridad, presencia e impacto.",
"freeform_notes": "Web negocio https://gravitaeacademy.com/. Personal https://www.virginiamolet.com/. Meta page Gravitae Academy. IG @gravitaeacademyofficial.",
}
PACKS["wine-advisors"] = {
"brand_name": "WineAdvisor",
"website": "https://www.wineadvisor.mx/",
"vertical": "SaaS / plataforma de gestión y carta digital de vinos (HORECA)",
"tagline": "La revolución en la gestión del vino",
"elevator_pitch": "WineAdvisor es la plataforma visual para que restaurantes, hoteles y retail gestionen inventario de vino, maridajes y ventas, con una experiencia digital para el comensal y control para el equipo.",
"brand_promise": "Impulsa el consumo de vino en tu negocio con una cava digital inteligente.",
"positioning": "Software integral de cava (inventario + experiencia + ventas) vs sola carta PDF/QR.",
"archetype": "El Creador + El Sabio (innovación + expertise vino)",
"mission": "Modernizar cómo los negocios venden y gestionan vino.",
"vision": "Estándar digital de gestión de vinos en hostelería (MX / ES / US).",
"values": ["Innovación", "Experiencia", "Datos", "Placer sin snobismo"],
"tone": "Experto, cercano, comercial B2B HORECA; vino sin snobismo.",
"personality": ["innovador", "cercano", "experto", "comercial"],
"voice_do": [
"Hablar a dueños de restaurante y sommeliers",
"Beneficios: rotación, inventario, upselling",
"Mostrar interfaz visual",
],
"voice_dont": [
"Elitismo enológico excluyente",
"Venderlo solo como 'carta QR'",
"Confundir IG ES (@wineadvisor_es) con MX (@wine.advisor)",
],
"messaging_pillars": [
"Carta visual",
"Inventario y rotación",
"Maridajes",
"Ventas del equipo",
"Datos de consumo",
],
"icp": "Restaurantes, hoteles, distribuidores y retail de vino que quieren digitalizar cava y aumentar ticket.",
"geo": "México (HQ) · España · EE.UU.",
"languages": ["es", "en"],
"value_proposition": "Plataforma visual de selección + inventario + analítica para vender más vino con menos fricción.",
"products_services": [
"Carta / cava digital visual",
"Gestión de inventario",
"Maridajes y descubrimiento",
"Analítica de ventas",
"Implementación e inventario inicial",
],
"differentiators": [
"Interfaz visual única",
"No es solo QR: es gestión + ventas",
"Equipo de implementación",
],
"proof_points": [
"Producto wineadvisor.mx",
"LinkedIn Intelligent Restaurants de México",
"Presencia IG ES @wineadvisor_es y MX @wine.advisor",
],
"pillars_rrss": ["producto", "maridaje", "horeca", "educativo-vino", "casos"],
"series_recurrentes": ["Tip cava", "Antes/después carta", "Dato de rotación"],
"formats_priority": ["reel", "carrusel", "post", "stories"],
"channel_handles": handles(
ig="https://www.instagram.com/wineadvisor_es/",
fb="https://www.facebook.com/WineAdvisor",
li="https://www.linkedin.com/company/intelligent-restaurants-de-mexico-s-a-de-c-v-/",
blog="https://www.wineadvisor.mx/",
),
"channels": channels(
ig="ES @wineadvisor_es (también MX @wine.advisor)",
fb="WineAdvisor",
li="B2B HORECA principal",
blog="Producto y captación demo",
email="info@wineadvisor.mx",
),
"ads_usps": [
"Cava digital visual",
"Control de inventario",
"Más ventas de vino",
"Ideal HORECA",
],
"ads_ctas": ["Solicitar demo", "Únete a WineAdvisor", "Hablar con un experto"],
"ads_objections": ["Ya tengo carta QR", "Mi equipo no lo usará", "Precio SaaS"],
"ads_angles": ["De carta PDF a experiencia", "Rotación de etiquetas", "Upselling en sala"],
"linkedin_themes": [
"Hospitality tech",
"Gestión de cava",
"Experiencia del comensal",
"Datos de consumo",
],
"linkedin_formats": ["demo UI", "caso restaurante", "carrusel beneficios"],
"linkedin_cta": ["Pedir demo", "Contactar"],
"blog_themes": ["Gestión de vino", "Tendencias HORECA", "Maridaje"],
"blog_seo_keywords": [
"carta de vinos digital",
"software inventario vino restaurante",
"wineadvisor",
],
"b2b_offering": "SaaS + implementación para centros de consumo de vino.",
"usp_differentiators": "Experiencia visual + inventario + analítica en una plataforma.",
"current_priorities": "Demos HORECA ES/MX y notoriedad de producto.",
"jobs_to_be_done": ["Vender más vino", "Controlar stock", "Formar al equipo de sala"],
"buying_triggers": ["Carta desactualizada", "Merma/inventario caótico", "Nueva apertura"],
"customer_frustrations": "Cartas estáticas y cero datos de qué se vende.",
"desired_transformation": "Cava viva que vende sola y se controla fácil.",
"freeform_notes": "Web canónica https://www.wineadvisor.mx/. IG campaña ES: @wineadvisor_es. LinkedIn company/intelligent-restaurants-de-mexico-s-a-de-c-v-.",
}
# Campos de kit visual que no pisamos si ya existen
PRESERVE_IF_NONEMPTY = {
"colors",
"fonts_kit",
"kit_assets",
"colors_primary",
"colors_secondary",
"fonts",
"source_excerpts",
}
def is_filled(v: Any) -> bool:
if v is None:
return False
if isinstance(v, str):
return bool(v.strip())
if isinstance(v, list):
return len(v) > 0
if isinstance(v, dict):
return any(is_filled(x) for x in v.values())
return True
def looks_like_bad_handle(s: str) -> bool:
"""Handles que metimos mal (IDs numéricos Meta como URL)."""
if not s:
return True
if re.search(r"instagram\.com/\d{5,}", s):
return True
if re.search(r"facebook\.com/\d{5,}$", s):
return True
return False
def merge_book(existing: dict, pack: dict) -> dict:
out = dict(existing or {})
for k, v in pack.items():
if k in ("channels", "channel_handles") and isinstance(v, dict):
base = dict(out.get(k) or {})
for hk, hv in v.items():
if not hv:
continue
cur = str(base.get(hk) or "")
if not cur or looks_like_bad_handle(cur) or k == "channel_handles":
base[hk] = hv
elif not is_filled(cur):
base[hk] = hv
else:
# pack wins for handles always; for channel roles overwrite if pack set
if k == "channels":
base[hk] = hv
out[k] = base
continue
if k in PRESERVE_IF_NONEMPTY and is_filled(out.get(k)) and not is_filled(v):
continue
if v is None:
continue
if isinstance(v, list) and len(v) == 0 and is_filled(out.get(k)):
continue
if isinstance(v, str) and v.strip() == "" and is_filled(out.get(k)):
# no borrar con vacío
continue
out[k] = v
# website siempre del pack si viene
if pack.get("website"):
out["website"] = pack["website"]
if pack.get("brand_name"):
out["brand_name"] = pack["brand_name"]
out["version"] = 2
return out
def score_key_fields(book: dict) -> tuple[int, list[str]]:
keys = [
"website",
"tagline",
"elevator_pitch",
"tone",
"mission",
"value_proposition",
"icp",
"products_services",
"channel_handles",
"ads_usps",
"ads_ctas",
"linkedin_themes",
"blog_themes",
"pillars_rrss",
]
miss = [k for k in keys if not is_filled(book.get(k))]
# channel linkedin specifically
ch = book.get("channel_handles") or {}
if not is_filled(ch.get("linkedin")):
miss.append("linkedin_handle")
if not is_filled(ch.get("instagram")):
miss.append("instagram_handle")
filled = len(keys) - len([k for k in miss if k in keys])
pct = round(100 * filled / len(keys))
return pct, miss
def main() -> None:
tenants = get(
"tenants?agency_followed=neq.false&select=id,slug,name,default_landing_url&order=slug"
)
print(f"Active tenants: {len(tenants)} · packs: {len(PACKS)}")
missing_packs = [t["slug"] for t in tenants if t["slug"] not in PACKS]
if missing_packs:
print("WARNING no pack for:", missing_packs)
for t in tenants:
slug = t["slug"]
pack = PACKS.get(slug)
if not pack:
print(f"[skip] {slug}")
continue
docs = get(
f"documents?tenant_id=eq.{t['id']}&type=eq.brandbook&select=id,content&order=updated_at.desc&limit=1"
)
if not docs:
print(f"[skip] {slug} sin brandbook doc")
continue
content = docs[0]["content"]
if isinstance(content, str):
content = json.loads(content)
before, miss_b = score_key_fields(content)
merged = merge_book(content, pack)
after, miss_a = score_key_fields(merged)
patch(f"documents?id=eq.{docs[0]['id']}", {"content": merged})
# sync tenant landing
landing = pack.get("website")
if landing and t.get("default_landing_url") != landing:
patch(f"tenants?id=eq.{t['id']}", {"default_landing_url": landing})
print(
f"[ok] {slug:22} score {before}%→{after}% web={pack.get('website')} still_miss={miss_a[:6]}"
)
print("DONE")
if __name__ == "__main__":
main()