Mate & Build/Builds/Cómo el equipo de Pedidos Ya pasó de días a 10 minutos en la creación de emails de marketing
Mate & Build #03Post

Cómo el equipo de Pedidos Ya pasó de días a 10 minutos en la creación de emails de marketing

Participante
Manuela Fernández del Tejo
Empresa
Pedidos Ya
Duración
3 horas
Fecha
Abril 2026
Herramientas
Claude CodeBrazeSelf-modifying prompts
Días
Antes
10 minutos
Después
De días a 10 minutos
Cómo el equipo de Pedidos Ya pasó de días a 10 minutos en la creación de emails de marketing

Manu llegó a Mate & Build sin ninguna expectativa. Su equipo tardaba días en crear un email de marketing — desde la idea hasta el HTML final listo para Braze por el dinamismo del día a día y la cantidad países. Tres horas después, lo hacían en 10 minutos. Esto es lo que construimos, por qué lo armamos así, y qué se rompió en el camino.

"Armar un email nos lleva días y pasa por 3 equipos"

Manuela Fernández del Tejo trabaja como Fintech Marketing Strategist en PedidosYa, manejando brand, content y media. Su dolor era concreto: crear un email marketing para Braze requería coordinar contenido, diseño y maquetado HTML — un pipeline que consumía días entre idas y vueltas con distintas áreas.

Llegó a Mate & Build — las sesiones semanales de problem-solving con AI que organiza Patricio Iturraspe — con 3 problemas. Uno era demasiado complejo para 3 horas. Nos enfocamos en los 2 que compartían el mismo eje: la creación de emails en Braze.

Lo que me dijo al sentarse fue honesto: no le tenía nada de fe. Cero expectativa.

El pipeline completo era el problema, no la redacción

Cuando nos sentamos a desarmar el proceso paso a paso, apareció lo que el ritmo del día a día nunca deja ver. No era solo redactar el contenido. Era pensar la estructura, escribir para múltiples segmentos con variables dinámicas de Braze, convertir todo a HTML production-ready compatible con Outlook, Gmail y Apple Mail — con condicionales MSO, VML para botones, responsive design — y cargar todo con los custom attributes correctos.

Cada pieza de ese proceso vivía en una persona o equipo distinto. Ahí se iba el tiempo.

La pregunta dejó de ser "cómo automatizamos la escritura" y pasó a ser "cómo armamos un sistema que cubra el pipeline completo y que mejore solo con el uso".

Por qué 2 skills separados y no un pipeline monolítico

La decisión de diseño más importante fue separar responsabilidades. Podríamos haber armado un solo skill que tomara un brief y escupiera un HTML. Elegimos no hacerlo por una razón práctica: cuando algo falla en un monolito, no sabés dónde se rompió.

Dos skills en Claude Code y un reference file permanente.

email-drafter redacta el contenido en texto plano estructurado — HERO + CUERPO + CTA. Soporta múltiples segmentos y variables dinámicas de Braze. Output limpio: solo lo que dice el mail, sin HTML, sin diseño.

email-to-html toma ese texto plano y lo convierte en HTML production-ready. Tablas para layout, inline styles, condicionales MSO para Outlook, VML para botones CTA, responsive con media queries. La estructura tiene 10 rows: logo, hero con versiones mobile/desktop, cuerpo, tagline, cards, cierre, ayuda y footer.

html-structure-reference no es un skill — es un reference file permanente. Documenta la estructura HTML como patrones (~3k tokens) en vez de pegar HTMLs reales de producción (~10-15k tokens). Los dos skills lo consultan como fuente de verdad para colores, assets y especificaciones de cada componente.

Si el contenido está bien pero el HTML sale mal, solo tocás el skill 2. Si agregás un segmento nuevo, solo tocás el skill 1. No rompés lo que ya funciona.

7 iteraciones fallidas fueron la parte más valiosa

Acá viene la parte que nadie cuenta.

