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.
- package/README.md +2 -0
- package/dist/src/index.js +24 -1
- package/dist/src/prompts.js +34 -0
- package/dist/src/scaffold.js +57 -0
- package/package.json +1 -1
- package/templates/base/orchestrator/_common/.env.example +14 -0
- package/templates/base/orchestrator/_common/package.json +16 -0
- package/templates/base/orchestrator/blank/flows/.gitkeep +0 -0
- package/templates/base/orchestrator/blank/orchestrator.yaml +34 -0
- package/templates/base/orchestrator/blank/vault/lecciones/.gitkeep +0 -0
- package/templates/base/orchestrator/marketing/flows/articulo-blog.yaml +97 -0
- package/templates/base/orchestrator/marketing/flows/campana-leads.yaml +115 -0
- package/templates/base/orchestrator/marketing/orchestrator.yaml +92 -0
- package/templates/base/orchestrator/marketing/test-flow.mjs +205 -0
- package/templates/base/orchestrator/marketing/vault/audiencia/buyer-personas.md +87 -0
- package/templates/base/orchestrator/marketing/vault/canales/estrategia-canales.md +53 -0
- package/templates/base/orchestrator/marketing/vault/contenido/tipos-de-contenido.md +71 -0
- package/templates/base/orchestrator/marketing/vault/lecciones/.gitkeep +0 -0
- package/templates/base/orchestrator/marketing/vault/marca/tono-y-voz.md +49 -0
- package/templates/base/orchestrator/marketing/vault/metricas/kpis-y-benchmarks.md +72 -0
- package/templates/base/orchestrator/marketing/vault/procesos/calendario-editorial.md +65 -0
- package/templates/base/orchestrator/ventas/flows/calificacion-lead.yaml +113 -0
- package/templates/base/orchestrator/ventas/flows/propuesta-comercial.yaml +179 -0
- package/templates/base/orchestrator/ventas/orchestrator.yaml +93 -0
- package/templates/base/orchestrator/ventas/test-flow.mjs +207 -0
- package/templates/base/orchestrator/ventas/vault/lecciones/.gitkeep +0 -0
- package/templates/base/orchestrator/ventas/vault/politicas/condiciones-comerciales.md +65 -0
- package/templates/base/orchestrator/ventas/vault/procesos/calificacion-bant.md +50 -0
- package/templates/base/orchestrator/ventas/vault/procesos/ciclo-venta.md +61 -0
- package/templates/base/orchestrator/ventas/vault/productos/catalogo-servicios.md +103 -0
- 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
|
+
```
|
|
File without changes
|
|
@@ -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.
|