create-bk-agent 0.21.2 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +2 -0
  2. package/dist/src/index.js +24 -1
  3. package/dist/src/prompts.js +34 -0
  4. package/dist/src/scaffold.js +57 -0
  5. package/package.json +1 -1
  6. package/templates/base/orchestrator/_common/.env.example +14 -0
  7. package/templates/base/orchestrator/_common/package.json +16 -0
  8. package/templates/base/orchestrator/blank/flows/.gitkeep +0 -0
  9. package/templates/base/orchestrator/blank/orchestrator.yaml +34 -0
  10. package/templates/base/orchestrator/blank/vault/lecciones/.gitkeep +0 -0
  11. package/templates/base/orchestrator/marketing/flows/articulo-blog.yaml +97 -0
  12. package/templates/base/orchestrator/marketing/flows/campana-leads.yaml +115 -0
  13. package/templates/base/orchestrator/marketing/orchestrator.yaml +92 -0
  14. package/templates/base/orchestrator/marketing/test-flow.mjs +205 -0
  15. package/templates/base/orchestrator/marketing/vault/audiencia/buyer-personas.md +87 -0
  16. package/templates/base/orchestrator/marketing/vault/canales/estrategia-canales.md +53 -0
  17. package/templates/base/orchestrator/marketing/vault/contenido/tipos-de-contenido.md +71 -0
  18. package/templates/base/orchestrator/marketing/vault/lecciones/.gitkeep +0 -0
  19. package/templates/base/orchestrator/marketing/vault/marca/tono-y-voz.md +49 -0
  20. package/templates/base/orchestrator/marketing/vault/metricas/kpis-y-benchmarks.md +72 -0
  21. package/templates/base/orchestrator/marketing/vault/procesos/calendario-editorial.md +65 -0
  22. package/templates/base/orchestrator/ventas/flows/calificacion-lead.yaml +113 -0
  23. package/templates/base/orchestrator/ventas/flows/propuesta-comercial.yaml +179 -0
  24. package/templates/base/orchestrator/ventas/orchestrator.yaml +93 -0
  25. package/templates/base/orchestrator/ventas/test-flow.mjs +207 -0
  26. package/templates/base/orchestrator/ventas/vault/lecciones/.gitkeep +0 -0
  27. package/templates/base/orchestrator/ventas/vault/politicas/condiciones-comerciales.md +65 -0
  28. package/templates/base/orchestrator/ventas/vault/procesos/calificacion-bant.md +50 -0
  29. package/templates/base/orchestrator/ventas/vault/procesos/ciclo-venta.md +61 -0
  30. package/templates/base/orchestrator/ventas/vault/productos/catalogo-servicios.md +103 -0
  31. package/templates/base/orchestrator/ventas/vault/productos/pricing-policy.md +84 -0
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Test runner for the marketing orchestrator
4
+ *
5
+ * Usage:
6
+ * node test-flow.mjs articulo-blog # blog article flow (1 gate: SEO review)
7
+ * node test-flow.mjs campana-leads # lead gen campaign (2 gates, parallel steps)
8
+ * node test-flow.mjs dynamic # dynamic planning (no flow match)
9
+ */
10
+
11
+ import { spawn } from 'node:child_process';
12
+ import { createInterface } from 'node:readline';
13
+ import * as path from 'node:path';
14
+ import * as fs from 'node:fs';
15
+ import * as url from 'node:url';
16
+
17
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
18
+ const CONFIG_PATH = path.resolve(__dirname, 'orchestrator.yaml');
19
+ const SERVER_PATH = path.resolve(
20
+ __dirname,
21
+ 'node_modules/@backendkit-labs/orchestrator-agent/dist/server.js',
22
+ );
23
+
24
+ // ── Sample payloads ───────────────────────────────────────────────────────────
25
+
26
+ const FLOWS = {
27
+ 'articulo-blog': {
28
+ flow_id: 'articulo-blog',
29
+ task: 'Crear artículo de blog: Cómo reducir el time-to-market con CI/CD',
30
+ payload: {
31
+ tema: 'Cómo implementar CI/CD para reducir el time-to-market en equipos de desarrollo',
32
+ objetivo: 'Posicionar a la empresa como experta en DevOps y atraer CTOs que buscan acelerar sus equipos',
33
+ audiencia: 'CTOs y VPs de Engineering de empresas tech (50-300 empleados) con deploys manuales o procesos lentos',
34
+ keywords: 'CI/CD implementación, continuous delivery, reducir time-to-market, pipeline de despliegue',
35
+ tono: 'Técnico pero accesible — como explicarle a un CTO que sabe de tecnología pero no es especialista en DevOps',
36
+ },
37
+ },
38
+ 'campana-leads': {
39
+ flow_id: 'campana-leads',
40
+ task: 'Diseñar campaña de generación de leads para servicios de Data Engineering',
41
+ payload: {
42
+ servicio: 'Data Engineering — construcción de data pipelines, data warehouses y plataformas de analytics',
43
+ segmento: 'Directores de Analytics, CTOs y CEOs de empresas con más de 50 empleados que tienen datos pero no los aprovechan',
44
+ objetivo: 'Generar 20 leads calificados (MQL) en 60 días para el equipo de ventas',
45
+ presupuesto: '$3.000 USD mensuales en paid + tiempo del equipo de contenido',
46
+ duracion: '60 días con posibilidad de extensión si los resultados son positivos',
47
+ canal: 'LinkedIn Ads como canal principal, blog/SEO como apoyo orgánico',
48
+ },
49
+ },
50
+ 'dynamic': {
51
+ flow_id: undefined,
52
+ task: process.env.TASK ?? 'Preparar un análisis de posicionamiento competitivo comparando nuestros servicios de IA con los principales competidores en LATAM',
53
+ payload: {},
54
+ },
55
+ };
56
+
57
+ // ── MCP Client (stdio) ────────────────────────────────────────────────────────
58
+
59
+ class McpClient {
60
+ constructor(serverPath) {
61
+ this._nextId = 1;
62
+ this._pending = new Map();
63
+
64
+ const env = { ...process.env };
65
+ const dotenv = path.join(__dirname, '.env');
66
+ if (fs.existsSync(dotenv)) {
67
+ for (const line of fs.readFileSync(dotenv, 'utf-8').split('\n')) {
68
+ const m = line.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*?)\s*$/);
69
+ if (m && m[2] && !(m[1] in env)) env[m[1]] = m[2].replace(/^["']|["']$/g, '');
70
+ }
71
+ }
72
+
73
+ this._proc = spawn('node', [serverPath], { stdio: ['pipe', 'pipe', 'inherit'], env });
74
+
75
+ const rl = createInterface({ input: this._proc.stdout });
76
+ rl.on('line', (line) => {
77
+ if (!line.trim()) return;
78
+ try {
79
+ const msg = JSON.parse(line);
80
+ if (msg.id !== undefined && this._pending.has(msg.id)) {
81
+ const { resolve, reject } = this._pending.get(msg.id);
82
+ this._pending.delete(msg.id);
83
+ if (msg.error) reject(new Error(msg.error.message ?? JSON.stringify(msg.error)));
84
+ else resolve(msg.result);
85
+ }
86
+ } catch {}
87
+ });
88
+
89
+ this._proc.on('error', (err) => console.error('[MCP] error:', err.message));
90
+ }
91
+
92
+ _send(msg) { this._proc.stdin.write(JSON.stringify(msg) + '\n'); }
93
+
94
+ async initialize() {
95
+ const id = this._nextId++;
96
+ const p = new Promise((res, rej) => this._pending.set(id, { resolve: res, reject: rej }));
97
+ this._send({ jsonrpc: '2.0', id, method: 'initialize', params: {
98
+ protocolVersion: '2024-11-05', capabilities: {},
99
+ clientInfo: { name: 'test-flow', version: '0.1.0' },
100
+ }});
101
+ await p;
102
+ this._send({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} });
103
+ }
104
+
105
+ async callTool(name, args) {
106
+ const id = this._nextId++;
107
+ const p = new Promise((res, rej) => {
108
+ this._pending.set(id, { resolve: res, reject: rej });
109
+ setTimeout(() => {
110
+ if (this._pending.has(id)) { this._pending.delete(id); rej(new Error(`Timeout: ${name}`)); }
111
+ }, 120_000);
112
+ });
113
+ this._send({ jsonrpc: '2.0', id, method: 'tools/call', params: { name, arguments: args } });
114
+ return p;
115
+ }
116
+
117
+ close() { this._proc.stdin.end(); }
118
+ }
119
+
120
+ // ── Helpers ───────────────────────────────────────────────────────────────────
121
+
122
+ const extractText = (r) => r?.content?.filter(c => c.type === 'text').map(c => c.text).join('\n') ?? String(r);
123
+ const sleep = (ms) => new Promise(r => setTimeout(r, ms));
124
+
125
+ function printSection(title, text) {
126
+ const line = '─'.repeat(60);
127
+ console.log(`\n${line}\n ${title}\n${line}`);
128
+ console.log(text);
129
+ }
130
+
131
+ // ── Main ──────────────────────────────────────────────────────────────────────
132
+
133
+ async function main() {
134
+ const flowKey = process.argv[2] ?? 'articulo-blog';
135
+ const flowDef = FLOWS[flowKey];
136
+ if (!flowDef) {
137
+ console.error(`Unknown flow: ${flowKey}\nOptions: ${Object.keys(FLOWS).join(', ')}`);
138
+ process.exit(1);
139
+ }
140
+ if (!fs.existsSync(SERVER_PATH)) {
141
+ console.error(`Server not found:\n ${SERVER_PATH}\nRun: npm install`);
142
+ process.exit(1);
143
+ }
144
+
145
+ console.log(`\nStarting orchestrator (marketing)...`);
146
+ console.log(` Flow: ${flowKey}`);
147
+
148
+ const client = new McpClient(SERVER_PATH);
149
+ try {
150
+ await client.initialize();
151
+ console.log(' MCP: connected ✓\n');
152
+
153
+ const runArgs = { config_path: CONFIG_PATH, task: flowDef.task };
154
+ if (flowDef.flow_id) runArgs.flow_id = flowDef.flow_id;
155
+ if (Object.keys(flowDef.payload).length > 0) runArgs.payload = flowDef.payload;
156
+
157
+ const startText = extractText(await client.callTool('orchestrator_run', runArgs));
158
+ printSection('RUN STARTED', startText);
159
+
160
+ const runIdMatch = startText.match(/runId:\s*`?([a-z0-9-]+)`?/i);
161
+ if (!runIdMatch) { console.error('\n[ERROR] Could not extract runId.'); process.exit(1); }
162
+ const runId = runIdMatch[1];
163
+
164
+ let attempts = 0, lastStatus = '';
165
+ console.log(`\nPolling (runId: ${runId})...\n`);
166
+
167
+ while (attempts < 80) {
168
+ await sleep(5000);
169
+ attempts++;
170
+
171
+ const statusText = extractText(await client.callTool('orchestrator_status', {
172
+ config_path: CONFIG_PATH, run_id: runId,
173
+ }));
174
+ const status = statusText.match(/status:\s*\*\*([^*]+)\*\*/)?.[1]
175
+ ?? statusText.match(/^status:\s*(\S+)/m)?.[1]
176
+ ?? 'unknown';
177
+
178
+ if (status !== lastStatus) {
179
+ process.stdout.write(` [${new Date().toLocaleTimeString()}] status: ${status}\n`);
180
+ lastStatus = status;
181
+ }
182
+
183
+ if (status === 'complete') { printSection('RESULT', statusText); break; }
184
+ if (status === 'failed') { printSection('ERROR', statusText); break; }
185
+
186
+ if (status === 'waiting_gate') {
187
+ printSection('GATE — APPROVAL REQUIRED', statusText);
188
+ console.log('\nAuto-approving...\n');
189
+ await sleep(2000);
190
+ const approveText = extractText(await client.callTool('orchestrator_approve', {
191
+ config_path: CONFIG_PATH, run_id: runId,
192
+ approved: true, notes: 'Auto-approved by test-flow.mjs',
193
+ }));
194
+ printSection('GATE APPROVED', approveText);
195
+ lastStatus = '';
196
+ }
197
+ }
198
+
199
+ if (attempts >= 80) console.log('\n[TIMEOUT] Check orchestrator_status manually.');
200
+ } finally {
201
+ client.close();
202
+ }
203
+ }
204
+
205
+ main().catch(err => { console.error('\n[FATAL]', err.message); process.exit(1); });
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Buyer Personas
3
+ tags: [audiencia, personas, icp, segmento, decision-maker]
4
+ description: Perfiles detallados de los compradores ideales para servicios de software consulting
5
+ ---
6
+
7
+ # Buyer Personas
8
+
9
+ ## Persona 1 — "El CTO Pragmático"
10
+
11
+ **Nombre representativo:** Martín, 38 años
12
+ **Cargo:** CTO / VP de Ingeniería
13
+ **Empresa:** Scale-up o empresa mediana (50-300 empleados), sector tech o retail tech
14
+
15
+ ### Contexto
16
+ Lidera un equipo de 8-25 devs. Tiene deuda técnica acumulada y el negocio le exige velocidad. Conoce las tecnologías, evalúa propuestas técnicamente y detesta el overselling.
17
+
18
+ ### Dolores principales
19
+ - Stack legacy que frena la velocidad del equipo
20
+ - No puede escalar el equipo suficientemente rápido
21
+ - Presión del CEO/board para lanzar features antes de que el equipo esté listo
22
+
23
+ ### Qué valora en un proveedor
24
+ - Que hablen su idioma (conversaciones técnicas reales, no PowerPoints)
25
+ - Referencias verificables de proyectos similares
26
+ - Transparencia sobre riesgos y limitaciones
27
+
28
+ ### Canales donde está
29
+ - LinkedIn (contenido técnico: arquitectura, DevOps)
30
+ - Blogs técnicos, newsletters como The Pragmatic Engineer
31
+ - Comunidades: Slack de CTOs, meetups técnicos locales
32
+
33
+ ### Mensaje que resuena
34
+ "Cómo pasamos de X a Y sin tirar todo" — modernización con continuidad de negocio.
35
+
36
+ ---
37
+
38
+ ## Persona 2 — "El CEO de Startup en Crecimiento"
39
+
40
+ **Nombre representativo:** Valentina, 35 años
41
+ **Cargo:** CEO / Co-founder
42
+ **Empresa:** Startup B2B SaaS, Series A/B, 20-80 empleados
43
+
44
+ ### Contexto
45
+ Levantó ronda, necesita escalar el producto rápido. El equipo técnico es bueno pero pequeño. Necesita ayuda externa pero tiene miedo de perder control del producto.
46
+
47
+ ### Dolores principales
48
+ - Velocidad de desarrollo insuficiente para el timeline del inversor
49
+ - Un proveedor anterior entregó código que nadie en el equipo entiende hoy
50
+
51
+ ### Qué valora en un proveedor
52
+ - Resultados rápidos y medibles (ROI claro)
53
+ - Comunicación proactiva
54
+ - Flexibilidad (escalar/reducir el equipo)
55
+
56
+ ### Canales donde está
57
+ - LinkedIn (liderazgo, startups, growth)
58
+ - Twitter/X (comunidad tech startup, founders)
59
+
60
+ ### Mensaje que resuena
61
+ "Cómo otros founders lograron X en Y tiempo" — velocidad y resultados concretos.
62
+
63
+ ---
64
+
65
+ ## Persona 3 — "El Director de Transformación Digital"
66
+
67
+ **Nombre representativo:** Roberto, 45 años
68
+ **Cargo:** Director de Innovación / CTO / CDO
69
+ **Empresa:** Empresa tradicional (manufacturing, retail, servicios) con 200-2000 empleados
70
+
71
+ ### Contexto
72
+ Mandato de digitalizar la empresa. Tiene presupuesto pero muchos stakeholders internos. Viene del negocio, no de tecnología.
73
+
74
+ ### Dolores principales
75
+ - Resistencia interna al cambio
76
+ - Proyectos anteriores que duraron el doble y costaron el triple
77
+
78
+ ### Qué valora en un proveedor
79
+ - Que expliquen las cosas en términos de negocio, no de tecnología
80
+ - Metodología probada y referencias
81
+
82
+ ### Canales donde está
83
+ - LinkedIn (transformación digital, casos de éxito)
84
+ - Eventos de industria
85
+
86
+ ### Mensaje que resuena
87
+ "Cómo empresas como la tuya lograron la transformación sin disrumpir el negocio" — metodología y bajo riesgo.
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: Estrategia de Canales de Marketing
3
+ tags: [canales, linkedin, blog, email, seo, eventos, estrategia]
4
+ description: Qué rol cumple cada canal en el funnel y cómo priorizarlos
5
+ ---
6
+
7
+ # Estrategia de Canales de Marketing
8
+
9
+ ## Rol de cada canal en el funnel
10
+
11
+ | Canal | Etapa | Objetivo | Métrica clave |
12
+ |-------|-------|----------|---------------|
13
+ | Blog / SEO | Awareness + Consideración | Atraer tráfico orgánico calificado | Visitas orgánicas |
14
+ | LinkedIn Orgánico | Awareness + Marca | Posicionamiento como referentes técnicos | Engagement rate |
15
+ | LinkedIn Ads | Consideración + Conversión | Generar leads de ICP específico | CPL |
16
+ | Email / Newsletter | Nurturing + Retención | Mantener relación con leads y clientes | Open rate, CTR |
17
+ | Webinars / Eventos | Consideración + Conversión | Demos de expertise y generación de MQL | Conversión a reunión |
18
+ | Referidos | Conversión | Mejor fuente de leads de calidad | % nuevos clientes por referido |
19
+
20
+ ---
21
+
22
+ ## LinkedIn — Canal principal
23
+
24
+ ### Estrategia orgánica
25
+ - **Frecuencia mínima:** 2-3 posts por semana desde perfiles personales del equipo
26
+ - **Quién publica:** CEO (estrategia y visión), CTO (contenido técnico), AEs (casos y resultados)
27
+ - **Formato que mejor funciona:** texto largo nativo (sin link en el post), carruseles, encuestas
28
+
29
+ ### LinkedIn Ads
30
+ - **Formato principal:** Sponsored Content y Message Ads para retargeting
31
+ - **Segmentación:** cargo (CTO, VP Engineering, CEO), industria (tech, retail, fintech), tamaño empresa (50-500)
32
+ - **Presupuesto mínimo efectivo:** $1.500/mes para resultados medibles
33
+ - **CPL objetivo:** < $80 USD
34
+
35
+ ---
36
+
37
+ ## Blog y SEO — Motor de largo plazo
38
+
39
+ - **Frecuencia:** 2 artículos por mes (calidad > cantidad)
40
+ - **Keywords por categoría:**
41
+ - Cloud & DevOps: migración cloud, kubernetes consultant, CI/CD implementation
42
+ - Desarrollo: software development company, nearshore development, staff augmentation
43
+ - Data: data engineering services, data warehouse implementation
44
+ - IA: AI integration services, LLM integration, RAG implementation
45
+ - **Métricas objetivo:** 200 visitas orgánicas en mes 3 post-publicación; 500+ visitas/mes artículos establecidos
46
+
47
+ ---
48
+
49
+ ## Referidos — Canal de mayor conversión
50
+
51
+ - Los clientes referidos cierran 4x más rápido que leads inbound
52
+ - El ciclo de venta es 50% más corto
53
+ - Preguntar activamente a clientes satisfechos después de un hito exitoso
@@ -0,0 +1,71 @@
1
+ ---
2
+ title: Tipos de Contenido y Formatos
3
+ tags: [contenido, formatos, blog, case-study, whitepaper, video, calendario]
4
+ description: Catálogo de tipos de contenido, cuándo usarlos y cómo producirlos
5
+ ---
6
+
7
+ # Tipos de Contenido y Formatos
8
+
9
+ ## Jerarquía de contenido (Content Pillar Strategy)
10
+
11
+ Un artículo largo (2000+ palabras) genera:
12
+ - 3 posts de LinkedIn (puntos clave)
13
+ - 1 hilo de Twitter
14
+ - 1 email para newsletter
15
+ - Infografía o carrusel de LinkedIn
16
+
17
+ ---
18
+
19
+ ## Artículos de Blog
20
+
21
+ | Tipo | Objetivo | Longitud | Frecuencia |
22
+ |------|----------|----------|-----------|
23
+ | How-to técnico | SEO + educar al ICP | 1500-2500 palabras | 1/mes |
24
+ | Guía definitiva | SEO pilar + autoridad | 3000-5000 palabras | 1/trimestre |
25
+ | Caso de uso | Conversión | 1000-1500 palabras | 1/mes |
26
+ | Opinión/perspectiva | Marca + LinkedIn | 600-1000 palabras | 1/mes |
27
+ | Comparativa técnica | SEO + consideración | 2000-3000 palabras | 1/trimestre |
28
+
29
+ ### Estructura que funciona
30
+ 1. **Hook** (primer párrafo): dato sorprendente, pregunta provocadora, o afirmación contrarian
31
+ 2. **Contexto del problema**: por qué este tema importa hoy
32
+ 3. **Desarrollo** con subtítulos claros, ejemplos concretos, código si aplica
33
+ 4. **Lecciones aprendidas** o errores comunes
34
+ 5. **Conclusión** con el takeaway principal
35
+ 6. **CTA** claro y relevante al contexto del artículo
36
+
37
+ ---
38
+
39
+ ## Lead Magnets
40
+
41
+ | Lead Magnet | Persona | Conversión típica |
42
+ |------------|---------|------------------|
43
+ | Checklist técnica (ej: "20 puntos para auditar tu arquitectura cloud") | CTO Pragmático | Alta |
44
+ | Template / Framework (ej: "Template para RFP de software development") | Director de TD | Alta |
45
+ | Mini-guía PDF (ej: "Cómo evaluar si necesitás staff augmentation") | CEO Startup | Media |
46
+ | Webinar grabado | Todos | Media |
47
+
48
+ ### Reglas para lead magnets
49
+ - Consumibles en menos de 15 minutos
50
+ - Resuelven UN problema concreto
51
+ - Pedir solo nombre, email y empresa en el formulario
52
+
53
+ ---
54
+
55
+ ## Contenido para LinkedIn
56
+
57
+ **Post de lanzamiento de artículo:**
58
+ ```
59
+ [Hook: dato impactante o pregunta provocadora]
60
+ [2-3 párrafos con los insights principales]
61
+ [Cierre con reflexión o invitación a debatir]
62
+ Link en los comentarios
63
+ ```
64
+
65
+ **Post de perspectiva personal:**
66
+ ```
67
+ [Opinión directa que puede ser contrarian]
68
+ [Evidencia o historia que la soporta]
69
+ [Concesión: cuándo no aplica]
70
+ [Pregunta para generar comentarios]
71
+ ```
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: Guía de Tono y Voz de Marca
3
+ tags: [marca, tono, voz, comunicacion, estilo, copy]
4
+ description: Guía completa de cómo se comunica la empresa en todos sus canales
5
+ ---
6
+
7
+ # Tono y Voz de Marca
8
+
9
+ ## Identidad de marca en una frase
10
+
11
+ **"Somos el equipo técnico que te faltaba — directos, honestos, y obsesionados con que funcione."**
12
+
13
+ ---
14
+
15
+ ## Los 4 pilares del tono
16
+
17
+ ### 1. Directo, no pomposo
18
+ Sin buzzwords vacíos, sin frases que suenen a PowerPoint de McKinsey.
19
+
20
+ **Sí:** "Migramos tu stack a cloud en 6 meses sin parar el negocio."
21
+ **No:** "Habilitamos soluciones cloud-native de próxima generación alineadas a tu transformación digital."
22
+
23
+ ### 2. Técnico, no críptico
24
+ Sabemos de arquitectura, performance y DevOps, pero siempre traducimos al impacto de negocio.
25
+
26
+ **Sí:** "Redujimos el tiempo de deploy de 2 horas a 8 minutos — eso es 15 releases por semana en lugar de 2."
27
+ **No:** "Implementamos pipelines CI/CD con integración de contenedores orquestados en Kubernetes."
28
+
29
+ ### 3. Honesto sobre los límites
30
+ Preferimos perder un negocio antes de prometer algo que no podemos cumplir.
31
+
32
+ ### 4. Orientado a resultados, no a actividad
33
+ No hablamos de cuántas horas trabajamos. Hablamos de qué cambió en el negocio del cliente.
34
+
35
+ ---
36
+
37
+ ## Adaptación por canal
38
+
39
+ | Canal | Tono | Notas |
40
+ |-------|------|-------|
41
+ | Blog | Técnico pero accesible | Párrafos ≤ 4 líneas, evitar intro genérica |
42
+ | LinkedIn | Directo, ligeramente personal | Primer hook en las primeras 2 líneas, link en comentarios |
43
+ | Email | Personal, de colega a colega | 1 idea principal, 1 CTA, subject concreto |
44
+ | Propuestas | Profesional pero humano | Sin "nos complace presentar", lenguaje activo |
45
+
46
+ ## Palabras que usamos / evitamos
47
+
48
+ **Usamos:** construimos, desarrollamos, equipo (no "recursos"), entregamos resultados
49
+ **Evitamos:** soluciones innovadoras, ecosistema, sinergia, holístico, disruptivo, best-in-class
@@ -0,0 +1,72 @@
1
+ ---
2
+ title: KPIs y Benchmarks de Marketing
3
+ tags: [kpis, metricas, benchmarks, roi, cpl, cac, ltv, campanas]
4
+ description: Métricas clave, benchmarks por canal y fórmulas para evaluar el ROI de marketing
5
+ ---
6
+
7
+ # KPIs y Benchmarks de Marketing
8
+
9
+ ## Métricas de negocio
10
+
11
+ ### CPL — Costo por Lead
12
+
13
+ | Canal | CPL objetivo | CPL máximo aceptable |
14
+ |-------|-------------|---------------------|
15
+ | LinkedIn Ads | $60-80 USD | $120 USD |
16
+ | Google Ads (search) | $40-60 USD | $100 USD |
17
+ | Contenido orgánico/SEO | $5-20 USD | $40 USD |
18
+ | Webinars propios | $30-50 USD | $80 USD |
19
+ | Referidos | $10-20 USD | $50 USD |
20
+
21
+ ### CAC — Costo de Adquisición de Cliente
22
+ - **CAC objetivo:** < $2.000 USD
23
+ - **CAC máximo aceptable:** $4.000 USD
24
+
25
+ ### LTV — Lifetime Value
26
+ - Ticket promedio primer contrato: $45.000 USD
27
+ - Tasa de renovación: 65%
28
+ - LTV promedio (2-3 proyectos en 3 años): $80.000-120.000 USD
29
+
30
+ ### Ratio LTV:CAC objetivo
31
+ - Mínimo aceptable: 10:1 | Objetivo: 20:1 o más
32
+
33
+ ### Tasa de conversión por etapa del funnel
34
+
35
+ | Etapa | Tasa objetivo |
36
+ |-------|--------------|
37
+ | Lead → MQL | > 40% |
38
+ | MQL → SQL (agendó reunión) | > 35% |
39
+ | SQL → Propuesta enviada | > 65% |
40
+ | Propuesta → Cliente ganado | > 25% |
41
+ | Lead → Cliente | > 6% |
42
+
43
+ ---
44
+
45
+ ## Métricas operativas por canal
46
+
47
+ ### LinkedIn Ads
48
+ - CTR sponsored content objetivo: > 0.5%
49
+ - Tasa de conversión landing: > 12%
50
+ - CPC objetivo: < $12 USD
51
+
52
+ ### Google Ads
53
+ - CTR objetivo: > 5%
54
+ - Tasa de conversión landing: > 8%
55
+
56
+ ### Email Marketing
57
+ - Tasa de apertura objetivo: > 30%
58
+ - CTR objetivo: > 4%
59
+ - Tasa de baja máxima: < 0.3%
60
+
61
+ ---
62
+
63
+ ## Dashboard semanal recomendado
64
+
65
+ **Pipeline de leads:** leads nuevos por canal, MQLs generados, reuniones agendadas
66
+ **Contenido:** posts publicados, engagement LinkedIn, visitas al blog
67
+ **Campañas activas:** inversión vs presupuesto, CPL de la semana, CTR
68
+
69
+ **Semáforo CPL:**
70
+ - CPL < objetivo → escalar
71
+ - CPL entre objetivo y máximo → optimizar
72
+ - CPL > máximo → pausar y revisar
@@ -0,0 +1,65 @@
1
+ ---
2
+ title: Proceso y Calendario Editorial
3
+ tags: [proceso, calendario, editorial, contenido, aprobacion, publicacion]
4
+ description: Proceso de creación y aprobación de contenido, calendario base y responsabilidades
5
+ ---
6
+
7
+ # Proceso y Calendario Editorial
8
+
9
+ ## Proceso de creación
10
+
11
+ | Etapa | Responsable | Tiempo estándar |
12
+ |-------|-------------|-----------------|
13
+ | Ideación y propuesta de tema | Content Strategist | 1 día |
14
+ | Brief editorial | Content Strategist | 1 día |
15
+ | Redacción primer borrador | Copywriter | 2-3 días |
16
+ | Revisión técnica | Tech Lead del equipo | 1 día |
17
+ | Optimización SEO | SEO Specialist | 1 día |
18
+ | Aprobación final | CEO o Director de Mkt | 1 día |
19
+ | Publicación y SEO técnico | Web/Content Manager | 0.5 días |
20
+ | Distribución en canales | Social Media Manager | 1 día |
21
+
22
+ **Tiempo total promedio:** 8-10 días hábiles
23
+
24
+ ---
25
+
26
+ ## Criterios de selección de temas
27
+
28
+ Priorizamos temas que cumplen al menos 2 de 3 criterios:
29
+ 1. **Demanda de búsqueda** — keyword con volumen > 100 búsquedas/mes en LATAM
30
+ 2. **Relevancia para el ICP** — duda o problema real de CTO, CEO startup o Director TD
31
+ 3. **Autoridad propia** — tenemos experiencia directa y perspectiva única
32
+
33
+ ---
34
+
35
+ ## Calendario editorial base
36
+
37
+ | Canal | Frecuencia | Día recomendado |
38
+ |-------|-----------|----------------|
39
+ | Blog | 2 artículos/mes | Martes o miércoles |
40
+ | LinkedIn (empresa) | 3 veces/semana | Martes, jueves, viernes |
41
+ | LinkedIn (equipo) | 2-3 veces/semana | Variable |
42
+ | Newsletter | Quincenal | Martes, 9-10hs |
43
+
44
+ ---
45
+
46
+ ## Reglas de publicación en LinkedIn
47
+
48
+ **Siempre:**
49
+ - Primeras 2 líneas son el hook — deben funcionar sin ver el resto
50
+ - El link al artículo va en los **comentarios**, nunca en el cuerpo del post
51
+ - Responder TODOS los comentarios en las primeras 2 horas post-publicación
52
+ - Publicar en horario pico: martes-jueves entre 8-10hs o 17-19hs
53
+
54
+ **Nunca:**
55
+ - Publicar el mismo post en distintos perfiles el mismo día
56
+ - Hacer "engagement bait" ("comenta SÍ si estás de acuerdo")
57
+ - Usar más de 5 hashtags
58
+
59
+ ---
60
+
61
+ ## Repurposing
62
+
63
+ Un artículo bien escrito puede generar: 3 posts de LinkedIn + 1 hilo de Twitter + 1 email de newsletter + 1 carrusel de LinkedIn + respuestas a preguntas en comunidades.
64
+
65
+ **Regla:** antes de crear contenido nuevo, preguntar si hay algo existente que se pueda actualizar o reutilizar.