Las primeras iteraciones no funcionaban. Los custom attributes de Braze se mapeaban mal, el HTML salía roto, la estructura no respetaba las especificaciones. Fueron casi 7 iteraciones hasta lograr un mail production-ready. Cada una enseñó algo que las anteriores no podían mostrar.

Y el error más revelador: al principio le dimos el template de referencia en PDF. Parecía lógico — es el formato en el que el equipo lo tenía. Pero Claude Code no podía parsear bien la estructura desde un PDF. Los estilos se perdían, la jerarquía de rows se confundía, los componentes no se distinguían.

Recién cuando le dimos templates HTML reales como referencia, la calidad del output subió drásticamente. La lección es un patrón que aplica a cualquier skill: la calidad de lo que le das como referencia define exponencialmente la calidad de lo que sale. Un PDF "se parece" al resultado final pero no tiene la información estructural que el sistema necesita. Un HTML tiene la verdad completa.

"Realmente no lo puedo creer. Realmente me sorprendió. Pensé que iba a solucionarme un 80%, pero la verdad que fue un 98. Increíble." — Manu

Por qué elegimos que el sistema aprenda solo

Lo que realmente separó este build de una automatización común fueron los self-modifying prompts. Podríamos haber entregado 2 skills y un reference file estáticos que funcionan bien hoy. Elegimos agregarle la capa de aprendizaje porque el valor real no está en resolver el problema de hoy — está en que el sistema resuelva mejor los problemas de mañana.

Tres archivos hacen el trabajo: prompts que se modifican solos, lessons que se acumulan, y memoria persistente. Cada vez que un skill genera un mail y tiene un error — un campo dinámico mal mapeado, un estilo que no renderiza, una estructura que rompe en Outlook — el sistema lo guarda como lesson. La próxima vez que corre, consulta esas lessons antes de generar.

No repite el mismo error dos veces.

El sistema que Manu se llevó ayer no es el mismo que va a tener en un mes. Va a ser mejor. Cada mail que genere lo entrena. Cada corrección que haga el equipo se convierte en conocimiento permanente.

De días a 10 minutos — y lo que queda

Sin el sistema: idea del mail, redacción con el equipo de contenido, diseño, maquetado HTML, carga en Braze con custom attributes. Días.

Con el sistema: idea del mail, email-drafter (2 min), email-to-html (3 min), revisión rápida, carga en Braze. 10 minutos.

Y la calidad sube porque cada skill trabaja con especificaciones precisas, no con interpretaciones de un brief. La html-structure-reference es la fuente de verdad que elimina la ambigüedad entre lo que contenido pidió y lo que desarrollo interpretó.

El tercer problema que Manu trajo — el más complejo — quedó afuera del scope. Es el próximo paso natural. También hay espacio para iterar: más templates de referencia, más lessons acumuladas, y eventualmente conectar el output directo a la API de Braze para eliminar el paso manual de carga.

Pero eso es optimización. Lo que tiene hoy ya cambió el juego.

Takeaways

  • Separar responsabilidades > monolito: 2 skills + 1 reference file donde cada pieza hace una cosa bien.
  • Referencia en el formato final, siempre: un PDF "se parece" al resultado pero un HTML tiene la verdad estructural.
  • Self-modifying prompts convierten herramientas en sistemas: lessons y memoria hacen que cada error se convierta en mejora permanente.
  • Iterar no es fallar: 7 iteraciones hasta production-ready.
  • El valor más grande es la replicabilidad: Manu se llevó la estructura para que su equipo en PedidosYa cree skills nuevos siguiendo el mismo patrón.

Conceptos aplicados acá

  • File system para IA — 2 skills + reference file en lugar de un mega-prompt monolítico.
  • Context engineering — self-modifying prompts y memoria persistente que mejoran el sistema con cada uso.
  • IA para marketing — cómo un equipo de marketing en una empresa LATAM construye su propio sistema sin depender de IT.
