Two sources. One rebuild.

Payload holds the words and pictures. Shopify holds price, stock and checkout. A build reads both and ships the pages as files on Cloudflare Workers. A change in either one starts that build.

Payload 4

Words and pictures, on Google Cloud Run

Shopify

Price, stock and checkout

Rebuild

GitHub Actions builds the pages with Astro on each publish in the CMS, each change in Shopify and each night. One build runs, one waits, and a burst joins the build that waits

Cloudflare Workers

Pages prebuilt as static files; only the cart and live preview run on demand

One Payload serves storeplumbing-demorenovation-demoblog-demo

Code/how-it-worksprerendered on Cloudflare at each deploy

One Payload, four domains.

One CMS holds the content for four sites. Every page, doc and article names its domain. One admin, one database.

domains

name · slug · url · kind · languages · defaultLocale · status

The webhook log, as the last build saw it.

Real rows · read from the CMS when this page was built

Shopify calls the CMS when a product, its stock or a collection changes. The CMS checks the signature, writes the call to webhook-events and asks for a rebuild; calls that arrive while a build waits join it.

Webhook events: the latest calls from Shopify
SourceTopicReceived atStatusAction
shopifycollections/update2026-10-31 23:03:07 UTCrequestedFeatured (featured) · Rebuild requested for store
shopifycollections/update2026-10-31 23:03:05 UTCrequestedFloor & Mobility (floor-mobility) · Rebuild requested for store
shopifycollections/update2026-10-31 23:03:04 UTCrequestedFootwear (footwear) · Rebuild requested for store
shopifycollections/update2026-10-31 23:03:04 UTCrequestedBottoms (bottoms) · Rebuild requested for store
shopifycollections/update2026-10-31 23:03:04 UTCrequestedOuterwear (outerwear) · Rebuild requested for store
shopifyproducts/update2026-10-31 23:03:04 UTCrequestedTraining Sweatpants (training-sweatpants) · Rebuild requested for store
shopifycollections/update2026-10-31 23:03:04 UTCrequestedTops (tops) · Rebuild requested for store
shopifyproducts/update2026-10-31 22:20:35 UTCrequestedYoga Mat (yoga-mat) · Rebuild requested for store

The stack, by version.

What runs where, as the architecture record pins it.

  • Astro 7.4.2

    The store’s pages: static output, Preact 11.0.2 islands, nanostores 1.5.5 for the cart.

  • @astrojs/cloudflare 14.4.2

    The web Worker on Cloudflare: static files, the cart route and live preview.

  • Payload 4.0.0-beta.4

    The CMS, pinned exactly, with Payload’s own sign-in for admins and visitors.

  • Google Cloud Run

    The CMS host: service showcase-cms in us-east5, Next standalone on Node 24.22, one instance at most, 512 MiB, scales to zero.

  • Postgres 18 on Neon Free

    The database, in AWS us-east-2, reached by a direct connection from the CMS.

  • Google Cloud Storage

    Media in the private bucket showcase-cms-media, through @payloadcms/storage-gcs.

  • @shopify/hydrogen 2026.10.2

    The Storefront client at build time and the cart handlers.

  • Node 24.22.1 · GitHub Actions

    Build and deploy: the deploy-web workflow runs on each push, each publish in the CMS, each change in Shopify and each night.

Open the CMS and look inside.

It runs on Google Cloud Run at showcase-cms-1065657380974.us-east5.run.app. Enter as a visitor to look around.

Bag

00 0 items

Loading your bag…