{"id":7502,"date":"2026-05-21T18:13:11","date_gmt":"2026-05-21T18:13:11","guid":{"rendered":"https:\/\/onwardpath.com\/intelligence\/?p=7502"},"modified":"2026-05-29T16:29:10","modified_gmt":"2026-05-29T16:29:10","slug":"building-ai-enhanced-aem-edge-delivery-services","status":"publish","type":"post","link":"https:\/\/onwardpath.com\/intelligence\/building-ai-enhanced-aem-edge-delivery-services\/","title":{"rendered":"Building AI-Enhanced AEM Edge Delivery Services"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">AEM Edge Delivery Services (EDS) represents a fundamental shift in how Adobe Experience Manager delivers content moving from server-side rendering to a document-based, edge-first architecture. When you layer AI capabilities on top of EDS, you get a stack that is both blazing fast and genuinely intelligent. This guide walks through how developers can wire AI into an EDS project today.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Understanding the EDS Architecture First<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before adding AI, you need to understand what makes EDS different from classic AEM:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Content lives in Google Docs or SharePoint<\/strong> &#8211; authors write there, not in the AEM Sites editor<\/li>\n\n\n\n<li class=\"\"><strong>Franklin blocks<\/strong>&nbsp;(now called EDS blocks) &#8211; These are the rendering unit plain HTML\/CSS\/JS, no HTL, no Sling<\/li>\n\n\n\n<li class=\"\"><strong>Delivery happens at the edge<\/strong>&nbsp;<strong>via Fastly CDN<\/strong> &#8211; your origin is&nbsp;main &lt;repo&gt;&lt;org&gt;.aem.live<\/li>\n\n\n\n<li class=\"\"><strong>JavaScript runs in the browser<\/strong>&nbsp;<strong>or in edge workers<\/strong> &#8211; no Java, no OSGi<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This matters for AI integration because your extension points are different: you are writing vanilla JS, working with fetch-based APIs, and potentially deploying edge functions rather than OSGi services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use Case 1 : AI-Powered Block Generation at the Edge<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Problem<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Authors create blocks by writing structured content in Google Docs. Complex blocks, comparison tables, FAQ accordions, product summaries still require hand-crafted markup. AI can generate that markup from natural language.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Approach<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a custom block called ai-block that accepts a plain-text prompt from the document and calls an LLM at render time. Note the use of DOMPurify to sanitise AI output before injecting it into the DOM<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-18ecc7813231329251ca2aa8b71350b3 wp-block-paragraph\">\/\/ blocks\/ai-block\/ai-block.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import DOMPurify from 'dompurify';\n\n\u00a0export default async function decorate(block) {\n\u00a0 const prompt = block.querySelector('p')?.textContent?.trim();\n\u00a0 if (!prompt) return;\n\n\u00a0\u00a0 const response = await fetch('\/api\/ai-generate', {\n\u00a0\u00a0\u00a0 method: 'POST',\n\u00a0\u00a0\u00a0 headers: { 'Content-Type': 'application\/json' },\n\u00a0\u00a0\u00a0 body: JSON.stringify({ prompt }),\n\u00a0 });\n\n\u00a0\u00a0 const { html } = await response.json();\n\u00a0\u00a0 \/\/ Sanitise AI output before DOM injection to prevent XSS\n\u00a0  block.innerHTML = DOMPurify.sanitize(html);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Your \/api\/ai-generate endpoint (deployed as an AEM App Builder action) calls the LLM server-side so your API key never reaches the browser:<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-37bb2b594d94eddec9cda5846d51f3f7 wp-block-paragraph\">\/\/ api\/ai-generate\/index.js (App Builder action)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const Anthropic = require('@anthropic-ai\/sdk');\n\nasync function main(params) {\n\u00a0 const client = new Anthropic({ apiKey: params.ANTHROPIC_API_KEY });\n\u00a0 const message = await client.messages.create({\n\u00a0\u00a0\u00a0 model: 'claude-sonnet-4-6',\n\u00a0\u00a0\u00a0 max_tokens: 1024,\n\u00a0\u00a0\u00a0 messages: &#91;{\n\u00a0\u00a0\u00a0\u00a0\u00a0 role: 'user',\n\u00a0\u00a0\u00a0\u00a0\u00a0 content: `Generate semantic HTML for the following request.\n      Return only the HTML, no explanation.\\n\\n${params.prompt}`,\n\u00a0\u00a0\u00a0 }],\n\u00a0 });\n\u00a0 return { html: message.content&#91;0].text };\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use Case 2 : Automatic Metadata Enrichment via Sidekick Plugin<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AEM Sidekick is the browser extension authors use to preview and publish EDS pages. You can build a custom Sidekick plugin that runs an AI pass before publishing automatically generating SEO metadata, Open Graph tags, and structured data.<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-725e186419673c913c48eec42253de36 wp-block-paragraph\">\/\/ tools\/sidekick\/plugins\/ai-seo.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Wait for the Sidekick custom element to be available\nconst sidekick = document.querySelector('helix-sidekick, aem-sidekick');\n\nsidekick.addEventListener('custom:ai-seo', async () => {\n\n\u00a0 const pageText = document.body.innerText.slice(0, 3000);\n\u00a0 const res = await fetch('\/api\/ai-metadata', {\n\u00a0\u00a0\u00a0 method: 'POST',\n\u00a0\u00a0\u00a0 headers: { 'Content-Type': 'application\/json' },\n\u00a0\u00a0\u00a0 body: JSON.stringify({ content: pageText }),\n\u00a0 });\n\u00a0 const { title, description } = await res.json();\n\n\u00a0 \/\/ Render result inside your plugin panel UI\n\u00a0 document.getElementById('ai-seo-result').innerHTML = `\n\u00a0\u00a0\u00a0 &lt;p>&lt;strong>Title:&lt;\/strong> ${title}&lt;\/p>\n\u00a0\u00a0\u00a0 &lt;p>&lt;strong>Description:&lt;\/strong> ${description}&lt;\/p>\n\u00a0 `;\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Register the plugin in your tools\/sidekick\/config.json. The plugin loads as an iframe panel inside the Sidekick:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\u00a0 \"plugins\": &#91;{\n\u00a0\u00a0\u00a0 \"id\": \"ai-seo\",\n\u00a0\u00a0\u00a0 \"title\": \"AI SEO\",\n\u00a0\u00a0\u00a0 \"url\": \"\/tools\/sidekick\/plugins\/ai-seo.html\",\n\u00a0\u00a0\u00a0 \"isPalette\": true,\n\u00a0\u00a0\u00a0 \"paletteRect\": \"top: 50px; right: 20px; width: 300px;\"\n\u00a0 }]\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use Case 3: Edge Worker Personalization<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EDS pages are static HTML at the CDN layer. To personalize without sacrificing performance, use a Cloudflare Worker with HTMLRewriter to safely inject AI-generated content<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">based on request context geo, device, UTM params, or a cookie-based persona.<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-3e62c6a0b17b11fb0119bf97a4b5622e wp-block-paragraph\">\/\/ cloudflare-worker\/personalize.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CTARewriter {\n\u00a0 constructor(newText) { this.newText = newText; }\n\u00a0 element(el) { el.setInnerContent(this.newText); }\n}\n\nexport default {\n\nasync fetch(request, env) {\n\u00a0\u00a0\u00a0 const origin = await fetch(request);\n\u00a0\u00a0\u00a0 const country = request.cf?.country ?? 'US';\n\u00a0\u00a0\u00a0 const persona = request.headers.get('x-persona') ?? 'default';\n\u00a0\u00a0\u00a0 const aiRes = await fetch(env.AI_API_URL, {\n\u00a0\u00a0\u00a0\u00a0\u00a0 method: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0 headers: { 'Content-Type': 'application\/json' },\n\u00a0\u00a0\u00a0\u00a0\u00a0 body: JSON.stringify({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 prompt: `Rewrite this CTA for a ${persona} in ${country}: \"Get started today\"`,\n\u00a0\u00a0\u00a0\u00a0\u00a0 }),\n\u00a0\u00a0\u00a0 });\n\n\u00a0\u00a0\u00a0 const { text } = await aiRes.json();\n\u00a0\u00a0\u00a0 \/\/ HTMLRewriter streams and transforms safely\n\u00a0\u00a0\u00a0 return new HTMLRewriter()\n\u00a0\u00a0\u00a0\u00a0\u00a0 .on('#hero-cta', new CTARewriter(text))\n\u00a0\u00a0\u00a0\u00a0\u00a0 .transform(origin);\n\u00a0 },\n};<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use Case 4 \u2014 Smart Tags via Adobe Sensei<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><em>Smart Tags setup requires the Adobe Developer Console and Smart Content Service API integration as it is not a settings toggle.<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Adobe Sensei&#8217;s Smart Content Service automatically tags AEM Assets with relevant metadata. The setup requires integration via the Adobe Developer Console:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"\">Create a project in the Adobe Developer Console and add the Smart Content Service API<\/li>\n\n\n\n<li class=\"\">Generate a service account (JWT) credential and note the API key, client secret, and technical account ID<\/li>\n\n\n\n<li class=\"\">In AEM as a Cloud Service, navigate to Tools -&gt; Cloud Services -&gt; Smart Tags and configure the Adobe IMS integration using your Developer Console credentials<\/li>\n\n\n\n<li class=\"\">Run Tools -&gt; Assets -&gt; Smart Tags Training with a representative set of tagged assets to calibrate the model to your taxonomy<\/li>\n\n\n\n<li class=\"\">Once trained, Smart Tags apply automatically on every new asset upload<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><em>Smart Tags training requires a minimum of 30 tagged assets per tag to achieve reliable auto-tagging. Plan a tagging sprint before enabling this in production.<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Architectural Diagram:<\/strong><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a1af9c798819&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a1af9c798819\" class=\"wp-block-image size-large wp-lightbox-container\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"856\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=1024%2C856&#038;ssl=1\" alt=\"AEM Edge Delivery Services + AI Architecture\" class=\"wp-image-7504\" srcset=\"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=1024%2C856&amp;ssl=1 1024w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=300%2C251&amp;ssl=1 300w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=768%2C642&amp;ssl=1 768w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=1536%2C1285&amp;ssl=1 1536w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/aem-edge-delivery-ai-diagram.png?resize=2048%2C1713&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 1 &#8211; Authoring Layer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What it is:\u00a0Where content is created by human authors. No servers, no code deployment just documents.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Components:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Google Docs \/ SharePoint<\/strong>\u00a0&#8211; Authors write page content directly here using structured tables to define AEM blocks. This is the core EDS authoring model &#8211; no AEM Sites editor involved.<\/li>\n\n\n\n<li class=\"\"><strong>Sidekick Event API (aem-sidekick v6+)<\/strong>\u00a0&#8211; A browser extension authors install. Your custom AI SEO plugin hooks into it via\u00a0custom:ai-seo\u00a0events to run AI checks before publishing.<\/li>\n\n\n\n<li class=\"\"><strong>AEM Cloud Service<\/strong>\u00a0&#8211; Monitors the connected Google Drive or SharePoint folder. When an author clicks &#8220;Publish&#8221; in Sidekick, AEM picks up the content and triggers the delivery pipeline.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Key point:\u00a0Authors never touch a CMS interface. Everything happens in familiar office tools.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 2 &#8211; Build &amp; Publish Layer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What it is:\u00a0Where content and code are processed, compiled, and prepared for delivery. This is the backend infrastructure layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Components:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>GitHub Repo<\/strong>\u00a0&#8211; Holds all EDS block code (JavaScript, CSS), the\u00a0config.json\u00a0for Sidekick plugins, and market configuration files. When authors publish, the content syncs from Google Docs and is served using the code from this repo.<\/li>\n\n\n\n<li class=\"\"><strong>Adobe Developer Console<\/strong>\u00a0&#8211; Required setup step for Smart Content Service (Adobe Sensei). You register your project here, generate API credentials, and connect them to AEM Assets for Smart Tags to work.<\/li>\n\n\n\n<li class=\"\"><strong>App Builder<\/strong>\u00a0&#8211; Adobe&#8217;s serverless function platform. This is where your AI API actions live, the server-side code that calls the Claude API. API keys are stored here as environment params, never exposed to the browser.<\/li>\n\n\n\n<li class=\"\"><strong>Claude API<\/strong>\u00a0&#8211; The LLM that receives prompts from App Builder and returns generated content. Scoped strictly to approved inputs never called directly from the browser.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Key point:\u00a0The App Builder acts as a secure proxy between your EDS pages and the LLM. API keys never reach the client side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 3 &#8211; Edge &amp; AI Layer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What it is:\u00a0Where content is cached, personalized, and enriched at the CDN level, closest to the user. This is where performance meets intelligence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Components:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Fastly CDN<\/strong>\u00a0&#8211; Serves the static HTML EDS pages from the\u00a0aem.live\u00a0origin. Extremely fast because pages are pre-built static files, not server-rendered on every request.<\/li>\n\n\n\n<li class=\"\"><strong>Cloudflare Worker (HTMLRewriter)<\/strong>\u00a0&#8211; Intercepts every page request before it reaches the browser. Uses Cloudflare&#8217;s streaming\u00a0HTMLRewriter\u00a0to inject personalized content (e.g. different CTAs per country or persona) without rebuilding the whole page.<\/li>\n\n\n\n<li class=\"\"><strong>Edge Cache<\/strong>\u00a0&#8211; Stores AI-generated responses (block HTML, metadata, summaries) at the CDN level with a TTL per block type. Prevents repeat LLM calls for the same deterministic content critical for keeping pages fast.<\/li>\n\n\n\n<li class=\"\"><strong>Adobe Sensei<\/strong>\u00a0&#8211; Runs in the background on AEM Assets. After training on your asset library via the Adobe Developer Console, it automatically applies Smart Tags (category, audience, content type) to every newly uploaded asset.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Key point:\u00a0Personalization and AI enrichment happen here at the edge so the browser gets a fully tailored response without any additional round trips.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 4 &#8211; Browser Layer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What it is:\u00a0What the end user&#8217;s browser receives and renders. Everything visible to the visitor happens here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Components:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>EDS Page (Browser)<\/strong>\u00a0&#8211; The static HTML page delivered by Fastly. EDS blocks are rendered by calling their\u00a0decorate()\u00a0JavaScript functions. This is vanilla JS, no framework, no build step, no hydration overhead.<\/li>\n\n\n\n<li class=\"\"><strong>AI Block (Lazy)<\/strong>\u00a0&#8211; An EDS block that fetches AI-generated HTML from the Edge Cache after the page&#8217;s LCP (Largest Contentful Paint) element has already rendered. Uses\u00a0DOMPurify.sanitize()\u00a0before injecting any AI output into the DOM to prevent XSS.<\/li>\n\n\n\n<li class=\"\"><strong>Personalized CTA<\/strong>\u00a0&#8211; The call-to-action element whose text was already rewritten by the Cloudflare Worker&#8217;s\u00a0HTMLRewriter\u00a0before the response arrived. The browser simply renders what it receives, no extra JavaScript needed.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Key point:\u00a0The browser does as little work as possible. Heavy lifting (AI calls, personalization, caching) happened upstream at the edge. The result is a Lighthouse 100-scoring page that is also intelligent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How the Layers Connect<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Author writes in Google Docs<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2193<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AEM Cloud picks up on publish \u2192 GitHub code serves the blocks<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2193<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fastly CDN serves static HTML \u2192 Cloudflare Worker personalizes it<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2193<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">App Builder calls Claude API \u2192 result cached at Edge Cache<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2193<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Browser renders fast static page + lazy-loads AI block after LCP<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each layer has a clear single responsibility like authoring, building, enriching, rendering, which is why the stack is both maintainable and scalable across hundreds of markets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5 color-coded flows\u00a0with solid lines for critical path and dashed lines for async\/optional paths<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to build AI-enhanced AEM Edge Delivery Services using App Builder, Claude API, and Cloudflare HTMLRewriter. Corrected Sidekick v6+ plugin patterns included.<\/p>\n","protected":false},"author":7,"featured_media":7516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[138,37],"tags":[182,184,180,109,183,181,185,186],"class_list":["post-7502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adobe-experience-manager","category-technology-blog","tag-adobe-app-builder","tag-adobe-sensei","tag-aem-adobe-experience-manager","tag-artificial-intelligence","tag-cloudflare-workers","tag-edge-delivery-services","tag-generative-ai","tag-smart-tags"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/05\/AI-Enhanced-Edge-Delivery.png?fit=2048%2C1075&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/comments?post=7502"}],"version-history":[{"count":8,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7502\/revisions"}],"predecessor-version":[{"id":7526,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7502\/revisions\/7526"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/media\/7516"}],"wp:attachment":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/media?parent=7502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/categories?post=7502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/tags?post=7502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}