<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AIM blog</title>
    <link>https://aimdevservices.com/en/blog/</link>
    <atom:link href="https://aimdevservices.com/en/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Technical notes on how this site is built: the decisions, what I measured and the code, with links to the repository.</description>
    <language>en-us</language>
    <lastBuildDate>Sun, 08 Nov 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>An AI agent with real tools on Workers AI</title>
      <link>https://aimdevservices.com/en/blog/ai-agent-with-real-tools-on-workers-ai/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/ai-agent-with-real-tools-on-workers-ai/</guid>
      <description>Gemma 4 with native function calling, four read-only tools and limits on every run. How the Lab&apos;s agent works and how much free quota it spends.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>Workers AI</category>
      <category>Cloudflare</category>
      <category>Agents</category>
      <category>Testing</category>
    </item>
    <item>
      <title>A free AI assistant: Gemma 4 on Cloudflare Workers AI</title>
      <link>https://aimdevservices.com/en/blog/free-ai-assistant-with-gemma-4/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/free-ai-assistant-with-gemma-4/</guid>
      <description>Why the Lab&apos;s assistant uses Gemma 4 and not Claude, how it fits in Workers AI&apos;s free quota and how it answers only with what the site says.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>Workers AI</category>
      <category>Cloudflare</category>
      <category>Turnstile</category>
    </item>
    <item>
      <title>Live automation in under 2 seconds: n8n designs, Cloudflare runs</title>
      <link>https://aimdevservices.com/en/blog/live-automation-in-under-2-seconds/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/live-automation-in-under-2-seconds/</guid>
      <description>The demo waited up to 112 s for n8n to wake up on Render. Now the workflow runs on the edge with n8n&apos;s rules and a parity test.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Automation</category>
      <category>n8n</category>
      <category>Cloudflare</category>
      <category>Testing</category>
    </item>
    <item>
      <title>A strict CSP in Astro 7, without unsafe-inline or unsafe-eval</title>
      <link>https://aimdevservices.com/en/blog/strict-csp-in-astro-7/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/strict-csp-in-astro-7/</guid>
      <description>Hashes instead of unsafe-inline, Zod without eval, styles as classes, fonts as files, Prism instead of Shiki and a test that fails on any violation.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
      <category>Astro</category>
      <category>CSP</category>
      <category>Performance</category>
    </item>
    <item>
      <title>A small CRM in the /admin/ panel: statuses, history and a safe CSV</title>
      <link>https://aimdevservices.com/en/blog/the-admin-panel-as-a-small-crm/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/the-admin-panel-as-a-small-crm/</guid>
      <description>Statuses, history in the same statement, notes, filters in the URL and a formula-proof CSV. That&apos;s how the leads panel became a small CRM.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Admin panel</category>
      <category>CRM</category>
      <category>Postgres</category>
      <category>Security</category>
      <category>Testing</category>
    </item>
    <item>
      <title>Share images generated at build time, with Satori and sharp</title>
      <link>https://aimdevservices.com/en/blog/share-images-generated-at-build-time/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/share-images-generated-at-build-time/</guid>
      <description>Every page has its own 1200 × 630 image, drawn at build time with Satori and sharp from its HTML. No runtime cost, and cached between builds.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Astro</category>
      <category>SEO</category>
      <category>Performance</category>
      <category>Testing</category>
    </item>
    <item>
      <title>From ~1.25 s to a fraction: Neon over HTTP from Cloudflare</title>
      <link>https://aimdevservices.com/en/blog/neon-over-http-from-cloudflare/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/neon-over-http-from-cloudflare/</guid>
      <description>Every API request opened a TCP and TLS connection to Neon. With the HTTP driver, each query is one request. How I measured, tested and can undo it.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Performance</category>
      <category>Neon</category>
      <category>Cloudflare</category>
      <category>Postgres</category>
      <category>Testing</category>
    </item>
    <item>
      <title>A bilingual site in Astro 7 with translated URLs</title>
      <link>https://aimdevservices.com/en/blog/bilingual-site-in-astro-7-with-translated-urls/</link>
      <guid isPermaLink="true">https://aimdevservices.com/en/blog/bilingual-site-in-astro-7-with-translated-urls/</guid>
      <description>Spanish at the root, English under /en/ with its own paths, translations as a layer over Spanish, and tests that fail if the two versions drift apart.</description>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <category>Astro</category>
      <category>i18n</category>
      <category>SEO</category>
      <category>Testing</category>
    </item>
  </channel>
</rss>
