# Presupuesto — Motor de contenido (Módulo C)

**Fecha:** 6 de agosto de 2026 · **Validez de la oferta:** 30 días
**Base:** auditoría técnica del repositorio `kynda-poc`
**Unidad:** jornada de desarrollo efectiva · **Tarifa:** 450 €/jornada
**Relación con otros documentos:** bloque independiente. No sustituye al presupuesto de remediación crítica, que debe ejecutarse antes o en paralelo.

---

## 1. Punto de partida

El modelo de datos y el de permisos ya están hechos. Lo que falta es el motor.

**Ya construido y aprovechable**

| Pieza | Estado |
|---|---|
| Tabla `generated_content` | Lista: red, formato, texto, hashtags, URL del recurso, estado |
| Tabla `share_event` | Lista, con campo `proof_url` previsto para la prueba de publicación |
| Permisos por campaña (`SocialConfig`) | Definidos: si el usuario puede cambiar imagen, texto o hashtags, y qué redes se activan |
| Modos de compartición | Previstos tres: corporativo, híbrido y libre |
| Consentimiento de uso de imagen | Existe como tipo de consentimiento con registro y fecha |
| Botón de compartir nativo | Funciona con la API del móvil |

**Lo que hay hoy como motor**

Una línea de código que concatena un texto fijo: *"Hoy hemos pasado tiempo en {campaña} con el equipo de {marca}"*. El comentario del propio código lo llama *stub*. Nunca genera imagen. Y lo que escribe en la base de datos no lo lee nadie: la galería es una ruta que solo redirige.

---

## 2. Base del motor (común a las tres opciones)

### C0 — Diseño y decisiones previas

| Contenido | Jornadas |
|---|---|
| Plantillas por red y formato con áreas seguras para logo, foto y texto (trabajo conjunto con diseño) | 1–1,5 |
| Guía de tono por marca como dato configurable en la campaña (hoy no existe) | 0,5 |
| Diseño de prompts, criterios de calidad y elección de modelo con medición de coste real | 0,5–1 |
| **Subtotal** | **2–3** |

### C1 — Generación de texto con modelo de lenguaje

| Contenido | Jornadas |
|---|---|
| Cliente de API con reintentos, tiempos de espera y control de coste por tenant | 1–1,5 |
| Composición del prompt con contexto real: campaña, acción, ONG, lo que escribió el participante y los KPIs de esa jornada | 1–1,5 |
| Variantes por red (LinkedIn no escribe como TikTok) y por modo de compartición | 1–1,5 |
| Ejecución asíncrona en cola: si la generación falla, la aprobación de la evidencia no se bloquea nunca | 0,5–1 |
| Versionado en `generated_content` y tests | 0,5 |
| **Subtotal** | **4–6** |

### C2 — Composición de la imagen

| Contenido | Jornadas |
|---|---|
| Motor de render en servidor a partir de plantillas, con salida en vertical 9:16 y cuadrado 1:1 | 2–3 |
| Inserción de la foto real del participante, logo de marca y texto respetando las áreas seguras | 1,5–2 |
| Tratamiento de fotos que no encajan: orientación, recortes, formatos de móvil | 0,5–1 |
| Subida a almacenamiento, URL de descarga y política de retención | 1 |
| **Subtotal** | **5–7** |

> No se usa generación de imagen por IA. Lo que una marca quiere es su plantilla con la foto real dentro, no una imagen inventada. Cuesta menos, es controlable y encaja con el discurso de personas reales.

### C3 — Moderación y aprobación

| Contenido | Jornadas |
|---|---|
| Comprobación automática de contenido sensible sobre la foto: caras de terceros, menores, datos visibles | 1,5–2 |
| Circuito de aprobación por la marca cuando la campaña lo exija, apoyado en los permisos ya definidos | 1–1,5 |
| Registro de cada decisión en el log de auditoría | 0,5 |
| **Subtotal** | **3–4** |

### C4 — Galería y biblioteca

| Contenido | Jornadas |
|---|---|
| Biblioteca por campaña en el panel de marca (hoy la ruta solo redirige) | 1–1,5 |
| Vista del participante con sus piezas y descarga por formato | 1–1,5 |
| **Subtotal** | **2–3** |

### Subtotal de la base

| | Jornadas | Importe |
|---|---|---|
| **C0 + C1 + C2 + C3 + C4** | **16 – 23** | **7.200 – 10.350 €** |

---

## 3. La decisión que condiciona el alcance

El pliego original describía un mecanismo de bloqueo: la cadena no avanza hasta que el participante comparte el contenido. Es el motor viral de todo el concepto, y hoy no existe.

El problema no es de programación, es de las plataformas. No se puede comprobar que alguien ha publicado algo sin integrarse con la API de cada red, y esas APIs son restrictivas con las cuentas personales. De ahí las tres opciones.

### Opción A — Exportación manual

El participante descarga la pieza y publica por su cuenta. Al pulsar compartir se registra la intención.

| Contenido | Jornadas |
|---|---|
| Compartir la pieza completa (imagen y texto) por la API nativa del móvil | 0,5–1 |
| Registro declarativo del evento y métrica de compartidos | 1 |
| **Subtotal** | **1,5 – 2** |

