sagas/odisea-del-blog-maestro/020-el-mito-de-la-automatizacion-total.md

2026-03-24 published

Episodio 020 — El mito de la automatización total

Episodio 020 — El mito de la automatización total

Serie: bitácora de ingeniería — caprini.dev
Hilo: la herramienta ya genera el texto y la tarjeta PNG; lo que no hace es sustituir tu pulso en el botón de publicar. Eso es una decisión de producto, no de pereza.


Qué añadimos en el tracker

Al terminar ñpm startenprojects/001-progress-tracker/, el script construye una URL de **Twitter Web Intent** (https://twitter.com/intent/tweet?text=…`) con el mismo bloque que ya imprimíamos para copiar, más un enlace a https://caprini.dev o, si configuras PROGRESS_BLOG_SLUG (o CAPRINI_SHARE_URL), a la página del episodio bajo /blog/<slug>. El texto va codificado con éncodeURIComponent` para que la URL sea válida.

Opcionalmente, con la librería **ópen**, se abre el navegador en esa URL para que el tweet quede **prefill** y solo falte adjuntar la imagen generada (latest.png) y pulsar publicar. En entornos sin GUI o en CI, TWITTER_INTENT_NO_OPEN=1` evita abrir ventanas.


Por qué no la API oficial (por ahora)

  1. Coste y complejidad operativa — Los productos de la API de X van por planes de pago y límites; un blog estático y un script de latido no necesitan suscribir un producto ni negociar cuotas para un gesto que ocurre unas pocas veces por semana. El Web Intent no consume tu presupuesto de API: es solo un enlace.

  2. Seguridad y superficie de ataque — Publicar en tu nombre implica OAuth 2.0, refresh tokens, almacenamiento de secretos y rotación si algo filtra. El tracker ya necesita GITLAB_TOKEN para leer commits; añadir credenciales de escritura en X multiplica el daño posible si el entorno se compromete. Con Intent, no hay token de X en el servidor: el envío ocurre en tu sesión del navegador.

  3. Toque humano — La imagen 1200×675 y el texto son automáticos, pero el feed no es un tubo sin fricción. Queremos revisar tono, hashtags y que la captura se vea bien en el compositor de X antes de soltarla. La API invita al “publica ya”; el Intent invita al “mira y confirma” — más alineado con vibecoding consciente que con un bot que dispara solo.


Cuándo sí tendría sentido la API

Si el volumen fuera alto, hubiera cola programada o integración con varias cuentas sin intervención, la API (o un servicio intermedio auditado) podría justificarse. Hasta entonces, Intent + ópen` es el compromiso barato, seguro y honesto: la máquina prepara; la persona envía.


Referencias rápidas

  • Implementación: projects/001-progress-tracker/tracker.mjsbuildTweetTextForIntent, buildTwitterIntentUrl.
  • Variables opcionales: ver projects/001-progress-tracker/.env.example.