<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Khavel</title>
    <description>The latest articles on DEV Community by Khavel (@khavel).</description>
    <link>https://dev.to/khavel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F908485%2F809342dc-ba24-482e-a5b9-6ab3dbd61290.png</url>
      <title>DEV Community: Khavel</title>
      <link>https://dev.to/khavel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khavel"/>
    <language>en</language>
    <item>
      <title>Cómo automaticé una newsletter de IA para developers con Claude API y GitHub Actions</title>
      <dc:creator>Khavel</dc:creator>
      <pubDate>Mon, 25 May 2026 12:34:37 +0000</pubDate>
      <link>https://dev.to/khavel/como-automatice-una-newsletter-de-ia-para-developers-con-claude-api-y-github-actions-3fje</link>
      <guid>https://dev.to/khavel/como-automatice-una-newsletter-de-ia-para-developers-con-claude-api-y-github-actions-3fje</guid>
      <description>&lt;h2&gt;
  
  
  El problema: no existía una newsletter de AI dev tools en español con profundidad real
&lt;/h2&gt;

&lt;p&gt;Hace unos meses me di cuenta de algo: consumía entre 15 y 20 fuentes distintas cada semana para estar al día con herramientas de IA para desarrollo. Blogs de Anthropic, OpenAI, GitHub, hilos de Reddit, repos trending... y todo en inglés. Cuando quería compartir algo relevante con colegas hispanohablantes, terminaba explicando las cosas desde cero.&lt;/p&gt;

&lt;p&gt;Pensé: "debería existir una newsletter semanal que haga este filtrado por mí, en español, con contexto real para devs". Busqué y no encontré nada que me convenciera. Así que hice lo que cualquier desarrollador haría: la automaticé entera.&lt;/p&gt;

&lt;p&gt;El resultado es &lt;a href="https://devaisemanal.com" rel="noopener noreferrer"&gt;DevAI Semanal&lt;/a&gt;, una newsletter que se genera, publica y envía completamente sola cada martes a las 9:00h (hora española). Sin intervención manual. El pipeline es open source y puedes verlo en &lt;a href="https://github.com/Khavel/devai-newsletter" rel="noopener noreferrer"&gt;github.com/Khavel/devai-newsletter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Voy a explicar cómo funciona paso a paso.&lt;/p&gt;




&lt;h2&gt;
  
  
  Arquitectura general
&lt;/h2&gt;

&lt;p&gt;El pipeline tiene 5 fases secuenciales que se ejecutan en un único workflow de GitHub Actions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\&lt;/code&gt;&lt;code&gt;&lt;br&gt;
Martes 9:00h -- GitHub Actions arranca el pipeline&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
[1] Sourcing     -- Recoge noticias de RSS, Hacker News, Reddit, GitHub Trending&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
[2] Curation     -- Claude selecciona los 5-7 mejores items de la semana&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
[3] Rewriting    -- Claude redacta cada noticia en español con contexto&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
[4] Assembly     -- Renderiza el HTML del newsletter (email-ready)&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
[5] Publishing   -- Publica en Ghost (web) + envía por MailerLite (email)&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
Telegram         -- Notificación con las URLs del resultado&lt;br&gt;
\&lt;/code&gt;&lt;code&gt;\&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cada fase genera un JSON intermedio en data/ con la fecha del día. Si el pipeline se interrumpe a mitad, al relanzarlo detecta qué archivos ya existen y salta las fases completadas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 1: Sourcing -- recoger las noticias
&lt;/h2&gt;

&lt;p&gt;La primera fase recorre todas las fuentes configuradas en config.yaml y guarda los items crudos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RSS&lt;/strong&gt;: Anthropic, OpenAI, Google AI, GitHub, Microsoft AI, VS Code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hacker News&lt;/strong&gt;: keywords como claude code, cursor ai, mcp server...&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reddit&lt;/strong&gt;: r/ClaudeAI, r/cursor, r/LocalLLaMA, r/ChatGPTPro&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Trending&lt;/strong&gt;: topics ai-coding, developer-tools, llm, mcp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todo está parametrizado en un YAML, no en código. Añadir una fuente nueva es editar un fichero.&lt;/p&gt;

&lt;p&gt;Un detalle importante: hay un RateLimiter compartido que limita a 0.5 peticiones por segundo. Parece lento, pero cuando estás llamando a APIs de Reddit y Hacker News desde una GitHub Action, lo último que quieres es que te baneen la IP.&lt;/p&gt;

&lt;p&gt;El output es un JSON con 40-80 items crudos con título, URL, fuente y fecha.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 2: Curation -- Claude como editor jefe
&lt;/h2&gt;