Qué implica: no hay forma de saber si publicó. El bloqueo de la cadena sería honor system, es decir, un botón de "ya lo he compartido". Es lo que hay hoy en la práctica.

### Opción B — Prueba por captura *(recomendada)*

Igual que A, pero el participante sube una captura de su publicación y esa prueba queda registrada.

| Contenido | Jornadas |
|---|---|
| Todo lo de la opción A | 1,5–2 |
| Subida de la captura al campo de prueba ya previsto en el modelo | 0,5–1 |
| Cola ligera de verificación de pruebas, reutilizando el patrón de validación de evidencias | 1–1,5 |
| **Subtotal** | **3 – 4** |

Qué implica: el bloqueo de la cadena pasa a ser defendible. Funciona igual en todas las redes, no depende de ninguna plataforma y no hay que esperar aprobaciones de nadie. Añadir verificación asistida de la captura con el modelo de visión es un incremento pequeño sobre lo ya construido en C3.

### Opción C — Publicación directa

La plataforma publica en nombre del usuario.

| Contenido | Jornadas |
|---|---|
| Todo lo de la opción B, que sigue siendo necesario como alternativa | 3–4 |
| Autorización por usuario, almacenamiento seguro de credenciales y renovación de sesiones | 2–3 |
| Integración de publicación en LinkedIn | 2,5–3,5 |
| Gestión de errores, reintentos y estados de publicación | 1,5–2,5 |
| **Subtotal** | **9 – 13** |

Qué implica, y conviene decirlo antes de presupuestarlo:

- **LinkedIn es viable.** Su API de publicación funciona con cuentas personales.
- **Instagram no lo es en la práctica.** Su API de publicación exige cuenta de empresa o creador vinculada a una página de Facebook. Un empleado de EasyFairs no la tiene. Para cuentas personales normales, no hay camino.
- **TikTok es prácticamente inviable.** Requiere auditoría de la aplicación y su API de publicación tiene condiciones muy restrictivas.

Es decir: la opción C es, realistamente, **publicación directa solo en LinkedIn**, con las otras redes cayendo a la opción B. Y hay que contar con **semanas de calendario** esperando la revisión de la aplicación por parte de LinkedIn, que no son jornadas de trabajo pero sí retrasan la entrega.

---

## 4. Resumen económico

| Alcance | Jornadas | Importe |
|---|---|---|
| Base del motor (C0–C4) | 16 – 23 | 7.200 – 10.350 € |
| **Total con opción A** — exportación manual | **17,5 – 25** | **7.875 – 11.250 €** |
| **Total con opción B** — prueba por captura *(recomendada)* | **19 – 27** | **8.550 – 12.150 €** |
| **Total con opción C** — publicación directa en LinkedIn | **25 – 36** | **11.250 – 16.200 €** |

Cifras de referencia para cierre: **opción A, 21 jornadas, 9.450 €** · **opción B, 23 jornadas, 10.350 €** · **opción C, 30 jornadas, 13.500 €**.

### Calendario

Con un desarrollador senior a dedicación completa: entre 4 y 5 semanas para las opciones A o B, y entre 6 y 7 para la C, más la espera por la revisión de LinkedIn.

### Coste de operación

El gasto en inferencia es despreciable frente al precio de los planes: céntimos por pieza generada, en línea con lo ya calculado para la verificación. Con diez mil piezas al año, el coste anual de modelo se mide en cientos de euros, no en miles. El coste real de este módulo está en la composición visual y en la moderación, que es justo donde se suele estimar de menos.

---

## 5. Mi recomendación

**Opción B.** Es el punto de equilibrio y lo argumento en tres frentes.

Frente a la A, aporta lo único que el concepto de Kynda necesita de verdad: que el bloqueo de la cadena sea defendible ante la marca que paga. Una cadena que avanza porque alguien pulsó "ya lo compartí" no es un motor de earned media, es una casilla de verificación.

Frente a la C, cuesta la mitad, se entrega antes y no queda atada a decisiones de Meta o de ByteDance. La publicación directa solo cubriría LinkedIn, que es la red menos relevante para el contenido de voluntariado con foto, y obligaría igualmente a construir la opción B como alternativa para el resto.

La opción C tiene sentido más adelante, cuando haya volumen que justifique la fricción, y como argumento comercial para clientes corporativos donde LinkedIn sí es la red principal.

---

## 6. Supuestos y exclusiones

**Supuestos**
- Las plantillas visuales las aporta diseño o se derivan del sistema de diseño existente. Aquí se presupuesta la implementación, no la creación gráfica desde cero.
- El contenido regulatorio y de tono lo valida Kynda. La plataforma lo hace configurable.
- El consentimiento de uso de imagen ya existe en el modelo y se reutiliza.

**Excluido**
- Creación de identidad visual o plantillas gráficas nuevas.
- Generación de vídeo. El pliego mencionaba *generative media*; lo presupuestado es imagen fija y texto. El vídeo generado es otro proyecto, con otro coste y otra madurez tecnológica.
- Métricas de alcance real y valor equivalente en medios. Requieren integración con las analíticas de cada red y dependen de la opción de publicación elegida.
- Publicación directa en Instagram y TikTok, por las limitaciones de sus APIs descritas en el apartado 3.