Recursos del build
---
name: email-drafter
description: >
  Redacta contenido de texto para emails de marketing de productos financieros.
  Genera SOLO texto plano estructurado (NO HTML). Crea emails concisos con header
  llamativo (oferta al frente), cuerpo breve con beneficio o efemeride, y CTA claro.
  Soporta multiples segmentos de audiencia y campanas custom.
  Use when the user says "email", "mail", "correo", "campana", "armar un mail",
  "redactar email", "email marketing", "crear email", "contenido de email".
argument-hint: <tipo de email o contexto de la campana>
user-invocable: true
allowed-tools: Read, Glob, Grep
---

> Este skill genera SOLO contenido de texto estructurado. Para convertirlo a HTML, usar `/email-to-html`.

## Input Check

Si `$ARGUMENTS` esta vacio o solo tiene whitespace, preguntar al usuario:
1. Que tipo de email necesita (upgrade de oferta, segmento estandar, segmento premium, u otro)
2. Si hay alguna efemeride o contexto especial para la campana
3. Si tiene datos especificos (monto, nivel de membresia, etc.)

Do NOT proceed with empty input.

Solicitud del usuario: `$ARGUMENTS`

## Step 1: Cargar contexto

Leer los archivos de referencia:
- `references/email-templates.md` — Campanas pasadas, estructura, tono, propuestas de valor
- `references/product-info.md` — Solo si se necesita info especifica del producto

> **Nota:** Adaptar las rutas a la estructura de tu proyecto. Lo importante es tener un archivo con templates de referencia y otro con informacion del producto.

## Step 2: Determinar el tipo de email

| Tipo | Cuando aplica |
|------|--------------|
| **Upgrade de Oferta** | El usuario ya tenia oferta y el monto aumento |
| **Segmento Estandar** | Usuario activo sin programa de fidelidad, con producto pre-aprobado |
| **Segmento Premium** | Usuario del programa de fidelidad, con descuento exclusivo |
| **Custom** | Efemeride, campana estacional, o contexto especial |

> **Personaliza tus segmentos:** Estos son ejemplos. Reemplaza con los segmentos reales de tu negocio.

## Step 3: Redactar el contenido

### Estructura obligatoria (3 bloques):

1. **HERO** — La oferta va al frente. Headline corto, impactante, con monto visible.
2. **CUERPO** — Maximo 2-3 oraciones. Beneficio puntual o efemeride. Empatico con el usuario.
3. **CTA** — Call-to-action directo y claro.

### Tono de voz:

- Directo y motivador, sin jerga tecnica o financiera
- Urgencia suave, nunca agresiva
- Empatico con el negocio del usuario

> **Personaliza el tono:** El ejemplo usa tratamiento informal en espanol rioplatense ("vos", "tenes", "podes"). Ajusta el registro al mercado y audiencia de tu marca.

### Variables dinamicas:

Usar variables con doble llave donde corresponda. Ejemplos:

| Variable | Descripcion |
|----------|-------------|
| `{{BUSINESS_NAME}}` | Nombre del negocio o razon social |
| `{{AMOUNT}}` | Monto de la oferta actual |
| `{{PREVIOUS_AMOUNT}}` | Monto de la oferta anterior (para upgrades) |
| `{{MEMBERSHIP_LEVEL}}` | Nivel de membresia o fidelidad |
| `{{DISCOUNT_PERCENT}}` | Porcentaje de descuento exclusivo |

> **Personaliza las variables:** Adapta los nombres de variables al sistema de envio que uses (ej: Mailchimp, SendGrid, Klaviyo). Si usas atributos custom, la sintaxis puede variar segun la plataforma.

## Step 4: Entregar en formato estructurado

Entregar el contenido en este formato exacto:

