[object Object]

← back to Designer Wallcoverings

Refactor hardcoded Shopify Admin token to process.env.SHOPIFY_ADMIN_TOKEN

ad11ae9c6addc82c299efaa6743ab5ed36407b00 · 2026-05-18 16:36:08 -0700 · Steve

Replaces the literal shpat_ token in 208 code files (JS/TS/TSX/Python/shell)
with environment-variable reads. Python files get an import os added where
missing. No behavior change when SHOPIFY_ADMIN_TOKEN is exported.

Prerequisite for git-history scrub.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit ad11ae9c6addc82c299efaa6743ab5ed36407b00
Author: Steve <steve@designerwallcoverings.com>
Date:   Mon May 18 16:36:08 2026 -0700

    Refactor hardcoded Shopify Admin token to process.env.SHOPIFY_ADMIN_TOKEN
    
    Replaces the literal shpat_ token in 208 code files (JS/TS/TSX/Python/shell)
    with environment-variable reads. Python files get an import os added where
    missing. No behavior change when SHOPIFY_ADMIN_TOKEN is exported.
    
    Prerequisite for git-history scrub.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 DW-Agents/dw-agents/agent-legal-team/legal-agent.ts     |   2 +-
 .../ImportNewSkufromURL/scripts/rwltd-gemini-cron.js    |   2 +-
 DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js   |   2 +-
 .../PhillipeRomanoTagger/consolidate-pr-vendors.js      |   2 +-
 DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js    |   2 +-
 .../ShopifyCalendarNext/scripts/activate-first-two.ts   |   2 +-
 .../src/app/api/analyze-product/route.ts                |   2 +-
 DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts   |   2 +-
 .../__pycache__/color-batch-cleaner.cpython-314.pyc     | Bin 0 -> 31748 bytes
 .../__pycache__/generate-room-settings.cpython-314.pyc  | Bin 0 -> 7234 bytes
 DW-Programming/activate-versace-drafts.js               |   2 +-
 DW-Programming/activate-versace-vi.js                   |   2 +-
 DW-Programming/anna-french-room-settings.js             |   2 +-
 DW-Programming/anna-french-shopify-push.js              |   2 +-
 DW-Programming/archive-hollywood-discontinued.js        |   2 +-
 DW-Programming/archive-thibaut-discontinued.js          |   2 +-
 DW-Programming/arte-image-backfill.js                   |   2 +-
 DW-Programming/arte-width-from-shopify.js               |   2 +-
 DW-Programming/backfill-schumacher-images.js            |   2 +-
 DW-Programming/china-seas-design-tagger.js              |   2 +-
 DW-Programming/cleanup-all-body-html.js                 |   2 +-
 DW-Programming/cleanup-body-html-all-vendors.js         |   2 +-
 DW-Programming/cleanup-pr-body-html-bulk.js             |   2 +-
 DW-Programming/cleanup-pr-body-html.js                  |   2 +-
 DW-Programming/color-batch-cleaner.py                   |   2 +-
 DW-Programming/color-collection-cleaner.js              |   2 +-
 DW-Programming/crop-grs-fix-top-logo.js                 |   2 +-
 DW-Programming/crop-grs-images.js                       |   2 +-
 DW-Programming/dwc-bulk-audit.js                        |   2 +-
 DW-Programming/dwc-legacy-audit.js                      |   2 +-
 DW-Programming/dwjs-phase2-scrape-specs.js              |   2 +-
 DW-Programming/fix-blue-collection.js                   |   2 +-
 DW-Programming/fix-dwkk-zero-price-variants.js          |   2 +-
 DW-Programming/fix-empty-body-html.js                   |   2 +-
 DW-Programming/fix-malibu-body-html-retry.js            |   2 +-
 DW-Programming/fix-malibu-body-html.js                  |   2 +-
 DW-Programming/fix-phillipe-romano-vendors.js           |   2 +-
 DW-Programming/fix-product-type-by-width.js             |   2 +-
 DW-Programming/fix-product-type-tags.js                 |   2 +-
 DW-Programming/fix-sandberg-body.js                     |   2 +-
 DW-Programming/fix-single-variant-pricing.js            |   2 +-
 DW-Programming/fix-thibaut-anna-french.js               |   2 +-
 DW-Programming/fix-thibaut-titles.js                    |   2 +-
 DW-Programming/generate-room-settings.py                |   3 ++-
 DW-Programming/gls-gemini-retry.js                      |   2 +-
 DW-Programming/gls-product-cleanup.js                   |   2 +-
 DW-Programming/gls-product-processor.js                 |   2 +-
 DW-Programming/gls-product-updater.js                   |   2 +-
 DW-Programming/gls-retry-failed.js                      |   2 +-
 DW-Programming/hollywood-hex-extract.js                 |   2 +-
 DW-Programming/interior-design-ai-tagger.js             |   2 +-
 DW-Programming/interior-design-tagger.js                |   2 +-
 DW-Programming/launch-versace-vi.js                     |   2 +-
 DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js |   2 +-
 .../maya-romanoff-updater/maya-romanoff-updater.js      |   2 +-
 DW-Programming/maya-romanoff-updater/server.js          |   2 +-
 DW-Programming/migrate-dwkk-to-dwpr.js                  |   2 +-
 .../nextjs-liquid-app/app/api/bulk-import/route.ts      |   2 +-
 .../nextjs-liquid-app/app/api/product-action/route.ts   |   2 +-
 .../app/api/products/[id]/fetch-mfr/route.ts            |   2 +-
 .../app/api/products/[id]/status/route.ts               |   2 +-
 .../nextjs-liquid-app/app/api/recently-updated/route.ts |   2 +-
 .../nextjs-liquid-app/app/api/update-product/route.ts   |   2 +-
 .../nextjs-liquid-app/app/api/vendor-items/route.ts     |   2 +-
 DW-Programming/nextjs-liquid-app/backfill-metafields.js |   2 +-
 DW-Programming/phillipe-romano-cleanup.js               |   2 +-
 DW-Programming/phillipe-romano-vendor-cleanup.js        |   2 +-
 DW-Programming/phillipe-romano-vendor-fix.js            |   2 +-
 DW-Programming/push-china-seas-metafields.js            |   2 +-
 DW-Programming/push-color-hex-metafields.js             |   2 +-
 DW-Programming/push-maya-romanoff-to-shopify.js         |   2 +-
 DW-Programming/push-versa-specs-to-shopify.js           |   2 +-
 DW-Programming/push-versace-vi.js                       |   2 +-
 DW-Programming/remove-damask-from-florals.js            |   2 +-
 DW-Programming/restore-blue-tags.js                     |   2 +-
 .../__pycache__/batch-room-gen-v2.cpython-314.pyc       | Bin 0 -> 22884 bytes
 .../__pycache__/batch-room-generator.cpython-314.pyc    | Bin 0 -> 22808 bytes
 .../__pycache__/batch-room-settings.cpython-314.pyc     | Bin 0 -> 21052 bytes
 .../generate-phillipe-romano-rooms.cpython-314.pyc      | Bin 0 -> 18437 bytes
 .../generate-rooms-DWTT-80352.cpython-314.pyc           | Bin 0 -> 8503 bytes
 DW-Programming/room-setting-app/batch-room-gen-v2.py    |   2 +-
 DW-Programming/room-setting-app/batch-room-generator.py |   2 +-
 DW-Programming/room-setting-app/batch-room-settings.py  |   2 +-
 .../room-setting-app/generate-phillipe-romano-rooms.py  |   2 +-
 .../room-setting-app/generate-rooms-DWTT-80352.py       |   3 ++-
 .../__pycache__/batch-room-generator.cpython-314.pyc    | Bin 0 -> 24695 bytes
 .../room-setting-app/scripts/batch-room-generator.js    |   2 +-
 .../room-setting-app/scripts/batch-room-generator.py    |   2 +-
 DW-Programming/scrape-versace-images.js                 |   2 +-
 DW-Programming/update-dwjs-specs-final.js               |   2 +-
 DW-Programming/update-dwjs-specs-phase2.js              |   2 +-
 DW-Programming/update-dwjs-specs-phase3.js              |   2 +-
 DW-Programming/update-dwjs-specs-phase4.js              |   2 +-
 DW-Programming/update-dwjs-specs.js                     |   2 +-
 .../thibaut-crawler/sync-shopify-to-catalog.js          |   2 +-
 .../thibaut-crawler/sync-thibaut-skus.js                |   2 +-
 DW-Programming/verify-versace.js                        |   2 +-
 DW-Programming/versace-image-scraper.js                 |   2 +-
 DW-Programming/versace-image-uploader.js                |   2 +-
 DW-Websites/shop-by-color/fetch-colors.js               |   2 +-
 .../__pycache__/batch-room-generator.cpython-314.pyc    | Bin 0 -> 19815 bytes
 scripts/__pycache__/batch-room-settings.cpython-314.pyc | Bin 0 -> 17534 bytes
 scripts/analyze-fabric-wallcovering.js                  |   2 +-
 scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24  |   2 +-
 scripts/batch-room-generator.py                         |   2 +-
 scripts/batch-room-settings.py                          |   2 +-
 scripts/brand-mckenzie-ai-analysis.ts                   |   2 +-
 scripts/brand-mckenzie-full-scrape.ts                   |   2 +-
 scripts/brand-mckenzie-full-update.ts                   |   2 +-
 scripts/brand-mckenzie-recrawl.ts                       |   2 +-
 scripts/build-collections-directory.js                  |   2 +-
 scripts/collection-consolidation-phase2.js              |   2 +-
 scripts/collection-consolidation-phase3.js              |   2 +-
 scripts/collection-description-writer.js                |   2 +-
 scripts/collections-cleanup.js                          |   2 +-
 scripts/collections-cover-images.js                     |   2 +-
 scripts/collections-phase5-audit.js                     |   2 +-
 scripts/collections-phase5-publish.js                   |   2 +-
 scripts/dedupe-spin-gifs.js                             |   2 +-
 scripts/dwkk-zero-price-cleanup.js                      |   2 +-
 scripts/dwkk-zero-price-fix.js                          |   2 +-
 scripts/dwtt-body-to-metafields.js                      |   2 +-
 scripts/fix-brand-mckenzie-leadtime.ts                  |   2 +-
 scripts/fix-collection-trailing-artifacts.js            |   2 +-
 scripts/fix-dwkk-zero-price.js                          |   2 +-
 scripts/fix-fabric-wallcovering-titles.js               |   2 +-
 scripts/fix-fabric-wallcovering-v2.js                   |   2 +-
 scripts/fix-fabric-wallcovering-v3.js                   |   2 +-
 scripts/fix-fabrics-plural-graphql.sh                   |   2 +-
 scripts/fix-fabrics-plural-titles-v2.js                 |   2 +-
 scripts/fix-fabrics-plural-titles-v3.js                 |   2 +-
 scripts/fix-fabrics-plural-titles.js                    |   2 +-
 scripts/fix-fabrics-plural-titles.sh                    |   2 +-
 scripts/grs-image-crop.js                               |   2 +-
 scripts/interior-design-tags.js                         |   2 +-
 scripts/kill-wallpaper-word.js                          |   2 +-
 scripts/mfr-sku-bulk-update.js                          |   2 +-
 scripts/populate-dwtt-mfr-sku-active.js                 |   2 +-
 scripts/populate-dwtt-mfr-sku-from-catalog.js           |   2 +-
 scripts/populate-dwtt-mfr-sku.js                        |   2 +-
 scripts/populate-mfr-sku-metafield.js                   |   2 +-
 scripts/rw-upload-room-settings.js                      |   2 +-
 scripts/shopify-swatch-spin.js                          |   2 +-
 scripts/standardize-product-types-bulk.js               |   2 +-
 scripts/standardize-product-types.js                    |   2 +-
 scripts/supplier-mfr-bulk-push.js                       |   2 +-
 scripts/surface-stick-backfill.js                       |   2 +-
 scripts/sync-shopify-to-postgres.js                     |   2 +-
 scripts/update-jim-dultz-shopify.js                     |   2 +-
 shopify/scripts/add-missing-samples-v2.js               |   2 +-
 shopify/scripts/arte-dashboard/bulk-title-updater.js    |   2 +-
 shopify/scripts/arte-dashboard/fetch-missing-skus.js    |   2 +-
 shopify/scripts/arte-dashboard/populate-mapping.js      |   2 +-
 shopify/scripts/arte-dashboard/server.js                |   2 +-
 shopify/scripts/arte-update-mfr-sku.js                  |   2 +-
 shopify/scripts/audit-novasuede-new.js                  |   2 +-
 shopify/scripts/batch-room-settings.py                  |   2 +-
 .../scripts/batch-room-settings/batch-room-generator.js |   2 +-
 shopify/scripts/bespoke-updater/server.js               |   2 +-
 shopify/scripts/create-missing-sample-variants.js       |   2 +-
 shopify/scripts/create-novasuede-rosewater.js           |   2 +-
 .../dedup-phillipe-romano.js.DISABLED-2026-04-24        |   2 +-
 shopify/scripts/dwkk-zero-price-cleanup.js              |   2 +-
 shopify/scripts/dwvs-activate-ready-drafts.js           |   2 +-
 shopify/scripts/dwvs-import-catalog-only.js             |   2 +-
 shopify/scripts/dwvs-original-series-apply.js           |   2 +-
 shopify/scripts/dwvs-reconcile-mfr.js                   |   2 +-
 shopify/scripts/dwvs-versace-csv-export.js              |   2 +-
 shopify/scripts/dwwd-roll-length/fix-orphans.js         |   2 +-
 shopify/scripts/dwwd-roll-length/run.js                 |   2 +-
 shopify/scripts/fix-dwkk-zero-price-variants.js         |   2 +-
 shopify/scripts/fix-dwkk-zero-price.js                  |   2 +-
 shopify/scripts/fix-missing-sample-variants.js          |   2 +-
 shopify/scripts/fix-missing-samples.js                  |   2 +-
 shopify/scripts/fix-sample-inventory-only.js            |   2 +-
 shopify/scripts/fix-sample-inventory.js                 |   2 +-
 shopify/scripts/fix-samples-graphql.js                  |   2 +-
 shopify/scripts/fix-zero-inventory-samples.js           |   2 +-
 shopify/scripts/gemini-catalog-tagger.js                |   2 +-
 shopify/scripts/gemini-tag-engine/index.js              |   2 +-
 shopify/scripts/hollywood-tag-enrichment.js             |   2 +-
 shopify/scripts/interior-design-tagger.js               |   2 +-
 shopify/scripts/inventory-set-2026.js                   |   2 +-
 shopify/scripts/koroseal-batch-cron.js                  |   2 +-
 shopify/scripts/koroseal-enhanced-update.js             |   2 +-
 shopify/scripts/koroseal-mfr-from-handles.js            |   2 +-
 shopify/scripts/koroseal-mfr-populator.js               |   2 +-
 shopify/scripts/kravet-full-monty-single.js             |   2 +-
 shopify/scripts/la-walls-image-sync.js                  |   2 +-
 shopify/scripts/migrate-barcode-to-mfr-sku.py           |   3 ++-
 shopify/scripts/migrate-mckenzie-global-to-custom.js    |   2 +-
 .../nina-campbell-full-monty-fix.js.DISABLED-2026-04-24 |   2 +-
 shopify/scripts/paul-montgomery-image-sync.js           |   2 +-
 shopify/scripts/push-fire-rating-metafields.js          |   2 +-
 shopify/scripts/push-pattern-repeat-metafields.js       |   2 +-
 shopify/scripts/resume-sample-variant-creation.js       |   2 +-
 shopify/scripts/revert-dwcy-pass2.js                    |   2 +-
 shopify/scripts/revert-dwcy-to-dwc.js                   |   2 +-
 shopify/scripts/romo-lookup.js                          |   2 +-
 shopify/scripts/sample-only-price-match.js              |   2 +-
 shopify/scripts/sample-only-status-audit.js             |   2 +-
 shopify/scripts/sandberg-add-bolt-fix-legacy.js         |   2 +-
 shopify/scripts/sandberg-add-bolt-variants.js           |   2 +-
 shopify/scripts/sandberg-add-mural-variants.js          |   2 +-
 ...sandberg-archive-discontinued.js.DISABLED-2026-04-24 |   2 +-
 shopify/scripts/sandberg-william-morris-weight-4lb.js   |   2 +-
 shopify/scripts/sandberg-wm-add-wallcovering-title.js   |   2 +-
 shopify/scripts/sandberg-wm-price-audit.js              |   2 +-
 shopify/scripts/sandberg-wm-pull-full.js                |   2 +-
 shopify/scripts/scan-missing-samples.js                 |   2 +-
 shopify/scripts/sync-shopify-products.js                |   2 +-
 shopify/scripts/update-brand-mckenzie-vendor.js         |   2 +-
 shopify/scripts/update-mckenzie-delivery.js             |   2 +-
 shopify/scripts/update-rop-mfr.py                       |   3 ++-
 shopify/scripts/wm-add-bolt-variants.js                 |   2 +-
 .../wm-archive-empty-title.js.DISABLED-2026-04-24       |   2 +-
 shopify/scripts/zoffany-ai-enrich-push.js               |   2 +-
 shopify/scripts/zoffany-full-monty-20.js                |   2 +-
 218 files changed, 212 insertions(+), 208 deletions(-)

