← back to Dw Marketing Reels
TK-10427: stage 2-card Collection Films ship artifacts (Path A push script + Path B paste snippet)
3f14cc3aec82d5e1582777a3c64e80552a9aa0fa · 2026-08-31 09:57:04 -0700 · Steve Abrams
Files touched
A storefront/staged-tk10427/PATH-A-push-command.shA storefront/staged-tk10427/PATH-B-paste-2card.liquid
Diff
commit 3f14cc3aec82d5e1582777a3c64e80552a9aa0fa
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 31 09:57:04 2026 -0700
TK-10427: stage 2-card Collection Films ship artifacts (Path A push script + Path B paste snippet)
---
storefront/staged-tk10427/PATH-A-push-command.sh | 59 ++++++++++++++
.../staged-tk10427/PATH-B-paste-2card.liquid | 95 ++++++++++++++++++++++
2 files changed, 154 insertions(+)
diff --git a/storefront/staged-tk10427/PATH-A-push-command.sh b/storefront/staged-tk10427/PATH-A-push-command.sh
new file mode 100644
index 0000000..82e1a8b
--- /dev/null
+++ b/storefront/staged-tk10427/PATH-A-push-command.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+# ==========================================================================
+# TK-10427 — Collection Films section → LIVE DW theme (PATH A, GATED)
+# STAGED ONLY. Do NOT run without Steve's go — this is a customer-facing
+# LIVE Shopify theme write to the production store.
+#
+# What it does: uploads dw-collection-films.liquid as a Shopify SECTION asset
+# (sections/dw-collection-films.liquid) into the live main theme 145121607731.
+# NOTE: Path A only PLACES THE SECTION FILE. It does NOT insert the section
+# into templates/index.json — that still needs one theme-editor "Add section"
+# OR a second scripted index.json edit. For a true zero-click ship, Path B
+# (paste Custom Liquid in the editor) is simpler for THIS one section.
+# Path A's real value = it clears the write_themes ticket class (TK-10311,
+# TK-10425) and proves the token can write theme code.
+#
+# ROLLBACK-FIRST (mandatory): the asset key does not exist on the live theme
+# today (verified: 0 film/dwcf assets among 436). So the undo is a DELETE of
+# the newly-created asset — but we still PULL-CURRENT-FIRST to be safe in case
+# a prior run left one, saving any existing value to a .bak before overwrite.
+# ==========================================================================
+set -euo pipefail
+
+DOMAIN="designer-laboratory-sandbox.myshopify.com"
+VER="2024-10"
+THEME_ID="145121607731" # live main theme carnegie-color-swatch
+ASSET_KEY="sections/dw-collection-films.liquid"
+SRC="$HOME/Projects/dw-marketing-reels/storefront/staged-tk10427/PATH-B-paste-2card.liquid"
+BAK="$HOME/Projects/dw-marketing-reels/storefront/staged-tk10427/ROLLBACK-current-asset.json"
+
+# Token: THEME token (…2954) — has write_theme_code / read_themes / write_themes.
+THEME_TOKEN="$(grep -E '^SHOPIFY_THEME_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2-)"
+
+echo "== 1. PULL-CURRENT-FIRST (rollback snapshot) =="
+curl -s "https://$DOMAIN/admin/api/$VER/themes/$THEME_ID/assets.json?asset%5Bkey%5D=$ASSET_KEY" \
+ -H "X-Shopify-Access-Token: $THEME_TOKEN" > "$BAK"
+if grep -q '"value"' "$BAK"; then
+ echo " Existing asset saved to $BAK — rollback = re-PUT that value."
+else
+ echo " No existing asset (expected). Rollback = DELETE the created asset:"
+ echo " curl -s -X DELETE \"https://$DOMAIN/admin/api/$VER/themes/$THEME_ID/assets.json?asset%5Bkey%5D=$ASSET_KEY\" -H \"X-Shopify-Access-Token: \$THEME_TOKEN\""
+fi
+
+echo "== 2. PUT the section asset (THE LIVE WRITE) =="
+python3 - "$SRC" "$ASSET_KEY" <<'PY' > /tmp/tk10427_put_body.json
+import json,sys
+key=sys.argv[2]; val=open(sys.argv[1]).read()
+print(json.dumps({"asset":{"key":key,"value":val}}))
+PY
+curl -s -X PUT "https://$DOMAIN/admin/api/$VER/themes/$THEME_ID/assets.json" \
+ -H "X-Shopify-Access-Token: $THEME_TOKEN" \
+ -H "Content-Type: application/json" \
+ --data-binary @/tmp/tk10427_put_body.json | python3 -c "import sys,json;d=json.load(sys.stdin);a=d.get('asset',{});print(' wrote key:',a.get('key'),'updated_at:',a.get('updated_at'))"
+
+echo "== 3. VERIFY =="
+curl -s "https://$DOMAIN/admin/api/$VER/themes/$THEME_ID/assets.json?asset%5Bkey%5D=$ASSET_KEY" \
+ -H "X-Shopify-Access-Token: $THEME_TOKEN" | python3 -c "import sys,json;v=json.load(sys.stdin).get('asset',{}).get('value','');print(' asset bytes:',len(v),'| has 2 videos:',v.count('<video')==2)"
+
+echo "DONE. Remember: still need to add this section to templates/index.json"
+echo "via the theme editor (Add section -> Collection Films) OR a second scripted edit."
diff --git a/storefront/staged-tk10427/PATH-B-paste-2card.liquid b/storefront/staged-tk10427/PATH-B-paste-2card.liquid
new file mode 100644
index 0000000..dd17c42
--- /dev/null
+++ b/storefront/staged-tk10427/PATH-B-paste-2card.liquid
@@ -0,0 +1,95 @@
+{%- comment -%}
+ DW Collection Films — homepage video band featuring the flip-book lookbooks.
+ Paste into: Online Store → Themes → Customize → Add section → Custom Liquid.
+ Self-contained (scoped styles). Videos + posters are served from marketing.designerwallcoverings.com.
+ Shop links are same-domain (relative), so they resolve on the live store.
+{%- endcomment -%}
+
+<style>
+ .dwcf { max-width: 1280px; margin: 0 auto; padding: 56px 20px; font-family: inherit; }
+ .dwcf__head { text-align: center; margin-bottom: 34px; }
+ .dwcf__eyebrow { font-size: 12px; letter-spacing: .28em; text-transform: uppercase; color: #9a8f80; margin: 0 0 10px; }
+ .dwcf__title { font-size: clamp(26px, 4vw, 40px); font-weight: 400; letter-spacing: .01em; margin: 0; color: #1a1a1a; }
+ /* auto-fit + centered so the grid stays balanced at 2 OR 3 cards (no orphan column when a card is held) */
+ .dwcf__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 384px)); justify-content: center; gap: 24px; margin-top: 34px; }
+ @media (max-width: 680px){ .dwcf__grid { grid-template-columns: minmax(0, 420px); } }
+ .dwcf__card { position: relative; border-radius: 6px; overflow: hidden; background: #efe9df; box-shadow: 0 1px 0 rgba(0,0,0,.06); }
+ .dwcf__vidwrap { position: relative; aspect-ratio: 16/9; background:#000; }
+ .dwcf__vidwrap video { position:absolute; inset:0; width:100%; height:100%; object-fit: cover; display:block; }
+ .dwcf__play { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; cursor:pointer; background: linear-gradient(180deg, rgba(0,0,0,.05), rgba(0,0,0,.35)); transition: opacity .25s; border:0; padding:0; width:100%; }
+ .dwcf__play:focus-visible { outline: 3px solid #fff; outline-offset: -3px; }
+ .dwcf__play svg { width:64px; height:64px; filter: drop-shadow(0 2px 8px rgba(0,0,0,.4)); }
+ .dwcf__meta { padding: 18px 20px 22px; }
+ .dwcf__name { font-size: 20px; margin: 0 0 4px; color:#1a1a1a; }
+ .dwcf__sub { font-size: 13px; color:#8a8072; margin: 0 0 14px; letter-spacing:.02em; }
+ .dwcf__cta { display:inline-block; font-size: 12px; letter-spacing:.16em; text-transform:uppercase; color:#1a1a1a; text-decoration:none; border-bottom:1px solid #1a1a1a; padding-bottom:2px; }
+ .dwcf__cta:hover { color:#7a6f5f; border-color:#7a6f5f; }
+</style>
+
+<section class="dwcf">
+ <div class="dwcf__head">
+ <p class="dwcf__eyebrow">Collection Films</p>
+ <h2 class="dwcf__title">Leaf Through Our Lookbooks</h2>
+ </div>
+ <div class="dwcf__grid">
+
+ <div class="dwcf__card">
+ <div class="dwcf__vidwrap">
+ <video preload="none" playsinline controls
+ poster="https://marketing.designerwallcoverings.com/public/collections/maya-romanoff-poster.jpg">
+ <source src="https://marketing.designerwallcoverings.com/reels/maya-romanoff-flipbook.mp4" type="video/mp4">
+ </video>
+ <button type="button" class="dwcf__play" onclick="var v=this.previousElementSibling; v.play(); this.style.display='none';" aria-label="Play video">
+ <svg viewBox="0 0 64 64" fill="none" aria-hidden="true"><circle cx="32" cy="32" r="31" fill="rgba(255,255,255,.92)"/><path d="M26 20l20 12-20 12z" fill="#1a1a1a"/></svg>
+ </button>
+ </div>
+ <div class="dwcf__meta">
+ <h3 class="dwcf__name">Maya Romanoff</h3>
+ <p class="dwcf__sub">A Study in Materials — beadwork, marquetry, metallic luster & natural fiber</p>
+ <a class="dwcf__cta" href="/collections/maya-romanoff">Shop the Collection</a>
+ </div>
+ </div>
+
+ <div class="dwcf__card">
+ <div class="dwcf__vidwrap">
+ <video preload="none" playsinline controls
+ poster="https://marketing.designerwallcoverings.com/public/collections/glitter-walls-poster.jpg">
+ <source src="https://marketing.designerwallcoverings.com/reels/glitter-walls-flipbook.mp4" type="video/mp4">
+ </video>
+ <button type="button" class="dwcf__play" onclick="var v=this.previousElementSibling; v.play(); this.style.display='none';" aria-label="Play video">
+ <svg viewBox="0 0 64 64" fill="none" aria-hidden="true"><circle cx="32" cy="32" r="31" fill="rgba(255,255,255,.92)"/><path d="M26 20l20 12-20 12z" fill="#1a1a1a"/></svg>
+ </button>
+ </div>
+ <div class="dwcf__meta">
+ <h3 class="dwcf__name">Glitter Walls</h3>
+ <p class="dwcf__sub">Bring the Sparkle Home — sequins & glass beads in gold, silver, black & jewel tones</p>
+ <a class="dwcf__cta" href="/collections/glitter-walls">Shop the Collection</a>
+ </div>
+ </div>
+
+ {%- comment -%}
+ Majilite Metallics card HELD (TK-10427): no live destination — /collections/majilite AND
+ /collections/majilite-metallics both 404 (line is sample/quote-only per TK-10425). Re-enable by
+ creating+publishing a Majilite collection, then uncomment this card and set the CTA href to its handle.
+ {%- endcomment -%}
+ {%- comment -%}
+ <div class="dwcf__card">
+ <div class="dwcf__vidwrap">
+ <video preload="none" playsinline controls
+ poster="https://marketing.designerwallcoverings.com/public/collections/majilite-metallics-poster.jpg">
+ <source src="https://marketing.designerwallcoverings.com/reels/majilite-metallics-flipbook.mp4" type="video/mp4">
+ </video>
+ <button type="button" class="dwcf__play" onclick="var v=this.previousElementSibling; v.play(); this.style.display='none';" aria-label="Play video">
+ <svg viewBox="0 0 64 64" fill="none" aria-hidden="true"><circle cx="32" cy="32" r="31" fill="rgba(255,255,255,.92)"/><path d="M26 20l20 12-20 12z" fill="#1a1a1a"/></svg>
+ </button>
+ </div>
+ <div class="dwcf__meta">
+ <h3 class="dwcf__name">Majilite Metallics</h3>
+ <p class="dwcf__sub">A Colorway Story in Four Metals — faux-leather metallics on walls & furniture</p>
+ <a class="dwcf__cta" href="/collections/majilite">Shop the Collection</a>
+ </div>
+ </div>
+ {%- endcomment -%}
+
+ </div>
+</section>
← 20b07bf auto-data-snapshot: 2026-08-31T07:38:15 (3 data files) — dat
·
back to Dw Marketing Reels
·
TK-10427: stage all-3 Collection Films (Majilite smart-colle 5b2c0d3 →