```
---
TIPO: [Upgrade de Oferta / Estandar / Premium / Custom]
SEGMENTO: [descripcion del segmento]
VARIABLES: [lista de variables usadas]
---

## HERO
- Badge: {{PRODUCT_NAME}}
- Headline: [texto del headline]
- Subline: [texto del subline, si aplica]
- CTA: [texto del boton]

## CUERPO
- Saludo: {{BUSINESS_NAME}}
- Texto: [texto principal del email]
- CTA: [texto del boton]

## TAGLINE
[frase de marca o propuesta de valor]

## BENEFICIOS — Card Izquierda
[contenido de la card izquierda]
- CTA: [texto del boton]

## BENEFICIOS — Card Derecha
[lista de beneficios o contenido de la card derecha]

## CIERRE
- Headline: [frase motivacional]
- Subline: [frase secundaria, si aplica]
- CTA: [texto del boton]

## AYUDA
[texto de cierre con link a ayuda]
```

## Step 5: Presentar y esperar aprobacion

Mostrar el contenido estructurado al usuario y preguntar:

**"Te comparto el contenido. Si lo aprobas, genero el HTML con la estructura de produccion."**

- Si el usuario aprueba (dice "dale", "ok", "aprobado", "si", "generar html", "maquetalo", o similar): invocar `/email-to-html` pasandole el contenido estructurado completo como argumento.
- Si el usuario pide cambios: ajustar el contenido segun el feedback y volver a presentar.
- NO generar HTML sin aprobacion explicita del usuario.

## Output Format

Entregar:
1. **Contenido estructurado** en el formato de arriba
2. **Resumen**: tipo, segmento, variables, propuestas de valor destacadas
3. **Pregunta de aprobacion** para disparar la conversion a HTML

NO generar HTML directamente. NO guardar archivos. Solo devolver el texto en la conversacion y esperar aprobacion.

## If Something Goes Wrong

- Si el tipo de email no esta claro, preguntar antes de redactar.
- Si faltan datos criticos (monto, segmento), preguntar.
- Si el usuario pide algo que contradice las reglas del producto, advertir y sugerir alternativa.
---
name: email-to-html
description: >
  Convierte contenido de texto estructurado de emails a HTML production-ready
  compatible con todos los email clients (Outlook, Gmail, Apple Mail).
  Usa templates HTML reales como referencia. Incluye responsive design,
  VML para Outlook, versiones mobile/desktop.
  Use when the user says "convertir a html", "pasar a html", "generar html",
  "html del email", "maquetar email", "email html", "/email-to-html".
argument-hint: <contenido estructurado del email o path al archivo>
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Bash
---

## Input Check

Si `$ARGUMENTS` esta vacio, buscar en la conversacion el ultimo contenido estructurado generado por `/email-drafter`. Si no hay contenido disponible, pedir al usuario que lo provea o que corra `/email-drafter` primero.

Contenido a convertir: `$ARGUMENTS`

## Step 1: Cargar referencia de estructura HTML

Leer la guia tecnica de estructura:
- `references/html-structure.md` — Patrones, colores, assets, componentes
- `references/email-variables.md` — Variables de contenido, sistema y links por pais/mercado

> **Nota:** Adaptar las rutas a tu proyecto. La seccion de Documentacion de Referencia al final de este documento sirve como ejemplo para crear tu `html-structure.md`.

## Step 2: Identificar el tipo de email

Desde el contenido estructurado, determinar:
- **Tipo**: Upgrade de Oferta, Estandar, Premium, o Custom
- **Segmento**: Cual es la audiencia
- **Variables**: Que variables dinamicas se usan

Esto define:
- Que imagenes de hero usar
- Que colores de cards usar
- Que tagline usar
- Si incluir subline comparativo en el hero (ej: "Antes: $X")

## Step 3: Generar el HTML

Generar un HTML completo siguiendo EXACTAMENTE la estructura de produccion documentada en `references/html-structure.md`.

### Reglas CRITICAS:

**Estructura de 10 rows:**

1. Row 1: Logo desktop (`mobile_hide`)
2. Row 2: Logo mobile (`desktop_hide`)
3. Row 3: Hero mobile (`desktop_hide`)
4. Row 4: Hero desktop (`mobile_hide`)
5. Row 5: Cuerpo (saludo + texto + CTA)
6. Row 6: Tagline
7. Row 7: Bloque de 2 cards (50/50)
8. Row 8: Cierre + CTA final
9. Row 9: Ayuda
10. Row 10: Footer