&lt;p&gt;Aquí es donde la IA entra en juego. Los 40-80 items crudos se envían a Claude con un system prompt que define los criterios editoriales estrictos: priorizar lanzamientos de herramientas, comparativas, MCP servers, workflows de agentic coding y repos prácticos. Descartar IA genérica, papers sin aplicación práctica y rumores.&lt;/p&gt;

&lt;p&gt;Claude devuelve un JSON con los items seleccionados, rankeados por relevancia, con una razón de por qué cada uno importa. Me llevó varias iteraciones afinar los criterios.&lt;/p&gt;

&lt;p&gt;Si te interesa cómo aplico estos flujos con Claude en otros contextos, tengo una &lt;a href="https://devaisemanal.com/guias-claude-code/" rel="noopener noreferrer"&gt;guía práctica sobre Claude Code&lt;/a&gt; donde entro más en detalle.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 3: Rewriting -- redacción con personalidad
&lt;/h2&gt;

&lt;p&gt;Los items curados se envían uno a uno a Claude para que los reescriba en español. No es una traducción: es una reescritura completa con opinión y contexto práctico. El tono es directo, técnico pero accesible, y opinionado.&lt;/p&gt;

&lt;p&gt;Cada artículo debe tener entre 80 y 120 palabras: lo suficiente para dar contexto sin que el lector pierda interés.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 4: Assembly -- HTML para email
&lt;/h2&gt;

&lt;p&gt;Esta fue la fase que más dolores de cabeza me dio. Renderizar HTML para email no tiene nada que ver con HTML para web. No hay Flexbox, no hay Grid, y cada cliente de correo interpreta el CSS como le da la gana. La solución: CSS 100% inline, tablas para layout, y testing exhaustivo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 5: Publishing -- Ghost + MailerLite + Telegram
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ghost CMS&lt;/strong&gt;: Publica el newsletter como post en Ghost (Fly.io, región Paris). URLs permanentes, SEO metadata automática y sistema de suscripción.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MailerLite&lt;/strong&gt;: Crea una campaña con el HTML del email y la envía a todos los suscriptores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt;: Notificación con los enlaces al post y la campaña.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Lecciones aprendidas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Idempotencia por encima de todo
&lt;/h3&gt;

&lt;p&gt;Cada fase guarda su output como JSON con la fecha. Si GitHub Actions falla, al relanzar continúa donde se quedó. En pipelines con APIs externas, la idempotencia es la diferencia entre un sistema que funciona y uno que te obliga a intervenir cada semana.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rate limiting defensivo
&lt;/h3&gt;

&lt;p&gt;0.5 req/s para APIs públicas, 1 req/s para Claude. Meses sin un solo ban ni rate limit.&lt;/p&gt;

&lt;h3&gt;
  
  
  El tono del prompt importa más de lo que crees
&lt;/h3&gt;

&lt;p&gt;Invertir tiempo en el system prompt fue lo que más impacto tuvo en la calidad. Si usas LLMs para generar contenido, trata el prompt como código: versiónalo, itéralo, y testea cada cambio.&lt;/p&gt;

&lt;p&gt;Si trabajas con &lt;a href="https://devaisemanal.com/guias-mcp-servers/" rel="noopener noreferrer"&gt;MCP servers&lt;/a&gt; y herramientas de IA para desarrollo, este tipo de integraciones son cada vez más accesibles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resultados
&lt;/h2&gt;

&lt;p&gt;El pipeline lleva meses funcionando sin intervención manual. El coste por edición es mínimo: un par de llamadas a Claude API (céntimos) y la ejecución gratuita de GitHub Actions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pruébalo tú mismo
&lt;/h2&gt;

&lt;p&gt;El código completo está en &lt;a href="https://github.com/Khavel/devai-newsletter" rel="noopener noreferrer"&gt;github.com/Khavel/devai-newsletter&lt;/a&gt;. Es open source, documentado, y puedes adaptarlo a tu propio nicho.&lt;/p&gt;

&lt;p&gt;Si prefieres simplemente recibir el resultado final cada martes, suscríbete gratis en &lt;strong&gt;&lt;a href="https://devaisemanal.com" rel="noopener noreferrer"&gt;devaisemanal.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Y si tienes preguntas o sugerencias, me encuentras como &lt;a href="https://github.com/Khavel" rel="noopener noreferrer"&gt;@Khavel&lt;/a&gt; en GitHub.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Alejandro Oceja -- creador de &lt;a href="https://devaisemanal.com" rel="noopener noreferrer"&gt;DevAI Semanal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>automation</category>
      <category>newsletter</category>
    </item>
  </channel>
</rss>
