Episodio 026 — Fábrica de paxeles en masa
Serie: bitácora de ingeniería — caprini.dev
Contexto: el blog sharer ya sabía pintar un episodio elegido en la terminal: fondo bg-share.png, badge HACK_LEVEL, título y slug. El salto siguiente no es “más filtros en el menú”, sino industrializar: la misma tubería visual aplicada a toda la colección sin abrir veintitantas veces el asistente interactivo.
Procesar la colección, no solo el hito del día
Un directorio con decenas de logs es un activo: cada .md es una página indexable y una posible tarjeta social. Repetir a mano “generar PNG → actualizar frontmatter” no escala y aburre. La respuesta es un script bulk que:
- Lista todos los ficheros bajo
src/content/docs/system/episodes/. - Para cada uno, lee el
title, extrae el número de episodio del nombre (026-…→ badge 026). - Reutiliza la misma función
generatePostImageque el sharer (lógica en un módulo compartido, sin duplicar Satori). - Escribe el PNG en
public/assets/images/shares/<slug>.pngy dejathumbnail: /assets/images/shares/<slug>.pngen el frontmatter.
El bucle es estrictamente secuencial: un archivo tras otro. Así evitamos picos de descriptores abiertos y mensajes del sistema del tipo “Too many open files”.
X no es solo Open Graph
Tener óg:image** en producción ayuda a muchas plataformas, pero **X** suele mirar también las metas **twitter:card**, **twitter:title**, **twitter:description** y **twitter:image**. Si faltan, el preview puede quedarse pobre o inconsistente aunque el HTML ya lleve **óg:image. El layout global ahora emite esas etiquetas con la misma URL absoluta que usamos para la imagen Open Graph (thumbnail del post o imagen por defecto del sitio), de modo que summary_large_image tenga material fiable que rastrear.
Cierre
Píxeles (o paxeles, si te gusta el apodo) en masa: misma estética OS, misma fuente, misma ruta pública — y una sola orden en la carpeta del amplificador para alinear blog, estáticos y redes. Cuando toque desplegar, el tuit sigue yendo después del ñpm run deploy`; la tarjeta solo es honesta si el HTML y el PNG viven donde el crawler las encuentra.