**Compatibilidad obligatoria:**

- Tablas para layout, NO divs
- Inline styles en todos los elementos
- Condicionales MSO `<!--[if mso]>` para Outlook
- VML `v:roundrect` para botones en Outlook
- Clases `mobile_hide` / `desktop_hide` para responsive
- Media query `@media (max-width:670px)` en `<style>`
- Namespaces VML en `<html>`: `xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"`

**Especificaciones tecnicas:**

| Propiedad | Valor |
|-----------|-------|
| Ancho del email | 650px |
| Font principal | `'Helvetica Neue', Helvetica, Arial, sans-serif` |
| Fondo pagina | `#f1f1f1` |
| Fondo contenido | `#ffffff` |
| Color primario (hero/cards) | `{{PRIMARY_COLOR}}` — ej: `#ff0049` |
| Color botones CTA | `{{CTA_COLOR}}` — ej: `#fa0050` |
| Color texto | `#100423` |
| Color links | `#004add` |
| Border-radius cards | 20px |
| Border-radius botones | 35px |

> **Personaliza los colores:** Reemplaza `{{PRIMARY_COLOR}}` y `{{CTA_COLOR}}` con los colores de tu marca.

**Assets:**

Configurar las URLs de los assets de tu marca:

| Asset | Placeholder | Descripcion |
|-------|-------------|-------------|
| Logo principal | `{{ASSET_LOGO}}` | Logo de la marca en header |
| Logo producto (blanco) | `{{ASSET_PRODUCT_LOGO_WHITE}}` | Logo del producto sobre fondo de color |
| Logo producto (color) | `{{ASSET_PRODUCT_LOGO_COLOR}}` | Logo del producto sobre fondo blanco |
| Check icon | `{{ASSET_CHECK_ICON}}` | Icono de check para listas de beneficios (32px) |
| Footer image | `{{ASSET_FOOTER}}` | Imagen decorativa del footer |
| Hero images | `{{ASSET_HERO_DESKTOP}}` / `{{ASSET_HERO_MOBILE}}` | Imagenes del hero por segmento |

**Variables de la plataforma de envio:**

| Variable | Placeholder | Descripcion |
|----------|-------------|-------------|
| Link de ayuda | `{{HELP_LINK}}` | URL a la seccion de ayuda |
| Unsubscribe | `{{UNSUBSCRIBE_URL}}` | URL de desuscripcion (requerido por ley) |
| CTA link | `{{CTA_LINK}}` | URL destino del boton principal |

> **Personaliza las variables:** Adapta la sintaxis al sistema de envio que uses. Por ejemplo, en algunos sistemas seria `{{${unsubscribe_url}}}` o `{unsubscribe_link}`.

## Step 4: Verificacion de assets (OBLIGATORIO)

Antes de guardar, verificar que TODOS los assets estan presentes en el HTML:

- [ ] Logo principal en Row 1 y Row 2
- [ ] Logo producto en Hero y Cards segun corresponda
- [ ] Check icon en cada beneficio listado en las cards
- [ ] Footer image en Row 10
- [ ] Hero image (desktop y mobile) en Row 3 y Row 4
- [ ] Link de unsubscribe en el footer
- [ ] Link de ayuda en Row 9

> **Bug conocido con caracteres especiales en URLs:**
> Si alguna URL de asset contiene caracteres Unicode especiales (ej: acentos, enyes), el tool Write de Claude Code puede corromper los bytes al guardar. **Solucion:** usar un placeholder temporal al escribir el archivo y luego reemplazarlo via `sed` en Bash con los bytes correctos. Verificar con `xxd` que los bytes son los esperados.

## Step 5: Guardar el archivo

Guardar el HTML en `emails/` con nombre descriptivo:
- Pattern: `emails/[tipo]-[contexto]-[fecha].html`
- Crear la carpeta `emails/` si no existe
- Si hay assets con caracteres especiales, correr los comandos de correccion del Step 4

