Reference

Shopify / Google integration on an AEM scaffold — via Webflow export

What this is: how the Shopify + Google integration ships onto an Adobe Experience Manager estate, using the Webflow export as the page scaffold.

What you can decide after reading it: whether to adopt the scaffold path, and which substrate election (Cloudflare or Adobe/Azure) your paper already supports.

Companions (referenced, not restated): the trust framework, Cybersecurity for AI, and the key ceremony.


1. Premise

AEM owns the glass: content authoring, templates, Adobe-managed delivery. It never holds identity, consent, or commerce credentials.

The integration ships beside it, never inside it — a substrate AEM does not have and was not built to have:

Rows decide. The gate serves. The ledger remembers. JWKS verifies.

That grammar appears once in this doc, here. Every section after this one is an application of it.

Declared non-goal, up front: this is not an ESB replacement. It can feed an existing ESB; it does not duplicate one (§8).


2. The scaffold pipeline — Webflow → vanilla export → AEM

Webflow (author)  →  vanilla HTML/CSS export  →  AEM templates + clientlibs  →  embeds layer on

The load-bearing claim: behavior never lived in the Webflow runtime, so the export loses nothing. Interactions, CMS bindings, and Webflow.js were never load-bearing; all app behavior is served from worker-hosted embeds that are framework-agnostic by construction. The export is markup and stylesheet — exactly the two things AEM wants to own as content.

Webflow artifactAEM artifact
Page / section markupPage template, HTL / Core Component wrapping the exported block
Compiled first-party CSS (one file, shared across platforms)Clientlib
Head custom-code slotTemplate head: stack-loader.js first, then chrome loaders
Worker embeds (login, consent, nav, footer)Unchanged — same script tags, same worker origin

Rule carried over from every other surface: embed, not iframe. The blocks mount on the host page's origin, because the session contract (§5) reads first-party storage.

Invariant this section ends on: the scaffold is disposable; the embeds are not. Re-export, re-theme, or rebuild the AEM templates and nothing security-relevant moves.


3. The Shopify socket

FieldValue
OAuth authorityXano ↔ Shopify, brokered by the worker. Not an AEM integration, not a Webflow Data Client.
Token lifecyclePer-tenant short-lived Admin tokens, auto-refreshed before expiry, auto-migrated from legacy non-expiring grants. Survives Shopify's expiring-token mandate with no merchant action.
Surface mountingWorker-served blocks / Web Components on AEM pages: product data, cart, checkout handoff to Shopify checkout.
Conversion closeOrder webhook → worker → row. The purchase lands in the ledger, not in a nightly batch.

Hard precondition — the consent bridge. AEM is a headless surface, and every headless surface wires setTrackingConsent before any tracking or cart call. No consent signal, no fire. This is the one integration step that is not optional and not deferrable.

Invariant: no Shopify credential is ever present in AEM, the page, or the transport. The socket terminates in Xano; the page sees only its own session.


4. The Google socket

FieldValue
OAuth authorityXano ↔ Google ("Continue with Google" → worker callback). The consent a user approves is Google's sign-in — not AEM's, not Webflow's.
SignalsGA4 + Consent Mode v2. Conversion tags are consent-gated and revenue-weighted; Smart Bidding bids on a consented, flagged, real-revenue conversion.
SegmentationOne segment definition drives both activations — email and bidding — so the definitions cannot drift apart.

Boundary statement: analytics reads, never decides. BigQuery and predicted-LTV modeling sit downstream of the ledger and stay off the authorization path. Nothing in the analytics plane can grant, revoke, or transact.


5. The substrate contract — what AEM doesn't have

Three pieces, identical on AEM, Shopify, Webflow, or a packaged PWA:

Invariant: the JWKS endpoint is the piece that never moves — not in a re-platform, not in a substrate election, not in a vendor exit.


6. Substrate election — either/or, never hybrid

The identical grammar runs on either substrate. An enterprise picks one; it is a decision, not a migration project.

LayerCloudflare (live today)Adobe/Azure constellation
DeliveryCloudflare CDNAdobe-managed Fastly (bundled with AEM CS)
Gate + signerWorker, WebCrypto Ed25519Own Fastly Compute service, Fastly Secret Store
StateWorkers KVFastly KV Store
PayloadsR2R2 stays (S3-compatible, ciphertext, free egress) or Fastly Object Storage
System of recordXano (hosted)Xano Enterprise on the customer's Azure tenancy (AKS) — beside AEM CS, never inside it
ProofsJWKS on owned domainSame — no paper moves

Procurement reading of that table: almost every row lands on paper that already exists — the Adobe bundle, the Azure commitment. The one new agreement is the Fastly Compute + Secret Store service. The proofs row needs no paper at all.

EdDSA is substrate-neutral: certificates minted on either edge verify with the same client code. The kid is the only trace of which edge signed.


7. Delivery phases

PhaseEntry criteriaWhat works after itStill absent
1. Static scaffoldWebflow export in handAEM pages render the full design — templates + clientlibs, zero behaviorLogin, consent, commerce
2. Substrate layerWorker origin reachable; tenant configuredLogin, consent modal, nav, session contract live on AEM templatesCommerce, signals
3. Commerce + signalsConsent bridge verified; GA4 property + CMv2 confirmedShopify blocks transact; consent-gated tags feed Smart Bidding; conversions close to rowsNothing — this is the operating state
4. Substrate electionOptional; enterprise paper reviewSame system on Cloudflare or the Adobe/Azure constellation—

Phase 4 is deliberately last and deliberately optional: the election changes where the gate runs, not what the system does.


Demonstrated — phases 1–3 on a live AEMaaCS tenancy

Run on 2026-08-02 against an AEM as a Cloud Service environment (Edge Delivery + Universal Editor, xwalk boilerplate). Not a mockup — the adoption path above, executed:

The point-of-difference grid and the consent plane, served by AEM Edge Delivery

The Choose-your-view role picker — the entitlement plane — on the AEM page

For comparison, the same section on the Shopify store:

The same card grid on the Shopify storefront


8. Boundaries


Appendix — glossary

TermMeaning
MandateA scoped, revocable authorization under which an agent acts
Entitlement rowsubject × capability × asset; the unit of grant, revocation, and audit
Consent bridgeThe wiring that lands the user's consent state on a headless surface before any tracking or cart call
stack-loaderThe first script in the head; advertises and loads the behavior planes a surface uses