<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog de AIM</title>
    <link>https://aimdevservices.com/blog/</link>
    <atom:link href="https://aimdevservices.com/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Notas técnicas sobre cómo está hecho este sitio: las decisiones, lo que medí y el código, con enlaces al repositorio.</description>
    <language>es-co</language>
    <lastBuildDate>Sun, 08 Nov 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Un agente de IA con herramientas reales en Workers AI</title>
      <link>https://aimdevservices.com/blog/agente-ia-con-herramientas-en-workers-ai/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/agente-ia-con-herramientas-en-workers-ai/</guid>
      <description>Gemma 4 con function calling nativo, cuatro herramientas de solo lectura y topes en cada ejecución. Así funciona el agente del Lab y cuánto cupo gasta.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>IA</category>
      <category>Workers AI</category>
      <category>Cloudflare</category>
      <category>Agentes</category>
      <category>Pruebas</category>
    </item>
    <item>
      <title>Un asistente de IA gratis: Gemma 4 en Cloudflare Workers AI</title>
      <link>https://aimdevservices.com/blog/asistente-ia-gratis-con-gemma-4/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/asistente-ia-gratis-con-gemma-4/</guid>
      <description>Por qué el asistente del Lab usa Gemma 4 y no Claude, cómo cabe en el cupo gratis de Workers AI y cómo responde solo con lo que dice el sitio.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>IA</category>
      <category>Workers AI</category>
      <category>Cloudflare</category>
      <category>Turnstile</category>
    </item>
    <item>
      <title>Automatización en vivo en menos de 2 segundos: n8n diseña, Cloudflare ejecuta</title>
      <link>https://aimdevservices.com/blog/automatizacion-en-vivo-en-menos-de-2-segundos/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/automatizacion-en-vivo-en-menos-de-2-segundos/</guid>
      <description>La demo esperaba hasta 112 s a que n8n despertara en Render. Ahora el flujo corre en el edge con las reglas de n8n y una prueba de paridad.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Automatización</category>
      <category>n8n</category>
      <category>Cloudflare</category>
      <category>Pruebas</category>
    </item>
    <item>
      <title>CSP estricta en Astro 7, sin unsafe-inline ni unsafe-eval</title>
      <link>https://aimdevservices.com/blog/csp-estricta-en-astro-7/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/csp-estricta-en-astro-7/</guid>
      <description>Hashes en vez de unsafe-inline, Zod sin eval, estilos en clases, fuentes como archivos, Prism en lugar de Shiki y una prueba que falla con cualquier violación.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Seguridad</category>
      <category>Astro</category>
      <category>CSP</category>
      <category>Rendimiento</category>
    </item>
    <item>
      <title>Un pequeño CRM en el panel /admin/: estados, historial y un CSV seguro</title>
      <link>https://aimdevservices.com/blog/el-panel-admin-como-un-pequeno-crm/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/el-panel-admin-como-un-pequeno-crm/</guid>
      <description>Estados, historial en la misma sentencia, notas, filtros en la URL y un CSV a prueba de fórmulas. Así el panel de contactos se volvió un pequeño CRM.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Panel</category>
      <category>CRM</category>
      <category>Postgres</category>
      <category>Seguridad</category>
      <category>Pruebas</category>
    </item>
    <item>
      <title>Imágenes para compartir generadas al compilar, con Satori y sharp</title>
      <link>https://aimdevservices.com/blog/imagenes-para-compartir-generadas-al-compilar/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/imagenes-para-compartir-generadas-al-compilar/</guid>
      <description>Cada página tiene su propia imagen de 1200 × 630, dibujada al compilar con Satori y sharp a partir de su HTML. Sin costo en ejecución y con caché.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Astro</category>
      <category>SEO</category>
      <category>Rendimiento</category>
      <category>Pruebas</category>
    </item>
    <item>
      <title>De ~1,25 s a una fracción: Neon por HTTP desde Cloudflare</title>
      <link>https://aimdevservices.com/blog/neon-por-http-desde-cloudflare/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/neon-por-http-desde-cloudflare/</guid>
      <description>Cada petición a la API abría una conexión TCP y TLS a Neon. Con el driver HTTP, cada consulta es una petición. Así lo medí, lo probé y lo puedo revertir.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Rendimiento</category>
      <category>Neon</category>
      <category>Cloudflare</category>
      <category>Postgres</category>
      <category>Pruebas</category>
    </item>
    <item>
      <title>Un sitio bilingüe en Astro 7 con URLs traducidas</title>
      <link>https://aimdevservices.com/blog/sitio-bilingue-en-astro-7-con-urls-traducidas/</link>
      <guid isPermaLink="true">https://aimdevservices.com/blog/sitio-bilingue-en-astro-7-con-urls-traducidas/</guid>
      <description>Español en la raíz, inglés bajo /en/ con rutas propias, traducciones como capa sobre el español y pruebas que fallan si las dos versiones se separan.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Astro</category>
      <category>i18n</category>
      <category>SEO</category>
      <category>Pruebas</category>
    </item>
  </channel>
</rss>