## Output Format

Entregar:
1. **Archivo HTML guardado** en `emails/` con el path
2. **Checklist de assets**: confirmar que todas las imagenes y logos estan presentes
3. **Indicacion** de que se puede abrir en el browser para preview
4. **Resumen tecnico**: tipo, hero image, colores de cards, variables

## If Something Goes Wrong

- Si el contenido no tiene estructura clara (hero/cuerpo/cierre), pedir que se reformatee o correr `/email-drafter` primero.
- Si no se puede determinar el tipo de email, preguntar al usuario.
- Si falta la referencia `html-structure.md`, usar los patrones documentados en este skill como fallback.

Documentacion de Referencia: HTML Email Structure


Esto NO es un skill — es un documento de referencia tecnica que los skills consumen como contexto.


Por que documentar la estructura en vez de pegar el HTML directamente?


Pegar un HTML de produccion como referencia tiene varios problemas:


  1. Ruido vs. senal. Un HTML de email tiene 800-1200 lineas entre tablas anidadas, condicionales MSO, media queries y VML. El 80% es boilerplate de compatibilidad. Lo que el skill necesita saber son los patrones: que va en cada row, que colores usar segun el segmento, donde van los assets.

  1. Consumo de contexto. Un HTML completo consume ~10-15k tokens de contexto. Un documento de referencia estructurado cubre la misma informacion en ~3k tokens. Cuando el skill necesita generar un email, carga esta referencia en vez de parsear HTMLs completos — mas rapido, mas barato, mas preciso.

  1. Patrones, no instancias. Un HTML es un email especifico. La referencia captura el patron que aplica a todos los emails: la estructura de 10 rows, las variaciones por segmento, los componentes reutilizables, la paleta de colores. El skill puede generar cualquier variante sin depender de un ejemplo particular.

  1. Evolucion controlada. Cuando cambia el diseno (nuevo color, nuevo row, nuevo componente), se actualiza UN documento de referencia. Si la referencia fueran HTMLs pegados, habria que actualizar cada ejemplo y rezar que el skill interprete los cambios.

Como se complementa con HTMLs reales


Los HTMLs de produccion originales se guardan en references/html-templates/ como referencia viva. Sirven para:

  • Validar que la referencia documentada sea correcta
  • Resolver ambiguedades ("como se ve exactamente este componente?")
  • Copiar snippets especificos cuando hace falta

Pero el skill lee la referencia estructurada, no los HTMLs directos.


Este es un ejemplo de muchos


Este documento cubre la estructura HTML de emails. El mismo enfoque aplica a cualquier tipo de contenido:

  • Estructura de landing pages
  • Patrones de banners y ads
  • Templates de notificaciones push

Cada tipo de contenido tendra su propia referencia estructurada siguiendo el mismo principio: documentar patrones, no pegar ejemplos.




Especificaciones Generales


| Propiedad | Valor |

|-----------|-------|

| Ancho del email | 650px |

| Fondo pagina | #f1f1f1 (gris claro) o #f3f2f5 |

| Fondo contenido | #ffffff |

| Font principal | 'Helvetica Neue', Helvetica, Arial, sans-serif |

| Layout | Tablas anidadas (compatibilidad email clients) |

| Responsive | mobile_hide / desktop_hide clases + media query max-width: 670px |

| Outlook | Condicionales MSO <!--[if mso]> + VML para botones |




Paleta de Colores


| Uso | Color | Hex |

|-----|-------|-----|

| Hero background / CTA principal | Primario | {{PRIMARY_COLOR}} |

| Botones CTA (variante) | CTA | {{CTA_COLOR}} |

| Card izquierda (Estandar/Upgrade) | Primario | {{PRIMARY_COLOR}} |

| Card derecha (Estandar/Upgrade) | Gris | #ebebeb |

| Card izquierda (Premium - usos) | Gris | #ebebeb |