diff --git a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
index baac08b2..b7e5016c 100644
--- a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
+++ b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
@@ -151,7 +151,7 @@ async function reportToCFO(violations: any[]) {
 }
 
 const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-07';
 
 const anthropic = new Anthropic({
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
index 4ddefc66..09865f8f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
@@ -11,7 +11,7 @@ const https = require('https');
 const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
 
diff --git a/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js b/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
index 118d6c6a..d2f7368f 100644
--- a/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
+++ b/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
@@ -14,7 +14,7 @@ const https = require('https');
 
 // --- Configuration ---
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js b/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
index 1741f4af..972bea9e 100644
--- a/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
+++ b/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
@@ -16,7 +16,7 @@ const https = require('https');
 
 // --- Configuration ---
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js b/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
index 0b19cf8b..40e3bf3e 100644
--- a/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
+++ b/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
@@ -10,7 +10,7 @@
 const https = require('https');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 function shopifyGraphQL(query, variables = {}) {
diff --git a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
index f2666d62..bccc7150 100644
--- a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
+++ b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
@@ -1,7 +1,7 @@
 import { Pool } from 'pg';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 const pool = new Pool({
   connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
diff --git a/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts b/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
index f3798e2e..bcefaada 100644
--- a/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
@@ -10,7 +10,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 // Fetch product from Shopify
diff --git a/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts b/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
index 6e55d769..89a6f89e 100644
--- a/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
@@ -1,5 +1,5 @@
 const SHOPIFY_DOMAIN = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 
 export async function shopifyGraphQL(query: string, variables: Record<string, any> = {}) {
   const response = await fetch(`https://${SHOPIFY_DOMAIN}/admin/api/2024-01/graphql.json`, {
diff --git a/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc b/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc
new file mode 100644
index 00000000..9a20ef37
Binary files /dev/null and b/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc differ
diff --git a/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc b/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..bb4eb73d
Binary files /dev/null and b/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc differ
diff --git a/DW-Programming/activate-versace-drafts.js b/DW-Programming/activate-versace-drafts.js
index 317d9981..0600c42c 100644
--- a/DW-Programming/activate-versace-drafts.js
+++ b/DW-Programming/activate-versace-drafts.js
@@ -8,7 +8,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
 const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
diff --git a/DW-Programming/activate-versace-vi.js b/DW-Programming/activate-versace-vi.js
index dbd0d969..a82876aa 100644
--- a/DW-Programming/activate-versace-vi.js
+++ b/DW-Programming/activate-versace-vi.js
@@ -16,7 +16,7 @@ const { Client } = require('pg');
 
 // ── Config ──────────────────────────────────────────────────────────────
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
 const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
diff --git a/DW-Programming/anna-french-room-settings.js b/DW-Programming/anna-french-room-settings.js
index cada4bfa..6cbd8a77 100644
--- a/DW-Programming/anna-french-room-settings.js
+++ b/DW-Programming/anna-french-room-settings.js
@@ -20,7 +20,7 @@ const path = require('path');
 
 const ROOM_API_BASE = 'http://45.61.58.125:3075';
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/anna-french-shopify-push.js b/DW-Programming/anna-french-shopify-push.js
index 057cbcc8..8433b70f 100644
--- a/DW-Programming/anna-french-shopify-push.js
+++ b/DW-Programming/anna-french-shopify-push.js
@@ -18,7 +18,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/archive-hollywood-discontinued.js b/DW-Programming/archive-hollywood-discontinued.js
index fc33fdc8..88336fe7 100644
--- a/DW-Programming/archive-hollywood-discontinued.js
+++ b/DW-Programming/archive-hollywood-discontinued.js
@@ -8,7 +8,7 @@
 const fs = require('fs');
 const https = require('https');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/archive-thibaut-discontinued.js b/DW-Programming/archive-thibaut-discontinued.js
index 7a4399c2..1b968ca6 100644
--- a/DW-Programming/archive-thibaut-discontinued.js
+++ b/DW-Programming/archive-thibaut-discontinued.js
@@ -12,7 +12,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 
diff --git a/DW-Programming/arte-image-backfill.js b/DW-Programming/arte-image-backfill.js
index d5542b61..e44e6249 100644
--- a/DW-Programming/arte-image-backfill.js
+++ b/DW-Programming/arte-image-backfill.js
@@ -5,7 +5,7 @@
 const https = require('https');
 const { Client } = require('pg');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const BATCH_SIZE = 25; // 25 products per GraphQL query (keeps cost manageable)
 const DELAY_MS = 600; // Rate limit safety
diff --git a/DW-Programming/arte-width-from-shopify.js b/DW-Programming/arte-width-from-shopify.js
index eb634d60..e1518ac8 100644
--- a/DW-Programming/arte-width-from-shopify.js
+++ b/DW-Programming/arte-width-from-shopify.js
@@ -10,7 +10,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 
 function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
diff --git a/DW-Programming/backfill-schumacher-images.js b/DW-Programming/backfill-schumacher-images.js
index 16bdae5f..71fa24f2 100644
--- a/DW-Programming/backfill-schumacher-images.js
+++ b/DW-Programming/backfill-schumacher-images.js
@@ -16,7 +16,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function shopifyGraphQL(query) {
   return new Promise((resolve, reject) => {
diff --git a/DW-Programming/china-seas-design-tagger.js b/DW-Programming/china-seas-design-tagger.js
index c97212e9..f42dbed9 100644
--- a/DW-Programming/china-seas-design-tagger.js
+++ b/DW-Programming/china-seas-design-tagger.js
@@ -12,7 +12,7 @@ const { Pool } = require('pg');
 // --- Config ---
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 const BATCH_SIZE = 100;
diff --git a/DW-Programming/cleanup-all-body-html.js b/DW-Programming/cleanup-all-body-html.js
index e845aadf..ee58d2e4 100644
--- a/DW-Programming/cleanup-all-body-html.js
+++ b/DW-Programming/cleanup-all-body-html.js
@@ -12,7 +12,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const DRY_RUN = process.argv.includes('--dry-run');
 const LIMIT = (() => { const i = process.argv.indexOf('--limit'); return i >= 0 ? parseInt(process.argv[i + 1]) : 500; })();
diff --git a/DW-Programming/cleanup-body-html-all-vendors.js b/DW-Programming/cleanup-body-html-all-vendors.js
index cf5e9642..23c0cd8e 100644
--- a/DW-Programming/cleanup-body-html-all-vendors.js
+++ b/DW-Programming/cleanup-body-html-all-vendors.js
@@ -12,7 +12,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/cleanup-pr-body-html-bulk.js b/DW-Programming/cleanup-pr-body-html-bulk.js
index 0b0b62bc..adc54a33 100644
--- a/DW-Programming/cleanup-pr-body-html-bulk.js
+++ b/DW-Programming/cleanup-pr-body-html-bulk.js
@@ -11,7 +11,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const VENDOR = 'Phillipe Romano';
 
diff --git a/DW-Programming/cleanup-pr-body-html.js b/DW-Programming/cleanup-pr-body-html.js
index 684bf470..101ee9c4 100644
--- a/DW-Programming/cleanup-pr-body-html.js
+++ b/DW-Programming/cleanup-pr-body-html.js
@@ -10,7 +10,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const VENDOR = 'Phillipe Romano';
 const MAX_RETRIES = 5;
diff --git a/DW-Programming/color-batch-cleaner.py b/DW-Programming/color-batch-cleaner.py
index e184e9b1..60ecb4fd 100644
--- a/DW-Programming/color-batch-cleaner.py
+++ b/DW-Programming/color-batch-cleaner.py
@@ -24,7 +24,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed
 # --- Config ---
 GEMINI_KEY = os.environ.get('GEMINI_API_KEY', '')
 SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com'
-SHOPIFY_TOKEN = '***REMOVED***'
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 API_VERSION = '2024-01'
 SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}'
 
diff --git a/DW-Programming/color-collection-cleaner.js b/DW-Programming/color-collection-cleaner.js
index f67e96f5..e6b3a942 100644
--- a/DW-Programming/color-collection-cleaner.js
+++ b/DW-Programming/color-collection-cleaner.js
@@ -10,7 +10,7 @@
 const https = require('https');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const GEMINI_KEY = '${GOOGLE_API_KEY}'; // billed key - free tier quota exceeded
 
diff --git a/DW-Programming/crop-grs-fix-top-logo.js b/DW-Programming/crop-grs-fix-top-logo.js
index 183dbc59..9e22709d 100644
--- a/DW-Programming/crop-grs-fix-top-logo.js
+++ b/DW-Programming/crop-grs-fix-top-logo.js
@@ -15,7 +15,7 @@ const path = require('path');
 const { execFileSync } = require('child_process');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const PROGRESS_LOG = '/tmp/grs-fix-top-logo.log';
 const WORK_DIR = '/tmp/grs-fix-work';
diff --git a/DW-Programming/crop-grs-images.js b/DW-Programming/crop-grs-images.js
index 88017a59..db53d6d4 100644
--- a/DW-Programming/crop-grs-images.js
+++ b/DW-Programming/crop-grs-images.js
@@ -14,7 +14,7 @@ const path = require('path');
 const { execFileSync } = require('child_process');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const PROGRESS_LOG = '/tmp/grs-crop-progress.log';
 const WORK_DIR = '/tmp/grs-crop-work';
diff --git a/DW-Programming/dwc-bulk-audit.js b/DW-Programming/dwc-bulk-audit.js
index 77c0e138..8aad59af 100644
--- a/DW-Programming/dwc-bulk-audit.js
+++ b/DW-Programming/dwc-bulk-audit.js
@@ -9,7 +9,7 @@ const { Client } = require('pg');
 const fs = require('fs');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 
 function graphql(query) {
diff --git a/DW-Programming/dwc-legacy-audit.js b/DW-Programming/dwc-legacy-audit.js
index 79baa792..4f0d709a 100644
--- a/DW-Programming/dwc-legacy-audit.js
+++ b/DW-Programming/dwc-legacy-audit.js
@@ -9,7 +9,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 
 function graphql(query) {
diff --git a/DW-Programming/dwjs-phase2-scrape-specs.js b/DW-Programming/dwjs-phase2-scrape-specs.js
index a57a04a5..95b76074 100644
--- a/DW-Programming/dwjs-phase2-scrape-specs.js
+++ b/DW-Programming/dwjs-phase2-scrape-specs.js
@@ -13,7 +13,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-phase2-scrape.log';
diff --git a/DW-Programming/fix-blue-collection.js b/DW-Programming/fix-blue-collection.js
index 354b3a4a..c3123c7b 100644
--- a/DW-Programming/fix-blue-collection.js
+++ b/DW-Programming/fix-blue-collection.js
@@ -8,7 +8,7 @@
 const https = require('https');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const COLLECTION_ID = 95278104641;
diff --git a/DW-Programming/fix-dwkk-zero-price-variants.js b/DW-Programming/fix-dwkk-zero-price-variants.js
index b4d142a7..da1e5771 100644
--- a/DW-Programming/fix-dwkk-zero-price-variants.js
+++ b/DW-Programming/fix-dwkk-zero-price-variants.js
@@ -8,7 +8,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
 const DELAY_MS = 600;
diff --git a/DW-Programming/fix-empty-body-html.js b/DW-Programming/fix-empty-body-html.js
index 4c847d99..42aaafe2 100644
--- a/DW-Programming/fix-empty-body-html.js
+++ b/DW-Programming/fix-empty-body-html.js
@@ -20,7 +20,7 @@ const { Client } = require('pg');
 // ─── Config ──────────────────────────────────────────────────────────────────
 const SHOPIFY = {
   shop: 'designer-laboratory-sandbox.myshopify.com',
-  token: '***REMOVED***',
+  token: process.env.SHOPIFY_ADMIN_TOKEN,
   apiVersion: '2024-10'
 };
 
diff --git a/DW-Programming/fix-malibu-body-html-retry.js b/DW-Programming/fix-malibu-body-html-retry.js
index 5ba98e0e..523c2319 100644
--- a/DW-Programming/fix-malibu-body-html-retry.js
+++ b/DW-Programming/fix-malibu-body-html-retry.js
@@ -5,7 +5,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const RATE_LIMIT_MS = 700;
 
diff --git a/DW-Programming/fix-malibu-body-html.js b/DW-Programming/fix-malibu-body-html.js
index cd41a9d9..0bf7e86f 100644
--- a/DW-Programming/fix-malibu-body-html.js
+++ b/DW-Programming/fix-malibu-body-html.js
@@ -12,7 +12,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const RATE_LIMIT_MS = 520;
 
diff --git a/DW-Programming/fix-phillipe-romano-vendors.js b/DW-Programming/fix-phillipe-romano-vendors.js
index d235da9c..a81ec231 100644
--- a/DW-Programming/fix-phillipe-romano-vendors.js
+++ b/DW-Programming/fix-phillipe-romano-vendors.js
@@ -12,7 +12,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GQL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
 const CANONICAL_VENDOR = 'Phillipe Romano';
diff --git a/DW-Programming/fix-product-type-by-width.js b/DW-Programming/fix-product-type-by-width.js
index 139636bb..6600ccda 100644
--- a/DW-Programming/fix-product-type-by-width.js
+++ b/DW-Programming/fix-product-type-by-width.js
@@ -22,7 +22,7 @@ const { Client } = require('pg');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const BATCH_SIZE = 25;
 const DELAY_MS = 500;
diff --git a/DW-Programming/fix-product-type-tags.js b/DW-Programming/fix-product-type-tags.js
index 61b8b8e7..8f33f555 100644
--- a/DW-Programming/fix-product-type-tags.js
+++ b/DW-Programming/fix-product-type-tags.js
@@ -10,7 +10,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const BATCH_SIZE = 5; // Smaller batches since we need to read tags first
 const DELAY_MS = 600;
diff --git a/DW-Programming/fix-sandberg-body.js b/DW-Programming/fix-sandberg-body.js
index 85ec40cb..8ed84ade 100644
--- a/DW-Programming/fix-sandberg-body.js
+++ b/DW-Programming/fix-sandberg-body.js
@@ -8,7 +8,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 const pool = new Pool({
diff --git a/DW-Programming/fix-single-variant-pricing.js b/DW-Programming/fix-single-variant-pricing.js
index db3a92a1..b18fa0ee 100644
--- a/DW-Programming/fix-single-variant-pricing.js
+++ b/DW-Programming/fix-single-variant-pricing.js
@@ -11,7 +11,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 
 // Rate limiting
diff --git a/DW-Programming/fix-thibaut-anna-french.js b/DW-Programming/fix-thibaut-anna-french.js
index 218e2873..04a7ba10 100644
--- a/DW-Programming/fix-thibaut-anna-french.js
+++ b/DW-Programming/fix-thibaut-anna-french.js
@@ -13,7 +13,7 @@ const https = require('https');
 
 // ─── Config ────────────────────────────────────────────────────────────────
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const RATE_LIMIT_MS = 520;
 
diff --git a/DW-Programming/fix-thibaut-titles.js b/DW-Programming/fix-thibaut-titles.js
index 0a0a6ded..e9954e1c 100644
--- a/DW-Programming/fix-thibaut-titles.js
+++ b/DW-Programming/fix-thibaut-titles.js
@@ -11,7 +11,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VER = '2024-10';
 const DELAY = 650;
 const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/generate-room-settings.py b/DW-Programming/generate-room-settings.py
index cdf13555..43e73ddd 100644
--- a/DW-Programming/generate-room-settings.py
+++ b/DW-Programming/generate-room-settings.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+import os
 """
 Generate room settings for 4 launched products via Room Setting App API.
 Downloads product images, sends to API, uploads result to Shopify.
@@ -8,7 +9,7 @@ import requests, json, base64, sys, time
 
 ROOM_APP = "http://localhost:3075"
 SHOP = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 AUTH_TOKEN = "eyJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJ0aW1lc3RhbXAiOjE3NzM3MDg1NDU5MzksInVzZXIiOiJ1c2VyLWFkbWluIiwiaWF0IjoxNzczNzA4NTQ1LCJleHAiOjE3NzM3OTQ5NDV9.FpSj6jnZT_4ZNAXpx8xYpEP9JdA6MGO0MWDJUgVzCAQ"
 
 products = [
diff --git a/DW-Programming/gls-gemini-retry.js b/DW-Programming/gls-gemini-retry.js
index 6614728a..b9791b9e 100644
--- a/DW-Programming/gls-gemini-retry.js
+++ b/DW-Programming/gls-gemini-retry.js
@@ -8,7 +8,7 @@ const https = require('https');
 const sharp = require('sharp');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 
diff --git a/DW-Programming/gls-product-cleanup.js b/DW-Programming/gls-product-cleanup.js
index afbca601..d11f6a7e 100644
--- a/DW-Programming/gls-product-cleanup.js
+++ b/DW-Programming/gls-product-cleanup.js
@@ -15,7 +15,7 @@ const sharp = require('sharp');
 
 // ─── Config ───────────────────────────────────────────────────────────────────
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 const API_VERSION = '2024-01';
diff --git a/DW-Programming/gls-product-processor.js b/DW-Programming/gls-product-processor.js
index a6ec40a6..0fe44625 100644
--- a/DW-Programming/gls-product-processor.js
+++ b/DW-Programming/gls-product-processor.js
@@ -14,7 +14,7 @@ const path = require('path');
 
 // Config
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/gls-product-updater.js b/DW-Programming/gls-product-updater.js
index 02cd271d..20c90923 100644
--- a/DW-Programming/gls-product-updater.js
+++ b/DW-Programming/gls-product-updater.js
@@ -15,7 +15,7 @@ const { execFileSync } = require('child_process');
 
 // ── Config ───────────────────────────────────────────────────────────
 const SHOPIFY_API = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/gls-retry-failed.js b/DW-Programming/gls-retry-failed.js
index fc0ff523..4893e83f 100644
--- a/DW-Programming/gls-retry-failed.js
+++ b/DW-Programming/gls-retry-failed.js
@@ -8,7 +8,7 @@
 const sharp = require('sharp');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 
diff --git a/DW-Programming/hollywood-hex-extract.js b/DW-Programming/hollywood-hex-extract.js
index 44a95208..0900387c 100644
--- a/DW-Programming/hollywood-hex-extract.js
+++ b/DW-Programming/hollywood-hex-extract.js
@@ -31,7 +31,7 @@ async function getProductImage(productId) {
       path: '/admin/api/2024-01/graphql.json',
       method: 'POST',
       headers: {
-        'X-Shopify-Access-Token': '***REMOVED***',
+        'X-Shopify-Access-Token': process.env.SHOPIFY_ADMIN_TOKEN,
         'Content-Type': 'application/json',
         'Content-Length': Buffer.byteLength(query)
       }
diff --git a/DW-Programming/interior-design-ai-tagger.js b/DW-Programming/interior-design-ai-tagger.js
index c436a768..99355fcc 100644
--- a/DW-Programming/interior-design-ai-tagger.js
+++ b/DW-Programming/interior-design-ai-tagger.js
@@ -27,7 +27,7 @@ const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_API_VERSION = '2024-10';
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/interior-design-tagger.js b/DW-Programming/interior-design-tagger.js
index a5dfadb9..896ccb1d 100644
--- a/DW-Programming/interior-design-tagger.js
+++ b/DW-Programming/interior-design-tagger.js
@@ -28,7 +28,7 @@ const path = require('path');
 // ─── Config ──────────────────────────────────────────────────────────────────
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN  = '***REMOVED***';
+const SHOPIFY_TOKEN  = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const SLACK_WEBHOOK  = '${SLACK_WEBHOOK_URL}';
 const API_VERSION    = '2024-10';
diff --git a/DW-Programming/launch-versace-vi.js b/DW-Programming/launch-versace-vi.js
index 684f0118..8457740c 100644
--- a/DW-Programming/launch-versace-vi.js
+++ b/DW-Programming/launch-versace-vi.js
@@ -13,7 +13,7 @@ const http = require('http');
 const { Client } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SILAS_URL = 'http://127.0.0.1:9674/api/validate-push';
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js b/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
index 7810fa8e..f035a98f 100644
--- a/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
+++ b/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
@@ -1,7 +1,7 @@
 const fetch = require('node-fetch');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 const COLOR_WORDS = ['Light', 'Dark', 'Beige', 'Brown', 'Gray', 'Grey', 'Blue', 'Green', 'Red', 
   'Yellow', 'Orange', 'Purple', 'Pink', 'White', 'Black', 'Cream', 'Ivory', 'Sand', 'Tan',
diff --git a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
index 5a26d433..3aa03c72 100644
--- a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
+++ b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
@@ -20,7 +20,7 @@ const { Pool } = require('pg');
 // Configuration
 const CONFIG = {
   SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
-  SHOPIFY_TOKEN: '***REMOVED***',
+  SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
   GEMINI_API_KEY: '${GOOGLE_API_KEY}',
   SPREADSHEET_CSV: 'https://docs.google.com/spreadsheets/d/1hPTMFkX762hftpEAxWTvEl9rNzhd4mBITnpkYuDgMLg/gviz/tq?tqx=out:csv',
   MAYA_SEARCH_URL: 'https://www.mayaromanoff.com/search?q=',
diff --git a/DW-Programming/maya-romanoff-updater/server.js b/DW-Programming/maya-romanoff-updater/server.js
index c5a5db43..ee29633a 100644
--- a/DW-Programming/maya-romanoff-updater/server.js
+++ b/DW-Programming/maya-romanoff-updater/server.js
@@ -25,7 +25,7 @@ app.use(express.json());
 // Configuration
 const CONFIG = {
   SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
-  SHOPIFY_TOKEN: '***REMOVED***',
+  SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
   API_VERSION: '2024-01',
   GEMINI_API_KEY: '${GOOGLE_API_KEY}',
   MAYA_BASE_URL: 'https://www.mayaromanoff.com',
diff --git a/DW-Programming/migrate-dwkk-to-dwpr.js b/DW-Programming/migrate-dwkk-to-dwpr.js
index fd69d2b7..011bf440 100644
--- a/DW-Programming/migrate-dwkk-to-dwpr.js
+++ b/DW-Programming/migrate-dwkk-to-dwpr.js
@@ -20,7 +20,7 @@ const https = require('https');
 
 // ─── Config ──────────────────────────────────────────────────────────────────
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts b/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
index 41316d76..fc76748d 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
 import { dbQuery } from '@/lib/db';
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}'; // Billed Tier 1 key
 
 // All 14 sales channels - publish to ALL on product creation
diff --git a/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts b/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
index 99027f45..bb232e6f 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
 import { dbQuery } from '@/lib/db';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function checkAuth(req: NextRequest): boolean {
   const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
index 0c26f60f..2e87e7c3 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
 import { dbQuery } from '@/lib/db';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 // Vendor table mapping - matches vendor-items route
 const VENDOR_TABLES: Record<string, { table: string; name: string; skuColumn: string }> = {
diff --git a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
index 9e324da9..be0e5ec2 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
@@ -1,7 +1,7 @@
 import { NextRequest, NextResponse } from 'next/server';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function checkAuth(req: NextRequest): boolean {
   const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts b/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
index 59cacab0..c686c76b 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
@@ -1,7 +1,7 @@
 import { NextRequest, NextResponse } from 'next/server';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/2024-01/graphql.json`;
 
 function checkAuth(req: NextRequest): boolean {
diff --git a/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts b/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
index f1304531..4c6133ac 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
 import { dbQuery } from '@/lib/db';
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function checkAuth(req: NextRequest): boolean {
   const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts b/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
index 34084ff7..a0f73949 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
@@ -3,7 +3,7 @@ import { dbQuery } from '@/lib/db';
 
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 // Vendor table mapping with DW SKU prefixes
 const VENDOR_TABLES: Record<number, { table: string; name: string; prefix: string; shopifyVendor: string }> = {
diff --git a/DW-Programming/nextjs-liquid-app/backfill-metafields.js b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
index 897bea89..575cd0e9 100644
--- a/DW-Programming/nextjs-liquid-app/backfill-metafields.js
+++ b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
@@ -8,7 +8,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
 
 // Rate limit: 2 req/sec with burst of 40
diff --git a/DW-Programming/phillipe-romano-cleanup.js b/DW-Programming/phillipe-romano-cleanup.js
index ff1c10ea..43cf58ab 100644
--- a/DW-Programming/phillipe-romano-cleanup.js
+++ b/DW-Programming/phillipe-romano-cleanup.js
@@ -5,7 +5,7 @@
  */
 const https = require('https');
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const CANONICAL = 'Phillipe Romano';
 const VENDORS = ['Phillipe Romano Wallpaper', 'Phillipe Romano European Prints', 'Phillipe Romano Fabrics', 'Phillipe Romano Vinyls'];
diff --git a/DW-Programming/phillipe-romano-vendor-cleanup.js b/DW-Programming/phillipe-romano-vendor-cleanup.js
index cc29d460..a01d992c 100644
--- a/DW-Programming/phillipe-romano-vendor-cleanup.js
+++ b/DW-Programming/phillipe-romano-vendor-cleanup.js
@@ -13,7 +13,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const CANONICAL_VENDOR = 'Phillipe Romano';
 
diff --git a/DW-Programming/phillipe-romano-vendor-fix.js b/DW-Programming/phillipe-romano-vendor-fix.js
index 809bf134..a70a45fb 100644
--- a/DW-Programming/phillipe-romano-vendor-fix.js
+++ b/DW-Programming/phillipe-romano-vendor-fix.js
@@ -22,7 +22,7 @@ const https = require('https');
 
 // ─── Config ──────────────────────────────────────────────────────────
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const CANONICAL_VENDOR = 'Phillipe Romano';
 const VARIANT_VENDORS = [
diff --git a/DW-Programming/push-china-seas-metafields.js b/DW-Programming/push-china-seas-metafields.js
index 25889ed2..490abc64 100644
--- a/DW-Programming/push-china-seas-metafields.js
+++ b/DW-Programming/push-china-seas-metafields.js
@@ -3,7 +3,7 @@
 
 const { Client } = require('pg');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-01';
 const DELAY_MS = 550; // ~2 req/sec with margin
diff --git a/DW-Programming/push-color-hex-metafields.js b/DW-Programming/push-color-hex-metafields.js
index 2949e5d9..100284e6 100644
--- a/DW-Programming/push-color-hex-metafields.js
+++ b/DW-Programming/push-color-hex-metafields.js
@@ -17,7 +17,7 @@ const fs = require('fs');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/color-push.log';
 const MAX_PER_VENDOR = 200;
diff --git a/DW-Programming/push-maya-romanoff-to-shopify.js b/DW-Programming/push-maya-romanoff-to-shopify.js
index 56274e70..00b90ecc 100644
--- a/DW-Programming/push-maya-romanoff-to-shopify.js
+++ b/DW-Programming/push-maya-romanoff-to-shopify.js
@@ -15,7 +15,7 @@ const fs = require('fs');
 
 const CONFIG = {
   SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
-  SHOPIFY_TOKEN: '***REMOVED***',
+  SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
   API_VERSION: '2024-10',
   POSTGRES_URL: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
   SLACK_WEBHOOK: '${SLACK_WEBHOOK_URL}',
diff --git a/DW-Programming/push-versa-specs-to-shopify.js b/DW-Programming/push-versa-specs-to-shopify.js
index 1ede0229..cd369b28 100644
--- a/DW-Programming/push-versa-specs-to-shopify.js
+++ b/DW-Programming/push-versa-specs-to-shopify.js
@@ -9,7 +9,7 @@ const { Client } = require('pg');
 const https = require('https');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const DELAY_MS = 1500;
diff --git a/DW-Programming/push-versace-vi.js b/DW-Programming/push-versace-vi.js
index 25c493fd..94127ffb 100644
--- a/DW-Programming/push-versace-vi.js
+++ b/DW-Programming/push-versace-vi.js
@@ -15,7 +15,7 @@ const { Pool } = require('pg');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SILAS_URL = 'http://127.0.0.1:9674';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/remove-damask-from-florals.js b/DW-Programming/remove-damask-from-florals.js
index b90014b1..2d3fdda8 100644
--- a/DW-Programming/remove-damask-from-florals.js
+++ b/DW-Programming/remove-damask-from-florals.js
@@ -5,7 +5,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const COLLECTION_ID = '283205599283';
 
diff --git a/DW-Programming/restore-blue-tags.js b/DW-Programming/restore-blue-tags.js
index b285a502..ae31c357 100644
--- a/DW-Programming/restore-blue-tags.js
+++ b/DW-Programming/restore-blue-tags.js
@@ -11,7 +11,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 function shopifyGraphQL(query, variables = {}) {
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc
new file mode 100644
index 00000000..f78fb536
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..35e427d2
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..cdca20e9
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc
new file mode 100644
index 00000000..50b29289
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc
new file mode 100644
index 00000000..bc307bb4
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/batch-room-gen-v2.py b/DW-Programming/room-setting-app/batch-room-gen-v2.py
index 779bd1a4..33937d91 100644
--- a/DW-Programming/room-setting-app/batch-room-gen-v2.py
+++ b/DW-Programming/room-setting-app/batch-room-gen-v2.py
@@ -31,7 +31,7 @@ import argparse
 
 ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 
diff --git a/DW-Programming/room-setting-app/batch-room-generator.py b/DW-Programming/room-setting-app/batch-room-generator.py
index 18aa95bb..8315d88d 100644
--- a/DW-Programming/room-setting-app/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/batch-room-generator.py
@@ -25,7 +25,7 @@ import subprocess
 
 ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 
diff --git a/DW-Programming/room-setting-app/batch-room-settings.py b/DW-Programming/room-setting-app/batch-room-settings.py
index a19b22a4..18a92dd8 100644
--- a/DW-Programming/room-setting-app/batch-room-settings.py
+++ b/DW-Programming/room-setting-app/batch-room-settings.py
@@ -35,7 +35,7 @@ LOCK_FILE = "/tmp/batch-room-settings.lock"
 
 ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 PROGRESS_FILE = "/tmp/batch-room-settings-progress.json"
diff --git a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
index f0c57baa..077fc9a5 100644
--- a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
+++ b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
@@ -24,7 +24,7 @@ import datetime
 
 ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 PRODUCTS_JSON = "/tmp/phillipe-romano-rooms-products.json"
diff --git a/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py b/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
index 243b9064..787198bc 100644
--- a/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
+++ b/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+import os
 """
 Generate 6 residential room settings for DWTT-80352 (Artesian Wild Sage | Thibaut)
 and upload them to Shopify.
@@ -22,7 +23,7 @@ ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 
 # Shopify API
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 
 # Room settings
 ROOMS = [
diff --git a/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..651abc17
Binary files /dev/null and b/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/scripts/batch-room-generator.js b/DW-Programming/room-setting-app/scripts/batch-room-generator.js
index 11f5b41c..e4af29b8 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.js
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.js
@@ -23,7 +23,7 @@ const path = require('path');
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const ROOM_API = 'http://localhost:3075/api/generate-room';
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 // Commercial vendors get hotel_lobby + office rooms
diff --git a/DW-Programming/room-setting-app/scripts/batch-room-generator.py b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
index 949eb486..e44cc4f1 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
@@ -33,7 +33,7 @@ import argparse
 
 ROOM_API = "http://127.0.0.1:3075/api/generate-room"
 SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 PROGRESS_FILE = "/tmp/batch-room-generator-progress.json"
diff --git a/DW-Programming/scrape-versace-images.js b/DW-Programming/scrape-versace-images.js
index c8786ea0..ebd82d62 100644
--- a/DW-Programming/scrape-versace-images.js
+++ b/DW-Programming/scrape-versace-images.js
@@ -19,7 +19,7 @@ const cheerio = require('cheerio');
 
 const PG_CONN = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/update-dwjs-specs-final.js b/DW-Programming/update-dwjs-specs-final.js
index 658d8314..7904b5df 100644
--- a/DW-Programming/update-dwjs-specs-final.js
+++ b/DW-Programming/update-dwjs-specs-final.js
@@ -7,7 +7,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-final.log';
diff --git a/DW-Programming/update-dwjs-specs-phase2.js b/DW-Programming/update-dwjs-specs-phase2.js
index de0d68af..01286fff 100644
--- a/DW-Programming/update-dwjs-specs-phase2.js
+++ b/DW-Programming/update-dwjs-specs-phase2.js
@@ -14,7 +14,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-phase2.log';
diff --git a/DW-Programming/update-dwjs-specs-phase3.js b/DW-Programming/update-dwjs-specs-phase3.js
index 0fc5a460..cb91f1bb 100644
--- a/DW-Programming/update-dwjs-specs-phase3.js
+++ b/DW-Programming/update-dwjs-specs-phase3.js
@@ -14,7 +14,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-phase3.log';
diff --git a/DW-Programming/update-dwjs-specs-phase4.js b/DW-Programming/update-dwjs-specs-phase4.js
index c3842e49..dd4d1411 100644
--- a/DW-Programming/update-dwjs-specs-phase4.js
+++ b/DW-Programming/update-dwjs-specs-phase4.js
@@ -9,7 +9,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-phase4.log';
diff --git a/DW-Programming/update-dwjs-specs.js b/DW-Programming/update-dwjs-specs.js
index 37e1dfd4..d93196a7 100644
--- a/DW-Programming/update-dwjs-specs.js
+++ b/DW-Programming/update-dwjs-specs.js
@@ -8,7 +8,7 @@ const https = require('https');
 const { Client } = require('pg');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-enrich.log';
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
index 94db8458..4b34f7d9 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
@@ -17,7 +17,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function fetchAllShopifyThibautProducts() {
   console.log('🔍 Fetching all Thibaut products from Shopify...');
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
index 6cf53ba2..46834949 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
@@ -10,7 +10,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function fetchAllThibautProducts() {
   console.log('🔍 Fetching all Thibaut products from Shopify...');
diff --git a/DW-Programming/verify-versace.js b/DW-Programming/verify-versace.js
index 23efccac..dc50b7da 100644
--- a/DW-Programming/verify-versace.js
+++ b/DW-Programming/verify-versace.js
@@ -3,7 +3,7 @@ const https = require('https');
 
 const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function graphql(query) {
   return new Promise((resolve, reject) => {
diff --git a/DW-Programming/versace-image-scraper.js b/DW-Programming/versace-image-scraper.js
index 674230fc..8a5fd6e8 100644
--- a/DW-Programming/versace-image-scraper.js
+++ b/DW-Programming/versace-image-scraper.js
@@ -10,7 +10,7 @@ const fs = require('fs');
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 // Step 1: Load sitemap URLs and match against our MFR SKUs
diff --git a/DW-Programming/versace-image-uploader.js b/DW-Programming/versace-image-uploader.js
index 44c9be75..7d4a627d 100644
--- a/DW-Programming/versace-image-uploader.js
+++ b/DW-Programming/versace-image-uploader.js
@@ -11,7 +11,7 @@ const { Pool } = require('pg');
 
 // === CONFIG ===
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
diff --git a/DW-Websites/shop-by-color/fetch-colors.js b/DW-Websites/shop-by-color/fetch-colors.js
index e5bad501..3ca3461d 100644
--- a/DW-Websites/shop-by-color/fetch-colors.js
+++ b/DW-Websites/shop-by-color/fetch-colors.js
@@ -2,7 +2,7 @@ const https = require('https');
 const fs = require('fs');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VER = '2024-10';
 
 const COLOR_MAP = {
diff --git a/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/scripts/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..f57e7f6e
Binary files /dev/null and b/scripts/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/scripts/__pycache__/batch-room-settings.cpython-314.pyc b/scripts/__pycache__/batch-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..65545ded
Binary files /dev/null and b/scripts/__pycache__/batch-room-settings.cpython-314.pyc differ
diff --git a/scripts/analyze-fabric-wallcovering.js b/scripts/analyze-fabric-wallcovering.js
index 8318d4b3..c7561225 100644
--- a/scripts/analyze-fabric-wallcovering.js
+++ b/scripts/analyze-fabric-wallcovering.js
@@ -7,7 +7,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
diff --git a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24 b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
index ed5fd6d9..97ed3526 100644
--- a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
+++ b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
@@ -10,7 +10,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 const pool = new Pool({
diff --git a/scripts/batch-room-generator.py b/scripts/batch-room-generator.py
index 089b0d1a..54279c17 100644
--- a/scripts/batch-room-generator.py
+++ b/scripts/batch-room-generator.py
@@ -25,7 +25,7 @@ from urllib.parse import urlparse
 DB_DSN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 ROOM_APP_URL = "http://localhost:3075/api/generate-room"
 SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 SHOPIFY_API_VER = "2024-10"
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 
diff --git a/scripts/batch-room-settings.py b/scripts/batch-room-settings.py
index f127160d..fe4108d2 100644
--- a/scripts/batch-room-settings.py
+++ b/scripts/batch-room-settings.py
@@ -20,7 +20,7 @@ from datetime import datetime
 DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 ROOM_API = "http://localhost:3075/api/generate-room"
 SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 
 BATCH_SIZE = 500
diff --git a/scripts/brand-mckenzie-ai-analysis.ts b/scripts/brand-mckenzie-ai-analysis.ts
index 8a117d44..8335506a 100644
--- a/scripts/brand-mckenzie-ai-analysis.ts
+++ b/scripts/brand-mckenzie-ai-analysis.ts
@@ -7,7 +7,7 @@
 import 'dotenv/config';
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 interface AIAnalysis {
diff --git a/scripts/brand-mckenzie-full-scrape.ts b/scripts/brand-mckenzie-full-scrape.ts
index 492b19f0..47349a77 100644
--- a/scripts/brand-mckenzie-full-scrape.ts
+++ b/scripts/brand-mckenzie-full-scrape.ts
@@ -8,7 +8,7 @@ import puppeteer from 'puppeteer';
 import { Pool } from 'pg';
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 // PostgreSQL connection
diff --git a/scripts/brand-mckenzie-full-update.ts b/scripts/brand-mckenzie-full-update.ts
index 5f2e2b80..f1a4e185 100644
--- a/scripts/brand-mckenzie-full-update.ts
+++ b/scripts/brand-mckenzie-full-update.ts
@@ -12,7 +12,7 @@ import 'dotenv/config';
 import puppeteer from 'puppeteer';
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 // Known Brand McKenzie collections
diff --git a/scripts/brand-mckenzie-recrawl.ts b/scripts/brand-mckenzie-recrawl.ts
index f471a9da..ffb43012 100644
--- a/scripts/brand-mckenzie-recrawl.ts
+++ b/scripts/brand-mckenzie-recrawl.ts
@@ -7,7 +7,7 @@ import 'dotenv/config';
 import puppeteer from 'puppeteer';
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 
 // Known Brand McKenzie collections
 const COLLECTIONS = [
diff --git a/scripts/build-collections-directory.js b/scripts/build-collections-directory.js
index d57706bd..8a62197e 100644
--- a/scripts/build-collections-directory.js
+++ b/scripts/build-collections-directory.js
@@ -9,7 +9,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const PRODUCTS_TOKEN = '***REMOVED***';
+const PRODUCTS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const PAGES_TOKEN = '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';
 const API_VERSION = '2024-10';
 const DELAY_MS = 1050;
diff --git a/scripts/collection-consolidation-phase2.js b/scripts/collection-consolidation-phase2.js
index 8866d06c..61bc3e9c 100644
--- a/scripts/collection-consolidation-phase2.js
+++ b/scripts/collection-consolidation-phase2.js
@@ -11,7 +11,7 @@ const http = require('http');
 // Config
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const REDIRECT_TOKEN = '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';
-const PRODUCT_TOKEN = '***REMOVED***';
+const PRODUCT_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-07';
 const COLLECTIONS_API = 'http://localhost:9501/api/collections';
 const AUTH = Buffer.from('admin:***REMOVED***').toString('base64');
diff --git a/scripts/collection-consolidation-phase3.js b/scripts/collection-consolidation-phase3.js
index 0bd3e623..40790f9c 100644
--- a/scripts/collection-consolidation-phase3.js
+++ b/scripts/collection-consolidation-phase3.js
@@ -12,7 +12,7 @@ const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
 const REDIRECT_TOKEN = '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'; // content token for redirects
-const PRODUCT_TOKEN = '***REMOVED***';  // product token for collection delete
+const PRODUCT_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;  // product token for collection delete
 
 const DRY_RUN = process.argv.includes('--dry-run');
 const RATE_LIMIT_MS = 600;
diff --git a/scripts/collection-description-writer.js b/scripts/collection-description-writer.js
index 824bfc40..1d90f6c4 100644
--- a/scripts/collection-description-writer.js
+++ b/scripts/collection-description-writer.js
@@ -8,7 +8,7 @@
 const https = require('https');
 const fs = require('fs');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
diff --git a/scripts/collections-cleanup.js b/scripts/collections-cleanup.js
index 0b3e0ac8..acb3fa9d 100644
--- a/scripts/collections-cleanup.js
+++ b/scripts/collections-cleanup.js
@@ -7,7 +7,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const sleep = ms => new Promise(r => setTimeout(r, ms));
diff --git a/scripts/collections-cover-images.js b/scripts/collections-cover-images.js
index 66d66a39..f6bfb339 100644
--- a/scripts/collections-cover-images.js
+++ b/scripts/collections-cover-images.js
@@ -7,7 +7,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-07';
 
 const sleep = ms => new Promise(r => setTimeout(r, ms));
diff --git a/scripts/collections-phase5-audit.js b/scripts/collections-phase5-audit.js
index a30429f7..c90cbb6d 100644
--- a/scripts/collections-phase5-audit.js
+++ b/scripts/collections-phase5-audit.js
@@ -12,7 +12,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GRAPHQL_URL = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}/graphql.json`;
 const REST_BASE = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}`;
diff --git a/scripts/collections-phase5-publish.js b/scripts/collections-phase5-publish.js
index cc58dd19..8be2a491 100644
--- a/scripts/collections-phase5-publish.js
+++ b/scripts/collections-phase5-publish.js
@@ -9,7 +9,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const EXCLUDE_TITLE_PATTERNS = /\b(test|temp|old|delete|archive|internal|agent|script|duplicate|copy|backup)\b/i;
diff --git a/scripts/dedupe-spin-gifs.js b/scripts/dedupe-spin-gifs.js
index da634733..c8856d60 100644
--- a/scripts/dedupe-spin-gifs.js
+++ b/scripts/dedupe-spin-gifs.js
@@ -15,7 +15,7 @@
  *   node dedupe-spin-gifs.js --vendor "..." --dry-run              # preview only
  */
 
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOP  = process.env.SHOPIFY_SHOP || 'designer-laboratory-sandbox.myshopify.com';
 const API   = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
diff --git a/scripts/dwkk-zero-price-cleanup.js b/scripts/dwkk-zero-price-cleanup.js
index 70e3bc00..0f687560 100644
--- a/scripts/dwkk-zero-price-cleanup.js
+++ b/scripts/dwkk-zero-price-cleanup.js
@@ -7,7 +7,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GRAPHQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
 const REST_BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
diff --git a/scripts/dwkk-zero-price-fix.js b/scripts/dwkk-zero-price-fix.js
index d3f7d140..8bf9aaf8 100644
--- a/scripts/dwkk-zero-price-fix.js
+++ b/scripts/dwkk-zero-price-fix.js
@@ -1,7 +1,7 @@
 const https = require('https');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const PRICING_MSG = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
 const DELAY_MS = 600;
diff --git a/scripts/dwtt-body-to-metafields.js b/scripts/dwtt-body-to-metafields.js
index ec54eb3c..77925d8b 100644
--- a/scripts/dwtt-body-to-metafields.js
+++ b/scripts/dwtt-body-to-metafields.js
@@ -5,7 +5,7 @@
  * Usage: node dwtt-body-to-metafields.js [--dry-run] [--batch N] [--after CURSOR]
  */
 
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
 const API = `https://${STORE}/admin/api/2024-01`;
 
diff --git a/scripts/fix-brand-mckenzie-leadtime.ts b/scripts/fix-brand-mckenzie-leadtime.ts
index 68d45d64..ce304167 100644
--- a/scripts/fix-brand-mckenzie-leadtime.ts
+++ b/scripts/fix-brand-mckenzie-leadtime.ts
@@ -2,7 +2,7 @@
 import 'dotenv/config';
 
 const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyRequest(endpoint: string, method: string = 'GET', body?: any) {
   const url = `https://${SHOPIFY_STORE}/admin/api/2024-01${endpoint}`;
diff --git a/scripts/fix-collection-trailing-artifacts.js b/scripts/fix-collection-trailing-artifacts.js
index 57c94f50..994348e1 100644
--- a/scripts/fix-collection-trailing-artifacts.js
+++ b/scripts/fix-collection-trailing-artifacts.js
@@ -11,7 +11,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const DELAY_MS = 500;
 
diff --git a/scripts/fix-dwkk-zero-price.js b/scripts/fix-dwkk-zero-price.js
index 9d6d2cbf..f18ad1d9 100644
--- a/scripts/fix-dwkk-zero-price.js
+++ b/scripts/fix-dwkk-zero-price.js
@@ -6,7 +6,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
 const REST_URL = `https://${SHOP}/admin/api/${API_VERSION}`;
diff --git a/scripts/fix-fabric-wallcovering-titles.js b/scripts/fix-fabric-wallcovering-titles.js
index 95af94cb..68ef042a 100644
--- a/scripts/fix-fabric-wallcovering-titles.js
+++ b/scripts/fix-fabric-wallcovering-titles.js
@@ -12,7 +12,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const stats = {
diff --git a/scripts/fix-fabric-wallcovering-v2.js b/scripts/fix-fabric-wallcovering-v2.js
index 80560a82..0ba00ec6 100644
--- a/scripts/fix-fabric-wallcovering-v2.js
+++ b/scripts/fix-fabric-wallcovering-v2.js
@@ -13,7 +13,7 @@ const https = require('https');
 const fs = require('fs');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
diff --git a/scripts/fix-fabric-wallcovering-v3.js b/scripts/fix-fabric-wallcovering-v3.js
index ad79cf4e..2db543c3 100644
--- a/scripts/fix-fabric-wallcovering-v3.js
+++ b/scripts/fix-fabric-wallcovering-v3.js
@@ -17,7 +17,7 @@ const https = require('https');
 const fs = require('fs');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const DELAY_MS = 500;
 
diff --git a/scripts/fix-fabrics-plural-graphql.sh b/scripts/fix-fabrics-plural-graphql.sh
index 7233de1e..5703077e 100755
--- a/scripts/fix-fabrics-plural-graphql.sh
+++ b/scripts/fix-fabrics-plural-graphql.sh
@@ -4,7 +4,7 @@
 # Focus: product_type="Fabric" with "Fabrics" in title
 
 SHOP="https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10"
-TOKEN="***REMOVED***"
+TOKEN="$SHOPIFY_ADMIN_TOKEN"
 GQL="${SHOP}/graphql.json"
 
 ALL_MATCHES="/tmp/fabrics-plural-matches.json"
diff --git a/scripts/fix-fabrics-plural-titles-v2.js b/scripts/fix-fabrics-plural-titles-v2.js
index fbacebf6..c6d88e2a 100644
--- a/scripts/fix-fabrics-plural-titles-v2.js
+++ b/scripts/fix-fabrics-plural-titles-v2.js
@@ -7,7 +7,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 function sleep(ms) {
diff --git a/scripts/fix-fabrics-plural-titles-v3.js b/scripts/fix-fabrics-plural-titles-v3.js
index d91e1237..9a26a688 100644
--- a/scripts/fix-fabrics-plural-titles-v3.js
+++ b/scripts/fix-fabrics-plural-titles-v3.js
@@ -13,7 +13,7 @@ const https = require('https');
 const fs = require('fs');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOG_FILE = '/root/Projects/Designer-Wallcoverings/scripts/fabrics-fix-v3-log.json';
 const DELAY_MS = 500; // 500ms between API calls
diff --git a/scripts/fix-fabrics-plural-titles.js b/scripts/fix-fabrics-plural-titles.js
index f9632a6d..a7c00cd3 100644
--- a/scripts/fix-fabrics-plural-titles.js
+++ b/scripts/fix-fabrics-plural-titles.js
@@ -10,7 +10,7 @@
 const https = require('https');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 function sleep(ms) {
diff --git a/scripts/fix-fabrics-plural-titles.sh b/scripts/fix-fabrics-plural-titles.sh
index 7e5dc83f..47a9198e 100755
--- a/scripts/fix-fabrics-plural-titles.sh
+++ b/scripts/fix-fabrics-plural-titles.sh
@@ -3,7 +3,7 @@
 # for all products with product_type="Fabric"
 
 SHOP="https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10"
-TOKEN="***REMOVED***"
+TOKEN="$SHOPIFY_ADMIN_TOKEN"
 HEADERS=(-H "X-Shopify-Access-Token: $TOKEN" -H "Content-Type: application/json")
 
 ALL_PRODUCTS="/tmp/all-fabric-products.json"
diff --git a/scripts/grs-image-crop.js b/scripts/grs-image-crop.js
index dd880a89..1a87474f 100644
--- a/scripts/grs-image-crop.js
+++ b/scripts/grs-image-crop.js
@@ -13,7 +13,7 @@ const path = require('path');
 const { execFileSync } = require('child_process');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const REST_BASE = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/interior-design-tags.js b/scripts/interior-design-tags.js
index 7e7a51b4..6901cd11 100644
--- a/scripts/interior-design-tags.js
+++ b/scripts/interior-design-tags.js
@@ -29,7 +29,7 @@ const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_API_VERSION = '2024-10';
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/kill-wallpaper-word.js b/scripts/kill-wallpaper-word.js
index 7dca7c79..2b3fde3c 100644
--- a/scripts/kill-wallpaper-word.js
+++ b/scripts/kill-wallpaper-word.js
@@ -13,7 +13,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/scripts/mfr-sku-bulk-update.js b/scripts/mfr-sku-bulk-update.js
index 3a982527..51e1eeb3 100755
--- a/scripts/mfr-sku-bulk-update.js
+++ b/scripts/mfr-sku-bulk-update.js
@@ -10,7 +10,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyGraphQL(query, variables = {}) {
   const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku-active.js b/scripts/populate-dwtt-mfr-sku-active.js
index 8063e180..2ac1a7bb 100644
--- a/scripts/populate-dwtt-mfr-sku-active.js
+++ b/scripts/populate-dwtt-mfr-sku-active.js
@@ -5,7 +5,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyGraphQL(query, variables = {}) {
   const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku-from-catalog.js b/scripts/populate-dwtt-mfr-sku-from-catalog.js
index 371ee4dd..edefaa09 100644
--- a/scripts/populate-dwtt-mfr-sku-from-catalog.js
+++ b/scripts/populate-dwtt-mfr-sku-from-catalog.js
@@ -5,7 +5,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyGraphQL(query, variables = {}) {
   const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku.js b/scripts/populate-dwtt-mfr-sku.js
index 7fcd9f90..3a86e3c2 100644
--- a/scripts/populate-dwtt-mfr-sku.js
+++ b/scripts/populate-dwtt-mfr-sku.js
@@ -5,7 +5,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyGraphQL(query, variables = {}) {
   const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-mfr-sku-metafield.js b/scripts/populate-mfr-sku-metafield.js
index da3250bd..e31b46ad 100644
--- a/scripts/populate-mfr-sku-metafield.js
+++ b/scripts/populate-mfr-sku-metafield.js
@@ -14,7 +14,7 @@
  */
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox';
-const SHOPIFY_ACCESS_TOKEN = '***REMOVED***';
+const SHOPIFY_ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_GRAPHQL_URL = `https://${SHOPIFY_STORE}.myshopify.com/admin/api/2024-01/graphql.json`;
 
 // MFR SKU patterns by vendor
diff --git a/scripts/rw-upload-room-settings.js b/scripts/rw-upload-room-settings.js
index 3f25ca25..b03a89e1 100644
--- a/scripts/rw-upload-room-settings.js
+++ b/scripts/rw-upload-room-settings.js
@@ -15,7 +15,7 @@ const path = require('path');
 
 // Config
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ROOM_DIR = '/root/Projects/Designer-Wallcoverings/room-settings/rw-drapery';
 const DELAY_MS = 1000;
 
diff --git a/scripts/shopify-swatch-spin.js b/scripts/shopify-swatch-spin.js
index 335f8dba..fd0bd82b 100644
--- a/scripts/shopify-swatch-spin.js
+++ b/scripts/shopify-swatch-spin.js
@@ -21,7 +21,7 @@ const path = require('path');
 const https = require('https');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_API_VER = '2024-10';
 
 // ─── Yorktown Spin Parameters ────────────────────────────────────────────────
diff --git a/scripts/standardize-product-types-bulk.js b/scripts/standardize-product-types-bulk.js
index d249d09c..43d18d0c 100644
--- a/scripts/standardize-product-types-bulk.js
+++ b/scripts/standardize-product-types-bulk.js
@@ -9,7 +9,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/standardize-product-types.js b/scripts/standardize-product-types.js
index 94de3faa..7c61630e 100644
--- a/scripts/standardize-product-types.js
+++ b/scripts/standardize-product-types.js
@@ -9,7 +9,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/supplier-mfr-bulk-push.js b/scripts/supplier-mfr-bulk-push.js
index 4ebb0d9f..f55949ad 100644
--- a/scripts/supplier-mfr-bulk-push.js
+++ b/scripts/supplier-mfr-bulk-push.js
@@ -10,7 +10,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function shopifyGraphQL(query, variables = {}) {
   const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/surface-stick-backfill.js b/scripts/surface-stick-backfill.js
index 58f01614..55c7827e 100644
--- a/scripts/surface-stick-backfill.js
+++ b/scripts/surface-stick-backfill.js
@@ -8,7 +8,7 @@ const https = require('https');
 const { Client } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
diff --git a/scripts/sync-shopify-to-postgres.js b/scripts/sync-shopify-to-postgres.js
index 936d86b3..5e57be01 100644
--- a/scripts/sync-shopify-to-postgres.js
+++ b/scripts/sync-shopify-to-postgres.js
@@ -16,7 +16,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox';
-const SHOPIFY_ACCESS_TOKEN = '***REMOVED***';
+const SHOPIFY_ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_GRAPHQL_URL = `https://${SHOPIFY_STORE}.myshopify.com/admin/api/2024-01/graphql.json`;
 
 // Extract vendor prefix from SKU (DWK-123456 -> DWK)
diff --git a/scripts/update-jim-dultz-shopify.js b/scripts/update-jim-dultz-shopify.js
index 58f5242b..afd031ba 100644
--- a/scripts/update-jim-dultz-shopify.js
+++ b/scripts/update-jim-dultz-shopify.js
@@ -9,7 +9,7 @@
 
 const https = require('https');
 
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
 
 // Jim Dultz products mapping from PostgreSQL
diff --git a/shopify/scripts/add-missing-samples-v2.js b/shopify/scripts/add-missing-samples-v2.js
index aeabf4b7..93d059ba 100644
--- a/shopify/scripts/add-missing-samples-v2.js
+++ b/shopify/scripts/add-missing-samples-v2.js
@@ -18,7 +18,7 @@ const fs = require('fs');
 
 // ─── Config ────────────────────────────────────────────────────────────
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VER = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const PROGRESS_FILE = '/root/Projects/Designer-Wallcoverings/shopify/scripts/sample-v2-progress.json';
diff --git a/shopify/scripts/arte-dashboard/bulk-title-updater.js b/shopify/scripts/arte-dashboard/bulk-title-updater.js
index 0549a864..c0e06161 100755
--- a/shopify/scripts/arte-dashboard/bulk-title-updater.js
+++ b/shopify/scripts/arte-dashboard/bulk-title-updater.js
@@ -20,7 +20,7 @@ const AUTH = 'Basic ' + Buffer.from('admin:***REMOVED***').toString('base64');
 
 // Shopify GraphQL
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 async function shopifyGraphQL(query, variables = {}) {
diff --git a/shopify/scripts/arte-dashboard/fetch-missing-skus.js b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
index e7c4eeae..2f0b44d9 100644
--- a/shopify/scripts/arte-dashboard/fetch-missing-skus.js
+++ b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
@@ -18,7 +18,7 @@ const pool = new Pool({
 
 // Shopify API
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 let browser = null;
 let page = null;
diff --git a/shopify/scripts/arte-dashboard/populate-mapping.js b/shopify/scripts/arte-dashboard/populate-mapping.js
index d3bfe065..adf65241 100644
--- a/shopify/scripts/arte-dashboard/populate-mapping.js
+++ b/shopify/scripts/arte-dashboard/populate-mapping.js
@@ -10,7 +10,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 async function fetchShopifyArte() {
   let hasMore = true;
diff --git a/shopify/scripts/arte-dashboard/server.js b/shopify/scripts/arte-dashboard/server.js
index df36a4dd..3edeb8c7 100644
--- a/shopify/scripts/arte-dashboard/server.js
+++ b/shopify/scripts/arte-dashboard/server.js
@@ -23,7 +23,7 @@ const AUTH_PASS = '***REMOVED***';
 
 // Shopify config
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 // PostgreSQL
diff --git a/shopify/scripts/arte-update-mfr-sku.js b/shopify/scripts/arte-update-mfr-sku.js
index 421c6ccd..500dd24a 100644
--- a/shopify/scripts/arte-update-mfr-sku.js
+++ b/shopify/scripts/arte-update-mfr-sku.js
@@ -14,7 +14,7 @@ const { Pool } = require('pg');
 
 // Config
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 // PostgreSQL
diff --git a/shopify/scripts/audit-novasuede-new.js b/shopify/scripts/audit-novasuede-new.js
index b879bd66..90c8bafc 100644
--- a/shopify/scripts/audit-novasuede-new.js
+++ b/shopify/scripts/audit-novasuede-new.js
@@ -7,7 +7,7 @@
 
 const https = require('https');
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 
 const NEW_SKUS = [
   ["Amber","T3Q8W"],["Blank Slate","T3L0W"],["Bliss","T3Q7W"],["Blush Rose","T3RFW"],
diff --git a/shopify/scripts/batch-room-settings.py b/shopify/scripts/batch-room-settings.py
index 454d0f94..02c79641 100644
--- a/shopify/scripts/batch-room-settings.py
+++ b/shopify/scripts/batch-room-settings.py
@@ -22,7 +22,7 @@ from datetime import datetime
 DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
 ROOM_API = "http://localhost:3075/api/generate-room"
 SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
 BATCH_SIZE = 500
 ROOM_OUTPUT_DIR = "/tmp/room-settings"
diff --git a/shopify/scripts/batch-room-settings/batch-room-generator.js b/shopify/scripts/batch-room-settings/batch-room-generator.js
index d2d1c0ac..c1795edb 100644
--- a/shopify/scripts/batch-room-settings/batch-room-generator.js
+++ b/shopify/scripts/batch-room-settings/batch-room-generator.js
@@ -21,7 +21,7 @@ const path = require('path');
 
 // ─── Config ────────────────────────────────────────────────────────────────
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_VISION_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_IMAGE_KEY = '${GOOGLE_API_KEY}';
 const ROOM_APP_URL = 'http://localhost:3075/api/generate-room';
diff --git a/shopify/scripts/bespoke-updater/server.js b/shopify/scripts/bespoke-updater/server.js
index d6a66e2f..7bb43be1 100644
--- a/shopify/scripts/bespoke-updater/server.js
+++ b/shopify/scripts/bespoke-updater/server.js
@@ -20,7 +20,7 @@ app.use(express.json());
 
 const PORT = 9870;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 // Bespoke vendor variations
diff --git a/shopify/scripts/create-missing-sample-variants.js b/shopify/scripts/create-missing-sample-variants.js
index bbaeb25e..6918f906 100644
--- a/shopify/scripts/create-missing-sample-variants.js
+++ b/shopify/scripts/create-missing-sample-variants.js
@@ -15,7 +15,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const SCRIPTS_DIR = '/root/Projects/Designer-Wallcoverings/shopify/scripts';
diff --git a/shopify/scripts/create-novasuede-rosewater.js b/shopify/scripts/create-novasuede-rosewater.js
index 1b01c3d2..5fd07574 100644
--- a/shopify/scripts/create-novasuede-rosewater.js
+++ b/shopify/scripts/create-novasuede-rosewater.js
@@ -10,7 +10,7 @@
 
 const https = require('https');
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 
 const APPLY = process.argv.includes('--apply');
 
diff --git a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24 b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
index 88c1304c..b88f4759 100644
--- a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
+++ b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
@@ -18,7 +18,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = 'https://hooks.slack.com/services/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';
 
 const pool = new Pool({
diff --git a/shopify/scripts/dwkk-zero-price-cleanup.js b/shopify/scripts/dwkk-zero-price-cleanup.js
index 662e8b6f..118bae17 100644
--- a/shopify/scripts/dwkk-zero-price-cleanup.js
+++ b/shopify/scripts/dwkk-zero-price-cleanup.js
@@ -7,7 +7,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const DELAY_MS = 600;
 const INQUIRY_HTML = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
diff --git a/shopify/scripts/dwvs-activate-ready-drafts.js b/shopify/scripts/dwvs-activate-ready-drafts.js
index 3e1ff947..5db4cd30 100644
--- a/shopify/scripts/dwvs-activate-ready-drafts.js
+++ b/shopify/scripts/dwvs-activate-ready-drafts.js
@@ -7,7 +7,7 @@
 // Also require a priced bolt — no point activating a product that can't be bought.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 const path = require('path');
diff --git a/shopify/scripts/dwvs-import-catalog-only.js b/shopify/scripts/dwvs-import-catalog-only.js
index 1d8efd5d..155e5f20 100644
--- a/shopify/scripts/dwvs-import-catalog-only.js
+++ b/shopify/scripts/dwvs-import-catalog-only.js
@@ -4,7 +4,7 @@
 // Title: "{Pattern} {Color} Wallcovering | Versace"
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 const path = require('path');
diff --git a/shopify/scripts/dwvs-original-series-apply.js b/shopify/scripts/dwvs-original-series-apply.js
index 4de2c6a7..081d6b94 100644
--- a/shopify/scripts/dwvs-original-series-apply.js
+++ b/shopify/scripts/dwvs-original-series-apply.js
@@ -10,7 +10,7 @@
 // This script is a DRY-RUN by default. Pass --execute to actually write changes.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 const path = require('path');
diff --git a/shopify/scripts/dwvs-reconcile-mfr.js b/shopify/scripts/dwvs-reconcile-mfr.js
index 92750f25..2ff0cad4 100644
--- a/shopify/scripts/dwvs-reconcile-mfr.js
+++ b/shopify/scripts/dwvs-reconcile-mfr.js
@@ -9,7 +9,7 @@
 // 7. Report: which Shopify products updated, which 20 catalog rows have no Shopify match (for step 5 import)
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 const path = require('path');
diff --git a/shopify/scripts/dwvs-versace-csv-export.js b/shopify/scripts/dwvs-versace-csv-export.js
index 1d088a9e..5a275824 100644
--- a/shopify/scripts/dwvs-versace-csv-export.js
+++ b/shopify/scripts/dwvs-versace-csv-export.js
@@ -3,7 +3,7 @@
 // MFR SKU is mandatory — pulled from product tags and manufacturer_sku metafields.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 const path = require('path');
diff --git a/shopify/scripts/dwwd-roll-length/fix-orphans.js b/shopify/scripts/dwwd-roll-length/fix-orphans.js
index 327100f9..644d4382 100644
--- a/shopify/scripts/dwwd-roll-length/fix-orphans.js
+++ b/shopify/scripts/dwwd-roll-length/fix-orphans.js
@@ -1,7 +1,7 @@
 #!/usr/bin/env node
 // Apply roll-length to the 8 orphans (not in MTG catalog, but MTG standard dimensions known).
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API = `https://${SHOP}/admin/api/2024-01/graphql.json`;
 
 // 7 standard MTG rolls (0.52m × 10m) + 1 three-panel mural (0.52m × 3m, 3 panels per box)
diff --git a/shopify/scripts/dwwd-roll-length/run.js b/shopify/scripts/dwwd-roll-length/run.js
index a79f2fcf..80e77537 100644
--- a/shopify/scripts/dwwd-roll-length/run.js
+++ b/shopify/scripts/dwwd-roll-length/run.js
@@ -10,7 +10,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API = `https://${SHOP}/admin/api/2024-01/graphql.json`;
 const APPLY = process.argv.includes('--apply');
 const OUT = __dirname;
diff --git a/shopify/scripts/fix-dwkk-zero-price-variants.js b/shopify/scripts/fix-dwkk-zero-price-variants.js
index 4c705bca..a0f7038c 100644
--- a/shopify/scripts/fix-dwkk-zero-price-variants.js
+++ b/shopify/scripts/fix-dwkk-zero-price-variants.js
@@ -7,7 +7,7 @@
  */
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
 const DELAY_MS = 600;
diff --git a/shopify/scripts/fix-dwkk-zero-price.js b/shopify/scripts/fix-dwkk-zero-price.js
index 4bca34d4..8462a2ce 100644
--- a/shopify/scripts/fix-dwkk-zero-price.js
+++ b/shopify/scripts/fix-dwkk-zero-price.js
@@ -8,7 +8,7 @@
 const https = require('https');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const INQUIRY_MSG = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
 
diff --git a/shopify/scripts/fix-missing-sample-variants.js b/shopify/scripts/fix-missing-sample-variants.js
index 56ae10c3..cf176d03 100644
--- a/shopify/scripts/fix-missing-sample-variants.js
+++ b/shopify/scripts/fix-missing-sample-variants.js
@@ -16,7 +16,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_ID = 5795643504;
 const INVENTORY_LEVEL = 2026;
diff --git a/shopify/scripts/fix-missing-samples.js b/shopify/scripts/fix-missing-samples.js
index 17f2778b..32a8d51d 100644
--- a/shopify/scripts/fix-missing-samples.js
+++ b/shopify/scripts/fix-missing-samples.js
@@ -15,7 +15,7 @@ const fs = require('fs');
 const pathMod = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_ID = 5795643504;
 const GRAPHQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
diff --git a/shopify/scripts/fix-sample-inventory-only.js b/shopify/scripts/fix-sample-inventory-only.js
index a2ecd85e..faa9a621 100644
--- a/shopify/scripts/fix-sample-inventory-only.js
+++ b/shopify/scripts/fix-sample-inventory-only.js
@@ -8,7 +8,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const TARGET_QTY = 2026;
diff --git a/shopify/scripts/fix-sample-inventory.js b/shopify/scripts/fix-sample-inventory.js
index 8a6b153a..03377178 100644
--- a/shopify/scripts/fix-sample-inventory.js
+++ b/shopify/scripts/fix-sample-inventory.js
@@ -11,7 +11,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const TARGET_QTY = 2026;
diff --git a/shopify/scripts/fix-samples-graphql.js b/shopify/scripts/fix-samples-graphql.js
index 27eac215..a8c0d7e8 100644
--- a/shopify/scripts/fix-samples-graphql.js
+++ b/shopify/scripts/fix-samples-graphql.js
@@ -15,7 +15,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const SCRIPTS_DIR = '/root/Projects/Designer-Wallcoverings/shopify/scripts';
diff --git a/shopify/scripts/fix-zero-inventory-samples.js b/shopify/scripts/fix-zero-inventory-samples.js
index d91b7a5b..65c6d48f 100644
--- a/shopify/scripts/fix-zero-inventory-samples.js
+++ b/shopify/scripts/fix-zero-inventory-samples.js
@@ -12,7 +12,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const TARGET_QTY = 2026;
diff --git a/shopify/scripts/gemini-catalog-tagger.js b/shopify/scripts/gemini-catalog-tagger.js
index 8234baf9..ef355505 100644
--- a/shopify/scripts/gemini-catalog-tagger.js
+++ b/shopify/scripts/gemini-catalog-tagger.js
@@ -336,7 +336,7 @@ async function processTable(tableName, limit) {
 
 // ── Shopify Push ────────────────────────────────────────────────────────────
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DELAY = 550; // 2 req/s
 
 async function pushToShopify(tableName) {
diff --git a/shopify/scripts/gemini-tag-engine/index.js b/shopify/scripts/gemini-tag-engine/index.js
index 67efae76..6239f5f2 100644
--- a/shopify/scripts/gemini-tag-engine/index.js
+++ b/shopify/scripts/gemini-tag-engine/index.js
@@ -19,7 +19,7 @@ const GEMINI_MODEL = 'gemini-2.0-flash';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_API_KEY}`;
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_API_VERSION = '2024-10';
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/shopify/scripts/hollywood-tag-enrichment.js b/shopify/scripts/hollywood-tag-enrichment.js
index 493f3855..7e26dd86 100644
--- a/shopify/scripts/hollywood-tag-enrichment.js
+++ b/shopify/scripts/hollywood-tag-enrichment.js
@@ -12,7 +12,7 @@ const { Client } = require('pg');
 const https = require('https');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
diff --git a/shopify/scripts/interior-design-tagger.js b/shopify/scripts/interior-design-tagger.js
index 52d6487d..99decf3c 100644
--- a/shopify/scripts/interior-design-tagger.js
+++ b/shopify/scripts/interior-design-tagger.js
@@ -21,7 +21,7 @@ const GEMINI_MODEL = 'gemini-2.0-flash';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_KEY}`;
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/shopify/scripts/inventory-set-2026.js b/shopify/scripts/inventory-set-2026.js
index 6e4e4802..4bb07862 100644
--- a/shopify/scripts/inventory-set-2026.js
+++ b/shopify/scripts/inventory-set-2026.js
@@ -13,7 +13,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
 const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
diff --git a/shopify/scripts/koroseal-batch-cron.js b/shopify/scripts/koroseal-batch-cron.js
index 01313d94..24753bf4 100644
--- a/shopify/scripts/koroseal-batch-cron.js
+++ b/shopify/scripts/koroseal-batch-cron.js
@@ -12,7 +12,7 @@ const { isProtected } = require('/Users/stevestudio2/Projects/_shared/archive-gu
 
 // Config
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
diff --git a/shopify/scripts/koroseal-enhanced-update.js b/shopify/scripts/koroseal-enhanced-update.js
index 9f14b128..ffffbbe4 100644
--- a/shopify/scripts/koroseal-enhanced-update.js
+++ b/shopify/scripts/koroseal-enhanced-update.js
@@ -60,7 +60,7 @@ const app = (0, express_1.default)();
 const PORT = 9895;
 // Shopify Configuration
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 // Gemini Configuration (MANDATORY - No Claude Vision)
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
diff --git a/shopify/scripts/koroseal-mfr-from-handles.js b/shopify/scripts/koroseal-mfr-from-handles.js
index 618f7726..6e4bf281 100644
--- a/shopify/scripts/koroseal-mfr-from-handles.js
+++ b/shopify/scripts/koroseal-mfr-from-handles.js
@@ -13,7 +13,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 function log(msg) {
     console.log(`[${new Date().toLocaleTimeString()}] ${msg}`);
diff --git a/shopify/scripts/koroseal-mfr-populator.js b/shopify/scripts/koroseal-mfr-populator.js
index e55a33a7..4b68d8fa 100644
--- a/shopify/scripts/koroseal-mfr-populator.js
+++ b/shopify/scripts/koroseal-mfr-populator.js
@@ -12,7 +12,7 @@ const fetch = require('node-fetch');
 
 // Shopify Configuration
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 // Spreadsheet URLs
 const TYPE2_SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1FYG7TGUUiim_RL25YJx5R9tBcgL3ilFlLy3dQISVSMo/gviz/tq?tqx=out:csv';
diff --git a/shopify/scripts/kravet-full-monty-single.js b/shopify/scripts/kravet-full-monty-single.js
index 873c85b0..c6b4d7bc 100644
--- a/shopify/scripts/kravet-full-monty-single.js
+++ b/shopify/scripts/kravet-full-monty-single.js
@@ -5,7 +5,7 @@
 // Target (CLI arg): SKU e.g. DWKK-143879
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const fs = require('fs');
 
diff --git a/shopify/scripts/la-walls-image-sync.js b/shopify/scripts/la-walls-image-sync.js
index 47bd8c78..b8b7017a 100644
--- a/shopify/scripts/la-walls-image-sync.js
+++ b/shopify/scripts/la-walls-image-sync.js
@@ -12,7 +12,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 
 async function graphqlQuery(query, variables = {}) {
diff --git a/shopify/scripts/migrate-barcode-to-mfr-sku.py b/shopify/scripts/migrate-barcode-to-mfr-sku.py
index 79c3dfce..c175992c 100644
--- a/shopify/scripts/migrate-barcode-to-mfr-sku.py
+++ b/shopify/scripts/migrate-barcode-to-mfr-sku.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+import os
 """
 Migrate variant barcodes → global.manufacturer_sku metafield.
 
@@ -15,7 +16,7 @@ import sys
 from datetime import datetime
 
 STORE = "designer-laboratory-sandbox.myshopify.com"
-TOKEN = "***REMOVED***"
+TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 API_VERSION = "2024-10"
 GQL_URL = f"https://{STORE}/admin/api/{API_VERSION}/graphql.json"
 REST_BASE = f"https://{STORE}/admin/api/{API_VERSION}"
diff --git a/shopify/scripts/migrate-mckenzie-global-to-custom.js b/shopify/scripts/migrate-mckenzie-global-to-custom.js
index dd3326fd..8efa4ac9 100644
--- a/shopify/scripts/migrate-mckenzie-global-to-custom.js
+++ b/shopify/scripts/migrate-mckenzie-global-to-custom.js
@@ -7,7 +7,7 @@
  */
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const VENDOR = 'Brand McKenzie';
 
 const KEY_REMAP = { lead_time: 'delivery_time' }; // global.<k> -> custom.<remap[k]||k>
diff --git a/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24 b/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
index 810e5f91..ae4b4d34 100644
--- a/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
+++ b/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
@@ -19,7 +19,7 @@ const http = require('http');
 const fs = require('fs');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GEMINI_KEY = 'REDACTED_GEMINI_KEY';
 const LOG_FILE = '/tmp/nina_monty_fix.log';
 const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/shopify/scripts/paul-montgomery-image-sync.js b/shopify/scripts/paul-montgomery-image-sync.js
index ffb3e2ee..fe78871e 100644
--- a/shopify/scripts/paul-montgomery-image-sync.js
+++ b/shopify/scripts/paul-montgomery-image-sync.js
@@ -17,7 +17,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/2024-10/graphql.json`;
 
 const pool = new Pool({
diff --git a/shopify/scripts/push-fire-rating-metafields.js b/shopify/scripts/push-fire-rating-metafields.js
index 027a1c31..6bf7bd91 100644
--- a/shopify/scripts/push-fire-rating-metafields.js
+++ b/shopify/scripts/push-fire-rating-metafields.js
@@ -14,7 +14,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const BATCH_SIZE = 25;
 const DELAY_MS = 600; // ~1.5 calls/sec to stay well under 20 req/s Plus limit
 
diff --git a/shopify/scripts/push-pattern-repeat-metafields.js b/shopify/scripts/push-pattern-repeat-metafields.js
index ca0bd010..3a6f50cf 100644
--- a/shopify/scripts/push-pattern-repeat-metafields.js
+++ b/shopify/scripts/push-pattern-repeat-metafields.js
@@ -15,7 +15,7 @@ const { Client } = require('pg');
 const fs = require('fs');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const BATCH_SIZE = 25;
diff --git a/shopify/scripts/resume-sample-variant-creation.js b/shopify/scripts/resume-sample-variant-creation.js
index 29acccfd..c966b3f1 100644
--- a/shopify/scripts/resume-sample-variant-creation.js
+++ b/shopify/scripts/resume-sample-variant-creation.js
@@ -15,7 +15,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const LOCATION_GID = 'gid://shopify/Location/5795643504';
 const TARGET_QTY = 2026;
diff --git a/shopify/scripts/revert-dwcy-pass2.js b/shopify/scripts/revert-dwcy-pass2.js
index dd6e9b75..ee7ddf1d 100644
--- a/shopify/scripts/revert-dwcy-pass2.js
+++ b/shopify/scripts/revert-dwcy-pass2.js
@@ -11,7 +11,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
 const REST_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}`;
diff --git a/shopify/scripts/revert-dwcy-to-dwc.js b/shopify/scripts/revert-dwcy-to-dwc.js
index 4282bc03..7d1858a3 100644
--- a/shopify/scripts/revert-dwcy-to-dwc.js
+++ b/shopify/scripts/revert-dwcy-to-dwc.js
@@ -12,7 +12,7 @@
  */
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
 const REST_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}`;
diff --git a/shopify/scripts/romo-lookup.js b/shopify/scripts/romo-lookup.js
index bb74cb0e..9cefd8d8 100644
--- a/shopify/scripts/romo-lookup.js
+++ b/shopify/scripts/romo-lookup.js
@@ -13,7 +13,7 @@ const fs = require('fs');
 const https = require('https');
 
 const SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com";
-const SHOPIFY_TOKEN = "***REMOVED***";
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const LOG_FILE = "/tmp/romo-lookup.log";
 const RESULTS_FILE = "/tmp/romo-lookup-results.json";
 const SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}";
diff --git a/shopify/scripts/sample-only-price-match.js b/shopify/scripts/sample-only-price-match.js
index bdc42706..d90c2dd7 100644
--- a/shopify/scripts/sample-only-price-match.js
+++ b/shopify/scripts/sample-only-price-match.js
@@ -4,7 +4,7 @@
 // report how many have prices available.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const plan = require('./sandberg-wm-plan-2026-04-20T18-55-22-936Z.json');
 const fs = require('fs');
diff --git a/shopify/scripts/sample-only-status-audit.js b/shopify/scripts/sample-only-status-audit.js
index 443be4e2..23eae55a 100644
--- a/shopify/scripts/sample-only-status-audit.js
+++ b/shopify/scripts/sample-only-status-audit.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const plan = require('./sandberg-wm-plan-2026-04-20T18-55-22-936Z.json');
 
diff --git a/shopify/scripts/sandberg-add-bolt-fix-legacy.js b/shopify/scripts/sandberg-add-bolt-fix-legacy.js
index e29ce8e1..a5fb596e 100644
--- a/shopify/scripts/sandberg-add-bolt-fix-legacy.js
+++ b/shopify/scripts/sandberg-add-bolt-fix-legacy.js
@@ -7,7 +7,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const BOLT_VALUE = 'Sold Per Bolt (20.5in x 33ft)';
 const WEIGHT_LB = 4;
diff --git a/shopify/scripts/sandberg-add-bolt-variants.js b/shopify/scripts/sandberg-add-bolt-variants.js
index 80818688..ed1ceca1 100644
--- a/shopify/scripts/sandberg-add-bolt-variants.js
+++ b/shopify/scripts/sandberg-add-bolt-variants.js
@@ -18,7 +18,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
 const BOLT_OPTION_VALUE = 'Sold Per Bolt (20.5in x 33ft)';
diff --git a/shopify/scripts/sandberg-add-mural-variants.js b/shopify/scripts/sandberg-add-mural-variants.js
index 08642c50..9fffef3b 100644
--- a/shopify/scripts/sandberg-add-mural-variants.js
+++ b/shopify/scripts/sandberg-add-mural-variants.js
@@ -10,7 +10,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
 const VARIANT_VALUE = 'Sold Per Square Meter';
diff --git a/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24 b/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
index 35a45a0c..d30b3fbe 100644
--- a/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
+++ b/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
@@ -7,7 +7,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
 const ITEMS = require('./sandberg-discontinued-to-archive.json');
diff --git a/shopify/scripts/sandberg-william-morris-weight-4lb.js b/shopify/scripts/sandberg-william-morris-weight-4lb.js
index 1d906f4e..b2e09201 100644
--- a/shopify/scripts/sandberg-william-morris-weight-4lb.js
+++ b/shopify/scripts/sandberg-william-morris-weight-4lb.js
@@ -3,7 +3,7 @@
 // Sample variants (title "Sample" or SKU ending "-Sample") are left untouched.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
 const TARGET_LB = 4.0;
diff --git a/shopify/scripts/sandberg-wm-add-wallcovering-title.js b/shopify/scripts/sandberg-wm-add-wallcovering-title.js
index 84c31a0f..3591fba2 100644
--- a/shopify/scripts/sandberg-wm-add-wallcovering-title.js
+++ b/shopify/scripts/sandberg-wm-add-wallcovering-title.js
@@ -4,7 +4,7 @@
 // "Wallcovering" or "Wallcoverings" on the left side of the pipe.
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
 
diff --git a/shopify/scripts/sandberg-wm-price-audit.js b/shopify/scripts/sandberg-wm-price-audit.js
index a714920e..9b68d068 100644
--- a/shopify/scripts/sandberg-wm-price-audit.js
+++ b/shopify/scripts/sandberg-wm-price-audit.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
 
diff --git a/shopify/scripts/sandberg-wm-pull-full.js b/shopify/scripts/sandberg-wm-pull-full.js
index 09a4ad82..df946b2b 100644
--- a/shopify/scripts/sandberg-wm-pull-full.js
+++ b/shopify/scripts/sandberg-wm-pull-full.js
@@ -4,7 +4,7 @@
 // for reconciliation against PG (sandberg_catalog / william_morris_catalog).
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
 
diff --git a/shopify/scripts/scan-missing-samples.js b/shopify/scripts/scan-missing-samples.js
index b00fa795..2caf72f9 100644
--- a/shopify/scripts/scan-missing-samples.js
+++ b/shopify/scripts/scan-missing-samples.js
@@ -9,7 +9,7 @@ const https = require('https');
 const fs = require('fs');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const OUTPUT_FILE = '/root/Projects/Designer-Wallcoverings/shopify/scripts/missing-samples.json';
 
diff --git a/shopify/scripts/sync-shopify-products.js b/shopify/scripts/sync-shopify-products.js
index e025177f..77beee01 100644
--- a/shopify/scripts/sync-shopify-products.js
+++ b/shopify/scripts/sync-shopify-products.js
@@ -21,7 +21,7 @@ const pool = new Pool({
 });
 
 const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-01';
 
 async function shopifyGraphQL(query, variables = {}) {
diff --git a/shopify/scripts/update-brand-mckenzie-vendor.js b/shopify/scripts/update-brand-mckenzie-vendor.js
index 9c6691df..ad693f7a 100644
--- a/shopify/scripts/update-brand-mckenzie-vendor.js
+++ b/shopify/scripts/update-brand-mckenzie-vendor.js
@@ -8,7 +8,7 @@
 const fetch = require('node-fetch');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 // Products to update with their MFR SKUs (extracted from titles)
 const PRODUCTS = [
diff --git a/shopify/scripts/update-mckenzie-delivery.js b/shopify/scripts/update-mckenzie-delivery.js
index ee5e4789..35cbe4e8 100644
--- a/shopify/scripts/update-mckenzie-delivery.js
+++ b/shopify/scripts/update-mckenzie-delivery.js
@@ -6,7 +6,7 @@
  */
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
 const VENDOR = 'Brand McKenzie';
 const DELIVERY_HTML = '<p>&nbsp;<strong>2-4 Week Delivery</strong></p>';
 const LEAD_TIME = '2-4 Weeks';
diff --git a/shopify/scripts/update-rop-mfr.py b/shopify/scripts/update-rop-mfr.py
index e8b25095..930e244f 100644
--- a/shopify/scripts/update-rop-mfr.py
+++ b/shopify/scripts/update-rop-mfr.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+import os
 """
 Update all ROP- products in Shopify with manufacturer numbers from FMPro cross-reference.
 """
@@ -13,7 +14,7 @@ from datetime import datetime
 
 # Config
 SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
 API_VERSION = "2024-01"
 GRAPHQL_URL = f"https://{SHOPIFY_DOMAIN}/admin/api/{API_VERSION}/graphql.json"
 FMPRO_CSV = "/root/Projects/Designer-Wallcoverings/shopify/scripts/fmpro-master.csv"
diff --git a/shopify/scripts/wm-add-bolt-variants.js b/shopify/scripts/wm-add-bolt-variants.js
index acf3c736..7d9c954d 100644
--- a/shopify/scripts/wm-add-bolt-variants.js
+++ b/shopify/scripts/wm-add-bolt-variants.js
@@ -11,7 +11,7 @@ const fs = require('fs');
 const path = require('path');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 
 const WM = JSON.parse(fs.readFileSync('active-so-needs-scrape.json', 'utf8')).filter(x => x.vendor === 'William Morris');
diff --git a/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24 b/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
index ae84db12..c8cec069 100644
--- a/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
+++ b/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
@@ -5,7 +5,7 @@
 const fs = require('fs');
 const path = require('path');
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
 const ITEMS = require('./wm-empty-title.json');
 
diff --git a/shopify/scripts/zoffany-ai-enrich-push.js b/shopify/scripts/zoffany-ai-enrich-push.js
index ab15a418..d225e9d4 100644
--- a/shopify/scripts/zoffany-ai-enrich-push.js
+++ b/shopify/scripts/zoffany-ai-enrich-push.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const BATCH_LIMIT = 302;
 const DELAY_MS = 800; // safe under 2/s REST limit with margin
diff --git a/shopify/scripts/zoffany-full-monty-20.js b/shopify/scripts/zoffany-full-monty-20.js
index aaff1783..1dd23afd 100644
--- a/shopify/scripts/zoffany-full-monty-20.js
+++ b/shopify/scripts/zoffany-full-monty-20.js
@@ -30,7 +30,7 @@ const { execFileSync } = require('child_process');
 // ─── Configuration ──────────────────────────────────────────────────────────
 const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;

← aec78cfa scrub hardcoded secrets from docs (Shopify token, Brewster p  ·  back to Designer Wallcoverings  ·  Refactor hardcoded DWSecure2024! basic-auth password to env 778ca02e →