Live demo widget (Cloudinary image)
Published key ab0ea12b-af32-4d61-90b2-6af534f87290---widget-27eec7b6-669a-4ceb-b37c-14fdb7abb743 — fetched on the server with a 60s upstream cache. The RuleCMS token stays in RULECMS_TOKEN (never sent to the browser).
Acceptance check
After npm run build && npm start:
curl -s http://localhost:3000/prefetched | grep -o '<img[^>]*>'
Expected: at least one <img> with a res.cloudinary.com URL, plus srcset and dimension or aspect markup.