| Card derecha (Premium - proceso) | Secundario | {{SECONDARY_COLOR}} |

| Texto principal | Oscuro | #100423 |

| Links | Azul | #004add |

| Fondo pagina | Gris claro | #f1f1f1 |

| Boton sobre fondo de color | CTA color sobre blanco | {{CTA_COLOR}} texto, #ffffff fondo |

| Boton sobre fondo blanco | Blanco sobre CTA color | #ffffff texto, {{CTA_COLOR}} fondo |


Personaliza tu paleta: Reemplaza los placeholders {{PRIMARY_COLOR}}, {{CTA_COLOR}} y {{SECONDARY_COLOR}} con los colores de tu marca.




Assets (URLs)


Configurar con las URLs reales de tu CDN o servidor de assets:


| Asset | Placeholder | Formato sugerido |

|-------|-------------|-----------------|

| Logo marca (principal) | {{ASSET_LOGO}} | PNG, ~163px ancho |

| Logo producto (blanco, sobre fondo color) | {{ASSET_PRODUCT_LOGO_WHITE}} | PNG con transparencia |

| Logo producto (color, sobre fondo blanco) | {{ASSET_PRODUCT_LOGO_COLOR}} | PNG con transparencia |

| Check icon (beneficios) | {{ASSET_CHECK_ICON}} | PNG, 32x32px |

| Footer decorativo | {{ASSET_FOOTER}} | PNG/JPG, 650px ancho |

| Header desktop (fondo blanco) | {{ASSET_HEADER_DESKTOP}} | JPG |

| Header mobile (fondo blanco) | {{ASSET_HEADER_MOBILE}} | JPG |

| Hero Estandar (desktop) | {{ASSET_HERO_STANDARD_DESKTOP}} | PNG |

| Hero Estandar (mobile) | {{ASSET_HERO_STANDARD_MOBILE}} | PNG |

| Hero Upgrade (desktop) | {{ASSET_HERO_UPGRADE_DESKTOP}} | PNG |

| Hero Upgrade (mobile) | {{ASSET_HERO_UPGRADE_MOBILE}} | PNG |

| Hero Premium (desktop/mobile) | {{ASSET_HERO_PREMIUM}} | PNG |




Estructura de Rows (10 rows estandar)


Row 1 — Logo Desktop (mobile_hide)

  • Fondo: #f3f2f5
  • Contenido: Logo marca centrado, max-width 163px
  • Padding: 20px top/bottom

Row 2 — Logo Mobile (desktop_hide)

  • Mismo logo, max-width 130px
  • Padding: 15px top/bottom, 60px lateral

Row 3 — Hero Mobile (desktop_hide)

  • 2 columnas 50/50 sobre fondo {{PRIMARY_COLOR}}
  • Col 1: Imagen hero
  • Col 2: Logo producto (blanco) + Headline (36px bold) + CTA boton blanco
  • border-radius: 20px en columnas

Row 4 — Hero Desktop (mobile_hide)

  • 2 columnas (58%/42% para Estandar, 50/50 para Premium/Upgrade)
  • Col 1: Logo producto + Headline (30-42px bold) + subline si aplica + CTA
  • Col 2: Imagen hero alineada a la derecha
  • Fondo: {{PRIMARY_COLOR}}

Row 5 — Cuerpo principal

  • Fondo blanco, padding: 40px 30px 20px
  • Saludo: {{BUSINESS_NAME}} en bold, 14px
  • Texto: 14px, line-height 1.4, centrado
  • CTA: Boton {{CTA_COLOR}} con texto blanco, border-radius 35px

Row 6 — Tagline

  • Fondo blanco, padding: 15px 60px 30px
  • Texto: 20px bold, centrado
  • Contenido varia por segmento:

- Estandar/Upgrade: Frase de propuesta de valor principal

- Premium: Frase con variables de monto y descuento


Row 7 — Bloque de 2 Cards

  • Fondo blanco, padding lateral: 40px
  • 2 columnas 50/50 con gap de 15px
  • border-radius: 20px en ambas cards
  • Estandar / Upgrade:

