← back to Designer Wallcoverings
Add script to push carousel + specs fixes to Shopify theme
1784bd56213483db093b70b01ac5a31704f38f3e · 2026-06-22 22:39:58 -0700 · Steve Abrams
Files touched
A shopify/push-carousel-fix.sh
Diff
commit 1784bd56213483db093b70b01ac5a31704f38f3e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jun 22 22:39:58 2026 -0700
Add script to push carousel + specs fixes to Shopify theme
---
shopify/push-carousel-fix.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/shopify/push-carousel-fix.sh b/shopify/push-carousel-fix.sh
new file mode 100755
index 00000000..6d60f344
--- /dev/null
+++ b/shopify/push-carousel-fix.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env bash
+# Push carousel fix + remove duplicate specs to Shopify LIVE theme
+# - Fix: .product-recommendations-wrapper--right display: block → inline-block (horizontal layout)
+# - Fix: Remove duplicate specs rendering (product-specs + product-description-meta)
+set -euo pipefail
+cd "$(dirname "$0")"
+
+STORE="designer-laboratory-sandbox.myshopify.com"
+API="2024-10"
+SECRETS="$HOME/Projects/secrets-manager/.env"
+
+TOK="${THEME_TOKEN:-$(grep -hE '^SHOPIFY_THEME_TOKEN=' "$SECRETS" 2>/dev/null | head -1 | cut -d= -f2- | tr -d '"'"'"' ')}"
+[ -z "$TOK" ] && { echo "❌ No theme token. Get SHOPIFY_THEME_TOKEN from secrets"; exit 1; }
+echo "✓ token …${TOK: -4}"
+
+echo "📋 Uploading theme files to LIVE theme..."
+
+python3 - "$STORE" "$API" "$TOK" <<'PY'
+import sys, json, urllib.request, urllib.error
+import os.path
+
+store, api, tok = sys.argv[1:4]
+H = {"X-Shopify-Access-Token": tok, "Content-Type": "application/json"}
+
+def api_get(url):
+ try:
+ return json.load(urllib.request.urlopen(urllib.request.Request(url, headers=H)))
+ except urllib.error.HTTPError as e:
+ print(f"❌ API GET {url} failed: {e.code} {e.read().decode()[:200]}")
+ sys.exit(1)
+
+def api_put(url, data):
+ try:
+ req = urllib.request.Request(url, data=json.dumps(data).encode(), headers=H, method='PUT')
+ return json.load(urllib.request.urlopen(req))
+ except urllib.error.HTTPError as e:
+ print(f"❌ API PUT failed: {e.code} {e.read().decode()[:400]}")
+ sys.exit(1)
+
+# Find LIVE theme
+themes = api_get(f"https://{store}/admin/api/{api}/themes.json")["themes"]
+live_theme = [t for t in themes if t["role"] == "main"][0]
+theme_id = live_theme["id"]
+print(f"✓ Found LIVE theme: {live_theme['name']} (ID: {theme_id})")
+
+# Files to upload
+files = {
+ "assets/theme.css.liquid": "theme-5.0-duplicate/assets/theme.css.liquid",
+ "snippets/product.liquid": "theme-5.0-duplicate/snippets/product.liquid",
+}
+
+for asset_key, local_path in files.items():
+ if not os.path.isfile(local_path):
+ print(f"❌ File not found: {local_path}")
+ sys.exit(1)
+
+ with open(local_path) as f:
+ content = f.read()
+
+ print(f"\n📝 Uploading {asset_key} ({len(content)} bytes)...")
+ result = api_put(
+ f"https://{store}/admin/api/{api}/themes/{theme_id}/assets.json",
+ {"asset": {"key": asset_key, "value": content}}
+ )
+
+ if "asset" in result and "key" in result["asset"]:
+ print(f" ✓ {asset_key} uploaded")
+ else:
+ print(f" ❌ {asset_key} failed: {result}")
+ sys.exit(1)
+
+print("\n✅ All files uploaded successfully!")
+print("Theme changes are now LIVE on https://www.designerwallcoverings.com/")
+PY
← 5b833a5d audit: Full specs deduplication scan across 250 active produ
·
back to Designer Wallcoverings
·
Add 50% opaque text backgrounds to all collection page heade fa835356 →