email-qa
Filtro: $ARGUMENTS
Renderizador: ${CLAUDE_SKILL_DIR}/../ui-audit/scripts/render-html.mjs
1. Obtén el HTML final para cada plantilla
- ¿Existe un script de galería? Busca en
package.jsonemail-gallery,email:previewoemails. Si genera cada plantilla con datos de prueba, ejecútalo y usa su directorio de salida. - De lo contrario, crea un harness en
/tmp/email-qa/render.ts(fuera del repositorio a menos que el usuario quiera conservarlo):- importa cada renderizador (
render()de React Email, funciones basadas en literales de plantilla, MJML); - llámalo con datos de prueba realistas, incluidos casos extremos: un nombre largo, un campo opcional faltante, 0 y 1 y muchos elementos, y ambas configuraciones regionales;
- escribe
<plantilla>-<caso>.html; - simula todo lo que lea env, BD o red. Ejecútalo con
tsxdel repositorio.
- importa cada renderizador (
- Siempre revisa el HTML final generado, nunca el JSX.
2. Renderizado + comprobaciones estáticas
node ${CLAUDE_SKILL_DIR}/../ui-audit/scripts/render-html.mjs /tmp/email-qa/out/*.html --out /tmp/email-qa/shots
Para cada archivo, esto produce @600/@375 en modo claro y oscuro, además de @600-noimg, y render.json con problemas estáticos. Lee las hojas de cada plantilla.
3. Lista de verificación (más allá de lo que marca el script)
- Marcadores de posición: ninguno de
undefined,NaN,null,[object Object],{{…}},Invalid Date,krvacío,0 stdonde debería estar oculto. - Preheader: presente, significativo y que no repita el asunto. Con relleno para que el texto del cuerpo no se filtre en la vista previa de la bandeja de entrada.
- Cancelación de suscripción: requerida para resúmenes y correos de marketing (además de las cabeceras
List-Unsubscribe+List-Unsubscribe-Posten el código de envío). Los correos transaccionales están exentos; indica de qué tipo es cada plantilla. - Imágenes desactivadas: el mensaje aún se entiende, hay texto alternativo en cada imagen importante,
alt=""en espaciadores, y la CTA es texto vivo, no una imagen. - Modo oscuro: los logotipos tienen una variante transparente o segura para modo oscuro, no hay texto oscuro sobre un fondo que ahora es oscuro, y el color de marca sigue pasando 3:1. La inversión forzada de Gmail/Outlook no se puede emular, así que marca el texto
#000duro sobre fondos transparentes como un riesgo. - Outlook de escritorio: diseño en tabla, sin flex/grid, VML o
msocon relleno de respaldo para botones, anchos en atributoswidth=, sinmarginen elementos de bloque para espaciado. - Enlaces: absolutos
https://, con UTM si el proyecto los usa, sin localhost ni hosts de vista previa, y sin seguimiento en el enlace de cancelación. - Copia: configuración regional correcta en todo el texto (ejecuta las reglas de
copy-checken las cadenas), nombre del remitente y reply-to (que coincidan con lo que espera el proyecto). - CTA visible sin desplazamiento a 375 y no recortada. El total se mantiene por debajo de ~102 KB.
Criterios de salida
- Cada plantilla está renderizada en todas las variantes y se han leído las hojas.
- No hay fugas de marcadores de posición ni enlaces relativos, y la meta viewport está presente.
- Cada problema restante está etiquetado como error (corregido) o riesgo (reportado).
- Un breve resumen para el usuario, más el directorio de capturas.