- Card izq ({{PRIMARY_COLOR}}): Logo producto blanco + texto corto + CTA blanco

- Card der (#ebebeb): Titulo + 3 beneficios con check icon (32px)

  • Premium:

- Card izq (#ebebeb): Logo producto color + texto + 4 items con checks

- Card der ({{SECONDARY_COLOR}}): Texto proceso + acreditacion + CTA blanco


Row 8 — Cierre + CTA final

  • Fondo blanco, padding: 40px 60px 20px
  • Headline: 20px bold centrado
  • Frase motivacional segun segmento
  • CTA: Boton {{CTA_COLOR}}

Row 9 — Ayuda

  • Fondo blanco, padding: 10px 60px 25px
  • Texto: 14px, centrado
  • Link a seccion de ayuda en azul #004add

Row 10 — Footer

  • Imagen footer decorativa (650px ancho)
  • Link a unsubscribe (requerido legalmente)



Componente: Boton CTA


Sobre fondo de color (hero, card primaria)

Background: #ffffff
Color texto: {{CTA_COLOR}}
Font: 14px bold Helvetica Neue
Padding: 5px 20px
Border-radius: 35px


Sobre fondo blanco (cuerpo, cierre)

Background: {{CTA_COLOR}}
Color texto: #ffffff
Font: 14px bold Helvetica Neue
Padding: 5px 20px
Border-radius: 35px


VML para Outlook

Todos los botones incluyen fallback VML con v:roundrect para Outlook.




Componente: Beneficio con Check


<table class="icons_block">
  <tr>
    <td style="padding: 5px 10px 5px 25px;">
      <img src="{{ASSET_CHECK_ICON}}" width="32" alt="check">
    </td>
    <td style="font-family: Helvetica Neue; font-size: 15px; font-weight: 700;">
      Titulo del beneficio
    </td>
  </tr>
</table>
<table class="paragraph_block">
  <tr>
    <td style="padding: 0 40px 5px 30px;">
      <div style="font-size: 14px; line-height: 1.4;">
        Descripcion del beneficio
      </div>
    </td>
  </tr>
</table>




Responsive (Media Query max-width: 670px)


  • Columnas se apilan (width: 100%, display: block)
  • Headlines crecen: 44-50px en mobile
  • Botones: 16px font, 32px line-height
  • Alineacion: centrada en la mayoria de bloques
  • Imagenes: max-width 100%
  • Padding se ajusta para mobile



Variables de la plataforma de envio


Configurar segun tu sistema de envio (ej: Mailchimp, SendGrid, Klaviyo, etc.):


| Tipo | Ejemplo | Descripcion |

|------|---------|-------------|

| Variables de contenido | {{AMOUNT}}, {{BUSINESS_NAME}} | Datos dinamicos del usuario/oferta |

| Variables de sistema | {{UNSUBSCRIBE_URL}}, {{HELP_LINK}} | URLs generadas por la plataforma |

| Links por mercado | {{CTA_LINK}} | URL destino adaptada al pais/mercado |


Crear un archivo references/email-variables.md con la lista completa de variables, su sintaxis en tu plataforma, y valores de ejemplo para testing.




Tipos de HTML segun segmento


| Segmento | Hero | Cards |

|----------|------|-------|

| Estandar | Imagen + headline | Primario + Gris |

| Upgrade de Oferta | Imagen + "Antes: $X" | Primario + Gris |

| Premium | Imagen + "X% OFF" | Gris (usos) + Secundario (proceso) |

| Custom / Multi | Imagen + headline custom | Sin cards o layout simple |


Los HTMLs de produccion de cada segmento se guardan en references/html-templates/ como referencia viva. El skill lee este documento estructurado y recurre a los HTMLs solo para resolver ambiguedades.


¿Tenés un problema para resolver?

Proponé tu caso. Los más votados por la comunidad se resuelven primero en Mate & Build.

Proponé tu problema →