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.
Words and pictures, on Google Cloud Run
Price, stock and checkout
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
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
- storeOVRLD — commerce showcasethis site
- plumbing-demoClapet — plomberie et chauffagelive
- renovation-demoLinteau — rénovationlive
- blog-demoBlog demoplanned
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.
| Source | Topic | Received at | Status | Action |
|---|---|---|---|---|
| shopify | collections/update | 2026-10-31 23:03:07 UTC | requested | Featured (featured) · Rebuild requested for store |
| shopify | collections/update | 2026-10-31 23:03:05 UTC | requested | Floor & Mobility (floor-mobility) · Rebuild requested for store |
| shopify | collections/update | 2026-10-31 23:03:04 UTC | requested | Footwear (footwear) · Rebuild requested for store |
| shopify | collections/update | 2026-10-31 23:03:04 UTC | requested | Bottoms (bottoms) · Rebuild requested for store |
| shopify | collections/update | 2026-10-31 23:03:04 UTC | requested | Outerwear (outerwear) · Rebuild requested for store |
| shopify | products/update | 2026-10-31 23:03:04 UTC | requested | Training Sweatpants (training-sweatpants) · Rebuild requested for store |
| shopify | collections/update | 2026-10-31 23:03:04 UTC | requested | Tops (tops) · Rebuild requested for store |
| shopify | products/update | 2026-10-31 22:20:35 UTC | requested | Yoga 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.