[object Object]

← back to Designer Wallcoverings

security: strip hardcoded dw_admin DSN password -> env-first across DW. No rotation/deploy.

f19be762ba7ef824cc91916b81d108eecf54dbaa · 2026-05-30 09:46:14 -0700 · Steve

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

Files touched

Diff

commit f19be762ba7ef824cc91916b81d108eecf54dbaa
Author: Steve <steve@designerwallcoverings.com>
Date:   Sat May 30 09:46:14 2026 -0700

    security: strip hardcoded dw_admin DSN password -> env-first across DW. No rotation/deploy.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 DW-Agents/dw-agents/agent-slack/slack-agent.js                        | 2 +-
 DW-Agents/dw-agents/agent-slack/slack-agent.ts                        | 2 +-
 DW-Agents/dw-agents/agent-thibaut-updater/thibaut-updater-agent.ts    | 2 +-
 DW-Agents/dw-agents/architectural-update-agent.ts                     | 2 +-
 DW-Agents/dw-agents/dw-blog-agent/server.js                           | 2 +-
 DW-Agents/dw-agents/dw-instagram-agent/server.js                      | 2 +-
 DW-Agents/dw-agents/shared-executive-core.ts                          | 2 +-
 DW-Programming/150dpi/database/db-postgres.js                         | 2 +-
 DW-Programming/ImportNewSkufromURL/api-vendor-fixer.ts                | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/auto-explore/route.ts      | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/crawl-last-50/route.ts     | 2 +-
 .../ImportNewSkufromURL/app/api/delete-vendor-samples/route.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/detect-colorways/route.ts  | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/detect-images/route.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/image-proxy/route.ts       | 2 +-
 .../ImportNewSkufromURL/app/api/ralph-wiggum-postgres/route.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/run-crawl/route.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/save-colorways/route.ts    | 2 +-
 .../ImportNewSkufromURL/app/api/save-crawled-products/route.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/save-tested-url/route.ts   | 2 +-
 .../ImportNewSkufromURL/app/api/update-product-thumbnail/route.ts     | 2 +-
 .../ImportNewSkufromURL/app/api/update-vendor-urls/route.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/vendor-approval/route.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/vendor-brightdata/route.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/app/api/vendor-proof/route.ts      | 2 +-
 .../app/api/vendor-schema-manager/save-urls/route.ts                  | 2 +-
 DW-Programming/ImportNewSkufromURL/auto-detect-all-vendors.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/auto-detect-batch.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/auto-detect-from-db-urls.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/auto-detect-remaining.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/auto-detect-selectors.ts           | 2 +-
 .../ImportNewSkufromURL/autonomous-discovery-orchestrator.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/autonomous-product-discovery.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/brightdata-product-discovery.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/concurrent-brightdata-discovery.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/continue-discovery.ts              | 2 +-
 DW-Programming/ImportNewSkufromURL/continuous-db-saver.ts             | 2 +-
 DW-Programming/ImportNewSkufromURL/crawl-pending.ts                   | 2 +-
 DW-Programming/ImportNewSkufromURL/crawl-shopify-vendors.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/critical-save-discovered-data.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/emergency-save-to-db.ts            | 2 +-
 DW-Programming/ImportNewSkufromURL/enhance-scrapers-with-schemas.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/enhanced-discovery-viewer.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/fixed-discovery-system.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/fixed-kravet-discovery.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/lib/color-variant-tracker.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/lib/database/postgres-client.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/lib/schema-helper.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/postgresql-discovery-restart.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/postgresql-viewer.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/real-product-discovery.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/real-products-viewer.ts            | 2 +-
 DW-Programming/ImportNewSkufromURL/restart-discovery.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/review-failed-vendors.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/save-discovery-data.ts             | 2 +-
 DW-Programming/ImportNewSkufromURL/scrape-lee-jofa.ts                 | 2 +-
 .../ImportNewSkufromURL/scripts/_disabled/update-kravet-images.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/aggressive-crawl.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/analyze-top30-json-data.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/batch-crawl-vendors.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/batch-crawl.ts             | 2 +-
 .../ImportNewSkufromURL/scripts/batch-puppeteer-full-conversion.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/capture-10-per-vendor.ts   | 2 +-
 .../ImportNewSkufromURL/scripts/capture-aesthetics-colors.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/capture-andrew-martin.ts   | 2 +-
 .../ImportNewSkufromURL/scripts/check-vendor-selectors-final.ts       | 2 +-
 .../ImportNewSkufromURL/scripts/check-vendor-selectors-v2.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors.ts  | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/consume-variant-queue.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-custhom.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-harlequin-glant.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-momentum.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-remaining.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-thibaut.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/crawl-wolfgordon.ts        | 2 +-
 .../ImportNewSkufromURL/scripts/create-real-working-images.ts         | 2 +-
 .../ImportNewSkufromURL/scripts/create-visible-test-images.ts         | 2 +-
 .../ImportNewSkufromURL/scripts/dangerous-fix-all-vendors.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/extract-dedar-colorways.js | 2 +-
 .../ImportNewSkufromURL/scripts/extract-full-product-details.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/extract-images.js          | 2 +-
 .../ImportNewSkufromURL/scripts/extract-innovations-colorways.ts      | 2 +-
 .../ImportNewSkufromURL/scripts/extract-product-images-only.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/extract-product-images.ts  | 2 +-
 .../ImportNewSkufromURL/scripts/extract-real-product-images.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-1838.ts                | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-aesthetics-wall.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendor-images.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendors.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-andrew-martin.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-arbor-wood.ts          | 2 +-
 .../ImportNewSkufromURL/scripts/fix-failed-vendors-dangerous.ts       | 2 +-
 .../ImportNewSkufromURL/scripts/fix-images-from-database-urls.ts      | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-missing-thumbnails.ts  | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-remaining-images.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-schumacher-images.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-fast.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-smart.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/get-all-real-products.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/get-real-kravet-images.ts  | 2 +-
 .../ImportNewSkufromURL/scripts/get-thibaut-direct-images.ts          | 2 +-
 .../ImportNewSkufromURL/scripts/method1-screenshot-capture.ts         | 2 +-
 .../ImportNewSkufromURL/scripts/method2-create-small-jpegs.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl-all.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl.ts         | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-data.ts    | 2 +-
 .../ImportNewSkufromURL/scripts/populate-vendor-products.ts           | 2 +-
 .../ImportNewSkufromURL/scripts/prove-3-products-per-vendor.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/prove-via-agent-sku.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/quick-add-more-products.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/quick-crawl-remaining.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/quick-proof.ts             | 4 ++--
 .../ImportNewSkufromURL/scripts/ralph-wiggum-product-finder.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/run-all-vendor-scrapers.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/run-thibaut-crawl.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/scan-all-vendors.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/scan-variants-from-db.ts   | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/smart-crawl.ts             | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-images.ts | 2 +-
 .../ImportNewSkufromURL/scripts/test-all-vendors-save-results.ts      | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-yolo.ts   | 2 +-
 .../ImportNewSkufromURL/scripts/test-color-detection-stable.ts        | 2 +-
 .../ImportNewSkufromURL/scripts/test-color-variant-detection.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-elitis.ts             | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-scalamandre-direct.ts | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-william-morris.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-working-vendors.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/test-york.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/yolo-fetch-real-images.ts  | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/yolo-fix-everything.ts     | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/yolo-image-fetcher.ts      | 2 +-
 .../ImportNewSkufromURL/scripts/yolo-kravet-correct-urls.ts           | 2 +-
 .../ImportNewSkufromURL/scripts/yolo-kravet-download-button.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/scripts/yolo-product-harvester.ts  | 2 +-
 .../ImportNewSkufromURL/scripts/yolo-real-product-images.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/skip-brunschwig-continue.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/smart-continue-discovery.ts        | 2 +-
 DW-Programming/ImportNewSkufromURL/test-all-vendors-pipeline.ts       | 2 +-
 DW-Programming/ImportNewSkufromURL/test-random-vendor-selectors.ts    | 2 +-
 DW-Programming/ImportNewSkufromURL/test-vendor-batch.ts               | 2 +-
 DW-Programming/ImportNewSkufromURL/test-yolo-scrapers.ts              | 2 +-
 .../ImportNewSkufromURL/vendor-inspector/inspector-server.ts          | 2 +-
 DW-Programming/ImportNewSkufromURL/yolo-overnight-runner.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/yolo-schema-discovery.ts           | 2 +-
 DW-Programming/ImportNewSkufromURL/yolo-scraper-generator.ts          | 2 +-
 DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts      | 2 +-
 DW-Programming/ShopifyCalendarNext/scripts/rescan-scheduled-posts.ts  | 2 +-
 .../ShopifyCalendarNext/src/app/api/analyze-product/route.ts          | 2 +-
 .../ShopifyCalendarNext/src/app/api/bespoke-product/route.ts          | 2 +-
 DW-Programming/ShopifyCalendarNext/src/lib/db.ts                      | 2 +-
 DW-Programming/activate-versace-drafts.js                             | 2 +-
 DW-Programming/activate-versace-vi.js                                 | 2 +-
 DW-Programming/anna-french-ai-enrich.js                               | 2 +-
 DW-Programming/anna-french-room-settings.js                           | 2 +-
 DW-Programming/anna-french-shopify-push.js                            | 2 +-
 DW-Programming/archive-thibaut-discontinued.js                        | 2 +-
 DW-Programming/arte-crawl-all-urls.js                                 | 2 +-
 DW-Programming/arte-image-backfill.js                                 | 2 +-
 DW-Programming/arte-search-scrape-width.js                            | 2 +-
 DW-Programming/arte-width-from-shopify.js                             | 2 +-
 DW-Programming/as-creation-shopify-push.js                            | 2 +-
 DW-Programming/backfill-schumacher-images.js                          | 2 +-
 DW-Programming/china-seas-design-tagger.js                            | 2 +-
 DW-Programming/china-seas-hex-colors.js                               | 2 +-
 DW-Programming/china-seas-image-enrichment-2.js                       | 2 +-
 DW-Programming/china-seas-image-enrichment-3.js                       | 2 +-
 DW-Programming/china-seas-image-enrichment.js                         | 2 +-
 DW-Programming/command54-shopify-push.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/enrich-anna-french-pass2.js                            | 2 +-
 DW-Programming/enrich-anna-french-specs.js                            | 2 +-
 DW-Programming/enrich-anna-french.js                                  | 2 +-
 DW-Programming/enrich-arte-width.js                                   | 2 +-
 DW-Programming/enrich-ascreation-width.js                             | 2 +-
 DW-Programming/enrich-grahambrown-width.js                            | 2 +-
 DW-Programming/enrich-rl-width.js                                     | 2 +-
 DW-Programming/fix-empty-body-html.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/generate-maya-room-settings.js                         | 2 +-
 DW-Programming/generate-maya-spin-viewers.js                          | 2 +-
 DW-Programming/hex-color-blitz.js                                     | 2 +-
 DW-Programming/hollywood-hex-and-tags.js                              | 2 +-
 DW-Programming/hollywood-hex-extract.js                               | 2 +-
 DW-Programming/hollywood-shopify-push.js                              | 2 +-
 DW-Programming/interior-design-ai-tagger.js                           | 2 +-
 DW-Programming/jd-room-batch.js                                       | 2 +-
 DW-Programming/jd-room-test.js                                        | 2 +-
 DW-Programming/justindavid-shopify-push.js                            | 2 +-
 DW-Programming/launch-versace-vi.js                                   | 2 +-
 DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js         | 2 +-
 DW-Programming/maya-romanoff-updater/server.js                        | 2 +-
 DW-Programming/mdcwall-image-finder.js                                | 2 +-
 DW-Programming/migrate-dwkk-to-dwpr.js                                | 2 +-
 DW-Programming/nextjs-liquid-app/backfill-metafields.js               | 2 +-
 DW-Programming/nextjs-liquid-app/db-proxy/server.js                   | 2 +-
 DW-Programming/nextjs-liquid-app/update-mckenzie-titles.js            | 2 +-
 DW-Programming/phase3-ai-enrich-100.js                                | 2 +-
 DW-Programming/phase3-ai-enrich-batch.js                              | 2 +-
 DW-Programming/phase3-ai-enrich-run.js                                | 2 +-
 DW-Programming/phase3-ai-enrichment.js                                | 2 +-
 DW-Programming/pj-tearsheet-scraper.js                                | 2 +-
 DW-Programming/prl-ai-enrich.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/romo-group-enrichment-scraper.js                       | 2 +-
 DW-Programming/room-setting-app/scripts/batch-room-generator.js       | 2 +-
 DW-Programming/scrape-versa-evo-pvcfree.js                            | 2 +-
 DW-Programming/scrape-versace-images.js                               | 2 +-
 DW-Programming/set-pattern-name-metafield.js                          | 2 +-
 DW-Programming/test-anna-5.js                                         | 2 +-
 DW-Programming/twil-image-retail-scraper.js                           | 2 +-
 DW-Programming/twil-image-validator.js                                | 2 +-
 DW-Programming/twil-tag-needs-image.js                                | 2 +-
 DW-Programming/twil-verify-remaining.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 +-
 DW-Programming/vendor-crawlers/arte-crawler/server.js                 | 2 +-
 DW-Programming/vendor-crawlers/bespoke-crawler/server.js              | 2 +-
 DW-Programming/vendor-crawlers/brewster-crawler/server.js             | 2 +-
 DW-Programming/vendor-crawlers/coleson-crawler/server.js              | 2 +-
 DW-Programming/vendor-crawlers/cowtan-crawler/server.js               | 2 +-
 DW-Programming/vendor-crawlers/elitis-crawler/scraper.js              | 2 +-
 DW-Programming/vendor-crawlers/elitis-crawler/server.js               | 2 +-
 DW-Programming/vendor-crawlers/enrich-nlxl.js                         | 2 +-
 DW-Programming/vendor-crawlers/innovations-crawler/server.js          | 2 +-
 DW-Programming/vendor-crawlers/koroseal-crawler/server.js             | 2 +-
 DW-Programming/vendor-crawlers/kravet-crawler/server.js               | 2 +-
 DW-Programming/vendor-crawlers/lib/crawler-tracker.js                 | 2 +-
 DW-Programming/vendor-crawlers/lib/sku-registry.js                    | 2 +-
 DW-Programming/vendor-crawlers/maya-crawler/server.js                 | 2 +-
 DW-Programming/vendor-crawlers/pj-crawler/server.js                   | 2 +-
 DW-Programming/vendor-crawlers/rlf-crawler/server.js                  | 2 +-
 DW-Programming/vendor-crawlers/schumacher-crawler/server.js           | 2 +-
 DW-Programming/vendor-crawlers/thibaut-crawler/full-fetch.js          | 2 +-
 .../vendor-crawlers/thibaut-crawler/import-from-spreadsheet.js        | 2 +-
 DW-Programming/vendor-crawlers/thibaut-crawler/server.js              | 2 +-
 .../vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js        | 2 +-
 DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js   | 2 +-
 DW-Programming/vendor-crawlers/york-crawler/server.js                 | 2 +-
 DW-Programming/verify-versace.js                                      | 2 +-
 DW-Programming/versa-evo-enrich.js                                    | 2 +-
 DW-Programming/versa-evo-pvcfree-scraper.js                           | 2 +-
 DW-Programming/versace-dry-run.js                                     | 2 +-
 DW-Programming/versace-image-scraper.js                               | 2 +-
 DW-Programming/versace-image-uploader.js                              | 2 +-
 DW-Programming/width-blitz.js                                         | 2 +-
 DW-Programming/zoffany-ai-enrich.js                                   | 2 +-
 ai-enrich-arte-fix.js                                                 | 2 +-
 ai-enrich-gaps2.js                                                    | 2 +-
 arte-fill-tags.js                                                     | 2 +-
 enrich-arte-fix.js                                                    | 2 +-
 enrich-arte-gaps.js                                                   | 2 +-
 enrich-arte-puppeteer.js                                              | 2 +-
 enrich-remaining-13.js                                                | 2 +-
 gemini-classify-texture.js                                            | 2 +-
 gemini-enrich-arte.js                                                 | 2 +-
 gemini-enrich-arte9.js                                                | 2 +-
 gemini-enrich-gaps.js                                                 | 2 +-
 lib/processing-state.ts                                               | 2 +-
 scripts/add-review-tag-thibaut.js                                     | 2 +-
 scripts/ai-enrich-arte-gaps.js                                        | 2 +-
 scripts/ai-enrich-gaps.js                                             | 2 +-
 scripts/brand-mckenzie-full-scrape.ts                                 | 2 +-
 scripts/change-logger.ts                                              | 2 +-
 scripts/enrich-remaining-13.js                                        | 2 +-
 scripts/feed-room-queue.js                                            | 2 +-
 scripts/fix-justindavid-images.js                                     | 2 +-
 scripts/import-fmpro-to-postgres.js                                   | 2 +-
 scripts/interior-design-tags.js                                       | 2 +-
 scripts/jd-fix-image-urls.js                                          | 2 +-
 scripts/justindavid-room-settings.js                                  | 2 +-
 scripts/kill-wallpaper-word.js                                        | 2 +-
 scripts/koroseal-website-scraper.ts                                   | 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/prl-ai-enrich.js                                              | 2 +-
 scripts/push-mfr-to-shopify.js                                        | 2 +-
 scripts/rw-drapery-room-settings.js                                   | 2 +-
 scripts/rw-upload-room-settings.js                                    | 2 +-
 scripts/supplier-mfr-bulk-push.js                                     | 2 +-
 scripts/surface-stick-backfill.js                                     | 2 +-
 scripts/swatch-spin-generator.js                                      | 2 +-
 scripts/sync-shopify-to-postgres.js                                   | 2 +-
 scripts/texture-repeat-classifier.js                                  | 2 +-
 scripts/thibaut-master-products.js                                    | 2 +-
 scripts/thibaut-scrape-missing.js                                     | 2 +-
 scripts/thibaut-scrape-viewer.js                                      | 2 +-
 scripts/vendor-monthly/shopify-sync.js                                | 2 +-
 shopify/scripts/apex-repeat-push.js                                   | 2 +-
 shopify/scripts/arte-dashboard/arte-catalog-crawler.js                | 2 +-
 shopify/scripts/arte-dashboard/bulk-title-updater.js                  | 2 +-
 shopify/scripts/arte-dashboard/crawl-all-arte.js                      | 2 +-
 shopify/scripts/arte-dashboard/enrich-width.js                        | 2 +-
 shopify/scripts/arte-dashboard/fast-fix.js                            | 2 +-
 shopify/scripts/arte-dashboard/fetch-arte-packshots.js                | 2 +-
 shopify/scripts/arte-dashboard/fetch-missing-skus.js                  | 2 +-
 shopify/scripts/arte-dashboard/fetch-packshots-robust.js              | 2 +-
 shopify/scripts/arte-dashboard/fix-all-arte-images.js                 | 2 +-
 shopify/scripts/arte-dashboard/fix-all-colorway-images.js             | 2 +-
 shopify/scripts/arte-dashboard/fix-all-images.js                      | 2 +-
 shopify/scripts/arte-dashboard/fix-arte-images-v2.js                  | 2 +-
 shopify/scripts/arte-dashboard/fix-arte-images-v3.js                  | 2 +-
 shopify/scripts/arte-dashboard/fix-arte-images-v4.js                  | 2 +-
 shopify/scripts/arte-dashboard/fix-arte-images.js                     | 2 +-
 shopify/scripts/arte-dashboard/populate-mapping.js                    | 2 +-
 shopify/scripts/arte-dashboard/scrape-batouri-colors.js               | 2 +-
 shopify/scripts/arte-dashboard/server.js                              | 2 +-
 shopify/scripts/arte-dashboard/test-arte-contract-crawl.js            | 2 +-
 shopify/scripts/arte-dashboard/test-extraction.js                     | 2 +-
 shopify/scripts/arte-dashboard/update-all-packshots.js                | 2 +-
 shopify/scripts/arte-dashboard/update-bayuda.js                       | 2 +-
 shopify/scripts/arte-dashboard/update-tatami.js                       | 2 +-
 shopify/scripts/arte-update-mfr-sku.js                                | 2 +-
 shopify/scripts/assign-elitis-dw-skus.js                              | 2 +-
 shopify/scripts/batch-room-settings/batch-room-generator.js           | 2 +-
 shopify/scripts/bespoke-updater/server.js                             | 2 +-
 shopify/scripts/classify-texture-pattern.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/koroseal-batch-cron.js                                | 2 +-
 shopify/scripts/la-walls-image-sync.js                                | 2 +-
 shopify/scripts/paul-montgomery-image-sync.js                         | 2 +-
 shopify/scripts/prl-ai-enrich.js                                      | 2 +-
 shopify/scripts/push-color-metafields.js                              | 2 +-
 shopify/scripts/push-fire-rating-metafields.js                        | 2 +-
 shopify/scripts/push-pattern-repeat-metafields.js                     | 2 +-
 shopify/scripts/romo-drilldown.js                                     | 2 +-
 shopify/scripts/schumacher-import.js                                  | 2 +-
 shopify/scripts/schumacher-price-scraper.js                           | 2 +-
 shopify/scripts/set-texture-repeat-zero.js                            | 2 +-
 shopify/scripts/sync-shopify-products.js                              | 2 +-
 shopify/scripts/texture-repeat-fixer.js                               | 2 +-
 shopify/scripts/thibaut-repeat-scraper.js                             | 2 +-
 shopify/scripts/update-all-malibu-architectural.ts                    | 2 +-
 shopify/scripts/wolf-gordon-shopify-push.js                           | 2 +-
 shopify/scripts/zoffany-ai-enrich-push.js                             | 2 +-
 shopify/scripts/zoffany-full-monty-20.js                              | 2 +-
 thibaut-repeat-run.js                                                 | 2 +-
 355 files changed, 356 insertions(+), 356 deletions(-)

diff --git a/DW-Agents/dw-agents/agent-slack/slack-agent.js b/DW-Agents/dw-agents/agent-slack/slack-agent.js
index 69983287..55f25c11 100644
--- a/DW-Agents/dw-agents/agent-slack/slack-agent.js
+++ b/DW-Agents/dw-agents/agent-slack/slack-agent.js
@@ -14,7 +14,7 @@ const SLACK_SIGNING_SECRET = process.env.SLACK_SIGNING_SECRET || 'b1b92b95a31072
 const SLACK_WEBHOOK = process.env.SLACK_WEBHOOK || '${SLACK_WEBHOOK_URL}';
 const STEVE_USER_ID = 'U03TV3UC2V7';
 const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || '';
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 // ─── Database ─────────────────────────────────────────────────
 const pool = new Pool({ connectionString: DB_URL, max: 5 });
 async function logMessage(msg) {
diff --git a/DW-Agents/dw-agents/agent-slack/slack-agent.ts b/DW-Agents/dw-agents/agent-slack/slack-agent.ts
index 2c989684..659fed51 100644
--- a/DW-Agents/dw-agents/agent-slack/slack-agent.ts
+++ b/DW-Agents/dw-agents/agent-slack/slack-agent.ts
@@ -16,7 +16,7 @@ const SLACK_SIGNING_SECRET = process.env.SLACK_SIGNING_SECRET || 'b1b92b95a31072
 const SLACK_WEBHOOK = process.env.SLACK_WEBHOOK || '${SLACK_WEBHOOK_URL}';
 const STEVE_USER_ID = 'U03TV3UC2V7';
 const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || '';
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // ─── Database ─────────────────────────────────────────────────
 const pool = new Pool({ connectionString: DB_URL, max: 5 });
diff --git a/DW-Agents/dw-agents/agent-thibaut-updater/thibaut-updater-agent.ts b/DW-Agents/dw-agents/agent-thibaut-updater/thibaut-updater-agent.ts
index 9bdb4983..60c86aac 100644
--- a/DW-Agents/dw-agents/agent-thibaut-updater/thibaut-updater-agent.ts
+++ b/DW-Agents/dw-agents/agent-thibaut-updater/thibaut-updater-agent.ts
@@ -29,7 +29,7 @@ const { Pool } = pg;
 
 // PostgreSQL connection for tracking updates
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Current batch ID for tracking
diff --git a/DW-Agents/dw-agents/architectural-update-agent.ts b/DW-Agents/dw-agents/architectural-update-agent.ts
index 358fa96c..2eeb5b0a 100644
--- a/DW-Agents/dw-agents/architectural-update-agent.ts
+++ b/DW-Agents/dw-agents/architectural-update-agent.ts
@@ -36,7 +36,7 @@ import crypto from 'crypto';
 
 // PostgreSQL connection for tracking updates
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Current batch ID for tracking
diff --git a/DW-Agents/dw-agents/dw-blog-agent/server.js b/DW-Agents/dw-agents/dw-blog-agent/server.js
index 766dcee3..339c8c3a 100644
--- a/DW-Agents/dw-agents/dw-blog-agent/server.js
+++ b/DW-Agents/dw-agents/dw-blog-agent/server.js
@@ -13,7 +13,7 @@ const PORT = process.env.PORT || 9889;
 // Database
 // -------------------------------------------------------------------
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Initialize blog_posts table
diff --git a/DW-Agents/dw-agents/dw-instagram-agent/server.js b/DW-Agents/dw-agents/dw-instagram-agent/server.js
index efc66901..426ad036 100644
--- a/DW-Agents/dw-agents/dw-instagram-agent/server.js
+++ b/DW-Agents/dw-agents/dw-instagram-agent/server.js
@@ -14,7 +14,7 @@ const PORT = process.env.PORT || 9887;
 // Database
 // -------------------------------------------------------------------
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // -------------------------------------------------------------------
diff --git a/DW-Agents/dw-agents/shared-executive-core.ts b/DW-Agents/dw-agents/shared-executive-core.ts
index c00934bc..0740bc12 100644
--- a/DW-Agents/dw-agents/shared-executive-core.ts
+++ b/DW-Agents/dw-agents/shared-executive-core.ts
@@ -22,7 +22,7 @@ const execAsync = promisify(exec);
 const { Pool } = pg;
 
 // ─── Constants ───────────────────────────────────────────────────────────
-export const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+export const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 export const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 export const SHOPIFY_TOKEN = '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';
 export const SHOPIFY_API_VERSION = '2024-07';
diff --git a/DW-Programming/150dpi/database/db-postgres.js b/DW-Programming/150dpi/database/db-postgres.js
index 076b3fb1..b6664589 100644
--- a/DW-Programming/150dpi/database/db-postgres.js
+++ b/DW-Programming/150dpi/database/db-postgres.js
@@ -11,7 +11,7 @@ const pool = new Pool({
     port: 5432,
     database: 'dw_unified',
     user: 'dw_admin',
-    password: 'DW2024SecurePass',
+    password: process.env.PG_PASSWORD || '',
     max: 10,
     idleTimeoutMillis: 30000,
     connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/api-vendor-fixer.ts b/DW-Programming/ImportNewSkufromURL/api-vendor-fixer.ts
index 1d136777..49eb5b6a 100644
--- a/DW-Programming/ImportNewSkufromURL/api-vendor-fixer.ts
+++ b/DW-Programming/ImportNewSkufromURL/api-vendor-fixer.ts
@@ -21,7 +21,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',  // Fixed: removed ! from password
+  password: process.env.PG_PASSWORD || '',  // Fixed: removed ! from password
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/auto-explore/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/auto-explore/route.ts
index 2e3d80fe..e38e7e19 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/auto-explore/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/auto-explore/route.ts
@@ -5,7 +5,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/crawl-last-50/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/crawl-last-50/route.ts
index cf910b1c..be95412e 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/crawl-last-50/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/crawl-last-50/route.ts
@@ -5,7 +5,7 @@ import puppeteer from 'puppeteer';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 5,
   idleTimeoutMillis: 30000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/delete-vendor-samples/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/delete-vendor-samples/route.ts
index 1df24870..608a896b 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/delete-vendor-samples/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/delete-vendor-samples/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/detect-colorways/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/detect-colorways/route.ts
index 5974ea08..a195d6bb 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/detect-colorways/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/detect-colorways/route.ts
@@ -5,7 +5,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/detect-images/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/detect-images/route.ts
index 1793eabe..39c57305 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/detect-images/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/detect-images/route.ts
@@ -5,7 +5,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/image-proxy/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/image-proxy/route.ts
index f6f8c417..dff1b00a 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/image-proxy/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/image-proxy/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // METHOD 4: Serve images as actual image responses, not JSON
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/ralph-wiggum-postgres/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/ralph-wiggum-postgres/route.ts
index 4e606868..6e1bbae9 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/ralph-wiggum-postgres/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/ralph-wiggum-postgres/route.ts
@@ -7,7 +7,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/run-crawl/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/run-crawl/route.ts
index 6798e957..a52fefcd 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/run-crawl/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/run-crawl/route.ts
@@ -8,7 +8,7 @@ import http from 'http';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/save-colorways/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/save-colorways/route.ts
index f89df1e9..2dfaf995 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/save-colorways/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/save-colorways/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/save-crawled-products/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/save-crawled-products/route.ts
index 1bd04354..5314848d 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/save-crawled-products/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/save-crawled-products/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 5,
   idleTimeoutMillis: 30000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/save-tested-url/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/save-tested-url/route.ts
index 8c197bc9..0b5ac6a6 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/save-tested-url/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/save-tested-url/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/update-product-thumbnail/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/update-product-thumbnail/route.ts
index 2de40345..b384a21d 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/update-product-thumbnail/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/update-product-thumbnail/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/update-vendor-urls/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/update-vendor-urls/route.ts
index 4235c025..a63fb0f7 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/update-vendor-urls/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/update-vendor-urls/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-approval/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-approval/route.ts
index 0403cc89..f75046d2 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-approval/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-approval/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-brightdata/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-brightdata/route.ts
index aeaffd92..ee33a051 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-brightdata/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-brightdata/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
index 4a97d9d8..6e8a9597 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-chat/route.ts
@@ -6,7 +6,7 @@ import { chromium } from 'playwright';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-proof/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-proof/route.ts
index 6dea20e0..6304bc18 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-proof/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-proof/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 2000,
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/vendor-schema-manager/save-urls/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/vendor-schema-manager/save-urls/route.ts
index 32c93d87..5a5bcaa4 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/vendor-schema-manager/save-urls/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/vendor-schema-manager/save-urls/route.ts
@@ -4,7 +4,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/auto-detect-all-vendors.ts b/DW-Programming/ImportNewSkufromURL/auto-detect-all-vendors.ts
index 691263ae..3505b570 100644
--- a/DW-Programming/ImportNewSkufromURL/auto-detect-all-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/auto-detect-all-vendors.ts
@@ -17,7 +17,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/auto-detect-batch.ts b/DW-Programming/ImportNewSkufromURL/auto-detect-batch.ts
index 84d73878..db0c2516 100644
--- a/DW-Programming/ImportNewSkufromURL/auto-detect-batch.ts
+++ b/DW-Programming/ImportNewSkufromURL/auto-detect-batch.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/auto-detect-from-db-urls.ts b/DW-Programming/ImportNewSkufromURL/auto-detect-from-db-urls.ts
index f199e74c..51c5bd1d 100644
--- a/DW-Programming/ImportNewSkufromURL/auto-detect-from-db-urls.ts
+++ b/DW-Programming/ImportNewSkufromURL/auto-detect-from-db-urls.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/auto-detect-remaining.ts b/DW-Programming/ImportNewSkufromURL/auto-detect-remaining.ts
index 7a72cde0..6ee2eeda 100644
--- a/DW-Programming/ImportNewSkufromURL/auto-detect-remaining.ts
+++ b/DW-Programming/ImportNewSkufromURL/auto-detect-remaining.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/auto-detect-selectors.ts b/DW-Programming/ImportNewSkufromURL/auto-detect-selectors.ts
index eb8a6727..7680451c 100644
--- a/DW-Programming/ImportNewSkufromURL/auto-detect-selectors.ts
+++ b/DW-Programming/ImportNewSkufromURL/auto-detect-selectors.ts
@@ -11,7 +11,7 @@ dotenv.config({ path: path.join(process.cwd(), '.env.local') });
 // Database connection
 const pool = new Pool({
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   host: '127.0.0.1',
   database: 'dw_unified',
   port: 5432,
diff --git a/DW-Programming/ImportNewSkufromURL/autonomous-discovery-orchestrator.ts b/DW-Programming/ImportNewSkufromURL/autonomous-discovery-orchestrator.ts
index 56c3b985..76774d79 100644
--- a/DW-Programming/ImportNewSkufromURL/autonomous-discovery-orchestrator.ts
+++ b/DW-Programming/ImportNewSkufromURL/autonomous-discovery-orchestrator.ts
@@ -21,7 +21,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/autonomous-product-discovery.ts b/DW-Programming/ImportNewSkufromURL/autonomous-product-discovery.ts
index 8634957f..3b296ca6 100644
--- a/DW-Programming/ImportNewSkufromURL/autonomous-product-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/autonomous-product-discovery.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/brightdata-product-discovery.ts b/DW-Programming/ImportNewSkufromURL/brightdata-product-discovery.ts
index 5f4c093c..0207e3a8 100644
--- a/DW-Programming/ImportNewSkufromURL/brightdata-product-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/brightdata-product-discovery.ts
@@ -20,7 +20,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/concurrent-brightdata-discovery.ts b/DW-Programming/ImportNewSkufromURL/concurrent-brightdata-discovery.ts
index 8bac7081..31e70e75 100644
--- a/DW-Programming/ImportNewSkufromURL/concurrent-brightdata-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/concurrent-brightdata-discovery.ts
@@ -18,7 +18,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/continue-discovery.ts b/DW-Programming/ImportNewSkufromURL/continue-discovery.ts
index e399e1d0..685def83 100644
--- a/DW-Programming/ImportNewSkufromURL/continue-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/continue-discovery.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/continuous-db-saver.ts b/DW-Programming/ImportNewSkufromURL/continuous-db-saver.ts
index 21b10d46..f87f2f9b 100644
--- a/DW-Programming/ImportNewSkufromURL/continuous-db-saver.ts
+++ b/DW-Programming/ImportNewSkufromURL/continuous-db-saver.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/crawl-pending.ts b/DW-Programming/ImportNewSkufromURL/crawl-pending.ts
index 16154c01..329eb6e2 100644
--- a/DW-Programming/ImportNewSkufromURL/crawl-pending.ts
+++ b/DW-Programming/ImportNewSkufromURL/crawl-pending.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const COLOR_WORDS = new Set([
diff --git a/DW-Programming/ImportNewSkufromURL/crawl-shopify-vendors.ts b/DW-Programming/ImportNewSkufromURL/crawl-shopify-vendors.ts
index 15765fd8..97fb57f1 100644
--- a/DW-Programming/ImportNewSkufromURL/crawl-shopify-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/crawl-shopify-vendors.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const COLOR_WORDS = new Set([
diff --git a/DW-Programming/ImportNewSkufromURL/critical-save-discovered-data.ts b/DW-Programming/ImportNewSkufromURL/critical-save-discovered-data.ts
index f4fdfc18..a1391b61 100644
--- a/DW-Programming/ImportNewSkufromURL/critical-save-discovered-data.ts
+++ b/DW-Programming/ImportNewSkufromURL/critical-save-discovered-data.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/emergency-save-to-db.ts b/DW-Programming/ImportNewSkufromURL/emergency-save-to-db.ts
index a986924d..1e9a844b 100644
--- a/DW-Programming/ImportNewSkufromURL/emergency-save-to-db.ts
+++ b/DW-Programming/ImportNewSkufromURL/emergency-save-to-db.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/enhance-scrapers-with-schemas.ts b/DW-Programming/ImportNewSkufromURL/enhance-scrapers-with-schemas.ts
index 5043654b..2dac0771 100644
--- a/DW-Programming/ImportNewSkufromURL/enhance-scrapers-with-schemas.ts
+++ b/DW-Programming/ImportNewSkufromURL/enhance-scrapers-with-schemas.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/enhanced-discovery-viewer.ts b/DW-Programming/ImportNewSkufromURL/enhanced-discovery-viewer.ts
index 826884fa..b8b042ab 100644
--- a/DW-Programming/ImportNewSkufromURL/enhanced-discovery-viewer.ts
+++ b/DW-Programming/ImportNewSkufromURL/enhanced-discovery-viewer.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/fixed-discovery-system.ts b/DW-Programming/ImportNewSkufromURL/fixed-discovery-system.ts
index 13befdb7..1299b74c 100644
--- a/DW-Programming/ImportNewSkufromURL/fixed-discovery-system.ts
+++ b/DW-Programming/ImportNewSkufromURL/fixed-discovery-system.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/fixed-kravet-discovery.ts b/DW-Programming/ImportNewSkufromURL/fixed-kravet-discovery.ts
index 2a77cf00..e126e3a1 100644
--- a/DW-Programming/ImportNewSkufromURL/fixed-kravet-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/fixed-kravet-discovery.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/lib/color-variant-tracker.ts b/DW-Programming/ImportNewSkufromURL/lib/color-variant-tracker.ts
index afbcaf1c..2c24d9d1 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/color-variant-tracker.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/color-variant-tracker.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
 });
 
 export interface TrackerEntry {
diff --git a/DW-Programming/ImportNewSkufromURL/lib/database/postgres-client.ts b/DW-Programming/ImportNewSkufromURL/lib/database/postgres-client.ts
index 69ec417e..1d3c5a10 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/database/postgres-client.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/database/postgres-client.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   host: process.env.POSTGRES_HOST || 'localhost',
   port: parseInt(process.env.POSTGRES_PORT || '5432'),
   user: process.env.POSTGRES_USER || 'dw_admin',
-  password: process.env.POSTGRES_PASSWORD || 'DW2024SecurePass',
+  password: process.env.POSTGRES_PASSWORD,
   database: process.env.POSTGRES_DB || 'dw_unified',
   max: 20, // Maximum number of clients in the pool
   idleTimeoutMillis: 30000,
diff --git a/DW-Programming/ImportNewSkufromURL/lib/schema-helper.ts b/DW-Programming/ImportNewSkufromURL/lib/schema-helper.ts
index 19c5ed50..1fd85d59 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/schema-helper.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/schema-helper.ts
@@ -10,7 +10,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/postgresql-discovery-restart.ts b/DW-Programming/ImportNewSkufromURL/postgresql-discovery-restart.ts
index de031daf..a1e1f60b 100644
--- a/DW-Programming/ImportNewSkufromURL/postgresql-discovery-restart.ts
+++ b/DW-Programming/ImportNewSkufromURL/postgresql-discovery-restart.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified' // THE ONE AND ONLY DATABASE
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/postgresql-viewer.ts b/DW-Programming/ImportNewSkufromURL/postgresql-viewer.ts
index 7130fb89..da4e3dce 100644
--- a/DW-Programming/ImportNewSkufromURL/postgresql-viewer.ts
+++ b/DW-Programming/ImportNewSkufromURL/postgresql-viewer.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/real-product-discovery.ts b/DW-Programming/ImportNewSkufromURL/real-product-discovery.ts
index 25fc1b32..4b557f35 100644
--- a/DW-Programming/ImportNewSkufromURL/real-product-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/real-product-discovery.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/real-products-viewer.ts b/DW-Programming/ImportNewSkufromURL/real-products-viewer.ts
index 32eff906..5eed7558 100644
--- a/DW-Programming/ImportNewSkufromURL/real-products-viewer.ts
+++ b/DW-Programming/ImportNewSkufromURL/real-products-viewer.ts
@@ -15,7 +15,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/restart-discovery.ts b/DW-Programming/ImportNewSkufromURL/restart-discovery.ts
index 59c0e004..a5d85241 100644
--- a/DW-Programming/ImportNewSkufromURL/restart-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/restart-discovery.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/review-failed-vendors.ts b/DW-Programming/ImportNewSkufromURL/review-failed-vendors.ts
index 4d240561..6c2cf822 100644
--- a/DW-Programming/ImportNewSkufromURL/review-failed-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/review-failed-vendors.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/save-discovery-data.ts b/DW-Programming/ImportNewSkufromURL/save-discovery-data.ts
index c1067a5c..b57fadb2 100644
--- a/DW-Programming/ImportNewSkufromURL/save-discovery-data.ts
+++ b/DW-Programming/ImportNewSkufromURL/save-discovery-data.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scrape-lee-jofa.ts b/DW-Programming/ImportNewSkufromURL/scrape-lee-jofa.ts
index e2d836a3..b39941e5 100644
--- a/DW-Programming/ImportNewSkufromURL/scrape-lee-jofa.ts
+++ b/DW-Programming/ImportNewSkufromURL/scrape-lee-jofa.ts
@@ -17,7 +17,7 @@ config({ path: path.join(__dirname, '.env.local') });
 const prisma = new PrismaClient({
   datasources: {
     db: {
-      url: process.env.DATABASE_URL || 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified?schema=public'
+      url: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified?schema=public'
     }
   }
 });
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/_disabled/update-kravet-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/_disabled/update-kravet-images.ts
index 18bf5b46..c447156c 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/_disabled/update-kravet-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/_disabled/update-kravet-images.ts
@@ -7,7 +7,7 @@ import { Pool } from 'pg';
 import 'dotenv/config';
 
 const pool = new Pool({
-  connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'
 });
 
 async function updateKravetImages() {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/aggressive-crawl.ts b/DW-Programming/ImportNewSkufromURL/scripts/aggressive-crawl.ts
index ed4179e8..c3bdbb68 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/aggressive-crawl.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/aggressive-crawl.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/analyze-top30-json-data.ts b/DW-Programming/ImportNewSkufromURL/scripts/analyze-top30-json-data.ts
index b1246673..8d62f8f0 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/analyze-top30-json-data.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/analyze-top30-json-data.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 interface VendorData {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl-vendors.ts b/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl-vendors.ts
index 1d722e58..a55d5a51 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl-vendors.ts
@@ -3,7 +3,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl.ts b/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl.ts
index af2127cc..ce7def60 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/batch-crawl.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/batch-puppeteer-full-conversion.ts b/DW-Programming/ImportNewSkufromURL/scripts/batch-puppeteer-full-conversion.ts
index f6aa47ba..bed05483 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/batch-puppeteer-full-conversion.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/batch-puppeteer-full-conversion.ts
@@ -20,7 +20,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Get vendor selector from database
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/capture-10-per-vendor.ts b/DW-Programming/ImportNewSkufromURL/scripts/capture-10-per-vendor.ts
index 6c7795ea..68a605ca 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/capture-10-per-vendor.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/capture-10-per-vendor.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/capture-aesthetics-colors.ts b/DW-Programming/ImportNewSkufromURL/scripts/capture-aesthetics-colors.ts
index 3e745bf4..50239210 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/capture-aesthetics-colors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/capture-aesthetics-colors.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/capture-andrew-martin.ts b/DW-Programming/ImportNewSkufromURL/scripts/capture-andrew-martin.ts
index 9b584498..7dfd61b4 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/capture-andrew-martin.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/capture-andrew-martin.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-final.ts b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-final.ts
index 43eb2bd7..c5586d80 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-final.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-final.ts
@@ -9,7 +9,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 async function checkTopVendorSelectors() {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-v2.ts b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-v2.ts
index 6b13c256..f81f8773 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-v2.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors-v2.ts
@@ -9,7 +9,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 interface VendorWithSelectors {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors.ts b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors.ts
index b93c6adf..8abfe94d 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/check-vendor-selectors.ts
@@ -9,7 +9,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 interface VendorSelector {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/consume-variant-queue.ts b/DW-Programming/ImportNewSkufromURL/scripts/consume-variant-queue.ts
index 0a76de34..a0f7cc96 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/consume-variant-queue.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/consume-variant-queue.ts
@@ -18,7 +18,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
 });
 
 // Configuration
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-custhom.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-custhom.ts
index 8518e309..4fdbbed8 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-custhom.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-custhom.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-harlequin-glant.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-harlequin-glant.ts
index f1f9ec82..652d51bd 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-harlequin-glant.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-harlequin-glant.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-momentum.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-momentum.ts
index 7e0693f3..b419eac3 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-momentum.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-momentum.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-remaining.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-remaining.ts
index 58c2bf09..1d070518 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-remaining.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-remaining.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-thibaut.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-thibaut.ts
index 3f2f0075..cfff69f9 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-thibaut.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-thibaut.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/crawl-wolfgordon.ts b/DW-Programming/ImportNewSkufromURL/scripts/crawl-wolfgordon.ts
index 3a5e474e..5540e722 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/crawl-wolfgordon.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/crawl-wolfgordon.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/create-real-working-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/create-real-working-images.ts
index 723ff25b..759c4914 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/create-real-working-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/create-real-working-images.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // REAL WORKING 1x1 pixel images in different colors
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/create-visible-test-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/create-visible-test-images.ts
index 31599ee1..2f5c58ab 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/create-visible-test-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/create-visible-test-images.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Simple colored square SVG that converts to base64
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/dangerous-fix-all-vendors.ts b/DW-Programming/ImportNewSkufromURL/scripts/dangerous-fix-all-vendors.ts
index ca1a98fb..43752ce3 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/dangerous-fix-all-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/dangerous-fix-all-vendors.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // ALL VENDORS WITH THEIR REAL PRODUCT URLs
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-dedar-colorways.js b/DW-Programming/ImportNewSkufromURL/scripts/extract-dedar-colorways.js
index 3d355e06..00bd9877 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-dedar-colorways.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-dedar-colorways.js
@@ -4,7 +4,7 @@ const pg = require('pg');
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-full-product-details.ts b/DW-Programming/ImportNewSkufromURL/scripts/extract-full-product-details.ts
index 06b8f004..9f29830a 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-full-product-details.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-full-product-details.ts
@@ -10,7 +10,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Load previous test results
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-images.js b/DW-Programming/ImportNewSkufromURL/scripts/extract-images.js
index 6c9dde36..c243ac54 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-images.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-images.js
@@ -4,7 +4,7 @@ const pg = require('pg');
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-innovations-colorways.ts b/DW-Programming/ImportNewSkufromURL/scripts/extract-innovations-colorways.ts
index 99e2c6c0..04269945 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-innovations-colorways.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-innovations-colorways.ts
@@ -3,7 +3,7 @@ import { Pool } from 'pg';
 const pool = new Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images-only.ts b/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images-only.ts
index d75f128d..718a029f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images-only.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images-only.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Get all vendors from database - using products table to get vendor list
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images.ts
index 1ed3c850..83985dbf 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-product-images.ts
@@ -23,7 +23,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 const BATCH_SIZE = 50;
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/extract-real-product-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/extract-real-product-images.ts
index 6a86b632..b5af8d30 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/extract-real-product-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/extract-real-product-images.ts
@@ -23,7 +23,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 const BATCH_SIZE = 50;
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-1838.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-1838.ts
index ce9d3a04..254343bc 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-1838.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-1838.ts
@@ -4,7 +4,7 @@ import pg from "pg";
 const pool = new pg.Pool({
   host: "localhost",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
   database: "dw_unified"
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-aesthetics-wall.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-aesthetics-wall.ts
index effa7293..35f9c7aa 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-aesthetics-wall.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-aesthetics-wall.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendor-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendor-images.ts
index 29c0e994..519d651c 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendor-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendor-images.ts
@@ -15,7 +15,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 const VENDORS = [
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendors.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendors.ts
index ca6abefa..0bedc72d 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-all-vendors.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-andrew-martin.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-andrew-martin.ts
index f1d0913e..b9fa4f02 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-andrew-martin.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-andrew-martin.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-arbor-wood.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-arbor-wood.ts
index ced13bfc..92b7224a 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-arbor-wood.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-arbor-wood.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-failed-vendors-dangerous.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-failed-vendors-dangerous.ts
index 501ac64b..d02bc00e 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-failed-vendors-dangerous.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-failed-vendors-dangerous.ts
@@ -10,7 +10,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Load previous results
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-images-from-database-urls.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-images-from-database-urls.ts
index 61b9f8f5..d719ea56 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-images-from-database-urls.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-images-from-database-urls.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Product image selectors - ONLY for actual product images
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-missing-thumbnails.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-missing-thumbnails.ts
index ffa5f917..929c8247 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-missing-thumbnails.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-missing-thumbnails.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-remaining-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-remaining-images.ts
index 1a82a6e8..fe2d0570 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-remaining-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-remaining-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 async function downloadImage(url: string, referer: string): Promise<string | null> {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-schumacher-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-schumacher-images.ts
index 4b860523..9c4592e2 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-schumacher-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-schumacher-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Real Schumacher SKUs that need images
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-fast.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-fast.ts
index 710256ec..f6d347ce 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-fast.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-fast.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-smart.ts b/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-smart.ts
index 4602b5ad..e3a0e8a9 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-smart.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/fix-vendors-smart.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/get-all-real-products.ts b/DW-Programming/ImportNewSkufromURL/scripts/get-all-real-products.ts
index e67e54b1..2940a43d 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/get-all-real-products.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/get-all-real-products.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // REAL products from REAL vendors
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/get-real-kravet-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/get-real-kravet-images.ts
index 32ee52ca..2ebcd5cd 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/get-real-kravet-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/get-real-kravet-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // REAL Kravet product URLs with REAL SKUs
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/get-thibaut-direct-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/get-thibaut-direct-images.ts
index 79dbca02..50aaa7b2 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/get-thibaut-direct-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/get-thibaut-direct-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Real Thibaut products with multiple CDN patterns
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/method1-screenshot-capture.ts b/DW-Programming/ImportNewSkufromURL/scripts/method1-screenshot-capture.ts
index 42dd5cc9..31b59c9b 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/method1-screenshot-capture.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/method1-screenshot-capture.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const VENDORS = [
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/method2-create-small-jpegs.ts b/DW-Programming/ImportNewSkufromURL/scripts/method2-create-small-jpegs.ts
index e9ab9e71..cdca7ac8 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/method2-create-small-jpegs.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/method2-create-small-jpegs.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Small red square JPEG in base64
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl-all.ts b/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl-all.ts
index dd02d69c..5345d9f5 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl-all.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl-all.ts
@@ -10,7 +10,7 @@ import * as path from 'path';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl.ts b/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl.ts
index 241b1846..a24290cf 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/overnight-crawl.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-data.ts b/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-data.ts
index 1194aa81..23251ced 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-data.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-data.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const vendors = [
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-products.ts b/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-products.ts
index 2852f1d8..da50228f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-products.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/populate-vendor-products.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Real vendor products with ACTUAL URLs to their product pages
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/prove-3-products-per-vendor.ts b/DW-Programming/ImportNewSkufromURL/scripts/prove-3-products-per-vendor.ts
index ea1aa1ba..55367a2a 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/prove-3-products-per-vendor.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/prove-3-products-per-vendor.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/prove-via-agent-sku.ts b/DW-Programming/ImportNewSkufromURL/scripts/prove-via-agent-sku.ts
index 39b881bd..fc7f5afe 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/prove-via-agent-sku.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/prove-via-agent-sku.ts
@@ -9,7 +9,7 @@ import * as fs from 'fs';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/quick-add-more-products.ts b/DW-Programming/ImportNewSkufromURL/scripts/quick-add-more-products.ts
index e0fa27fb..fad7cb70 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/quick-add-more-products.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/quick-add-more-products.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Focus on vendors that work best
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/quick-crawl-remaining.ts b/DW-Programming/ImportNewSkufromURL/scripts/quick-crawl-remaining.ts
index dc0373d1..3dfd5327 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/quick-crawl-remaining.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/quick-crawl-remaining.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/quick-proof.ts b/DW-Programming/ImportNewSkufromURL/scripts/quick-proof.ts
index f26530b9..e3a1d274 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/quick-proof.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/quick-proof.ts
@@ -14,7 +14,7 @@ function updateStatus(vendorId: string, status: string) {
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
@@ -160,7 +160,7 @@ async function main() {
   const pool2 = new pg.Pool({
     host: 'localhost',
     user: 'dw_admin',
-    password: 'DW2024SecurePass',
+    password: process.env.PG_PASSWORD || '',
     database: 'dw_unified'
   });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/ralph-wiggum-product-finder.ts b/DW-Programming/ImportNewSkufromURL/scripts/ralph-wiggum-product-finder.ts
index 3a9ee231..2c81086b 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/ralph-wiggum-product-finder.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/ralph-wiggum-product-finder.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Vendor configurations with their actual websites
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/run-all-vendor-scrapers.ts b/DW-Programming/ImportNewSkufromURL/scripts/run-all-vendor-scrapers.ts
index 18c661ba..3afe0df7 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/run-all-vendor-scrapers.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/run-all-vendor-scrapers.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 // Top priority vendors to scan (most likely to work)
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/run-thibaut-crawl.ts b/DW-Programming/ImportNewSkufromURL/scripts/run-thibaut-crawl.ts
index 81b991df..d5baed8f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/run-thibaut-crawl.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/run-thibaut-crawl.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
index 09865f8f..dc37f9c9 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
@@ -8,7 +8,7 @@
 const { Pool } = require('pg');
 const https = require('https');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
 const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/scan-all-vendors.ts b/DW-Programming/ImportNewSkufromURL/scripts/scan-all-vendors.ts
index 2f7114fe..8758e36e 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/scan-all-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/scan-all-vendors.ts
@@ -18,7 +18,7 @@ const pool = new Pool({
   port: 5432,
   database: "dw_unified",
   user: "dw_admin",
-  password: "DW2024SecurePass",
+  password: process.env.PG_PASSWORD || '',
 });
 
 // Controlled rollout configuration via env vars
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/scan-variants-from-db.ts b/DW-Programming/ImportNewSkufromURL/scripts/scan-variants-from-db.ts
index e53cc96f..7efd3dc2 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/scan-variants-from-db.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/scan-variants-from-db.ts
@@ -23,7 +23,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
 });
 
 // Configuration from env vars
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/smart-crawl.ts b/DW-Programming/ImportNewSkufromURL/scripts/smart-crawl.ts
index dfb1c285..caa49d74 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/smart-crawl.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/smart-crawl.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-images.ts
index 856c9f99..b6c434ee 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Test products from multiple vendors
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-save-results.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-save-results.ts
index 79d278eb..078b919c 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-save-results.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-save-results.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 interface TestResult {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-yolo.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-yolo.ts
index 67a9879b..7322bb15 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-yolo.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-all-vendors-yolo.ts
@@ -11,7 +11,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 interface VendorTestResult {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-color-detection-stable.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-color-detection-stable.ts
index 0400b493..57474e0f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-color-detection-stable.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-color-detection-stable.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
 });
 
 // Get real PDP URLs from database
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-color-variant-detection.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-color-variant-detection.ts
index 1453f7f6..2b0e3385 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-color-variant-detection.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-color-variant-detection.ts
@@ -217,7 +217,7 @@ async function testColorVariantDetection() {
       port: 5432,
       database: 'dw_unified',
       user: 'dw_admin',
-      password: 'DW2024SecurePass',
+      password: process.env.PG_PASSWORD || '',
     });
 
     const result = await pool.query(`
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-elitis.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-elitis.ts
index 11130845..ad2cc8d3 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-elitis.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-elitis.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-scalamandre-direct.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-scalamandre-direct.ts
index 853fe321..bab4153e 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-scalamandre-direct.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-scalamandre-direct.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Real Scalamandre products - testing different URL formats
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-william-morris.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-william-morris.ts
index 38547b42..1107fcac 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-william-morris.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-william-morris.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-working-vendors.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-working-vendors.ts
index 95780d70..675d2972 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-working-vendors.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-working-vendors.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Focus on vendors with working websites
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/test-york.ts b/DW-Programming/ImportNewSkufromURL/scripts/test-york.ts
index 64a5d5c7..08318612 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/test-york.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/test-york.ts
@@ -4,7 +4,7 @@ import pg from 'pg';
 const pool = new pg.Pool({
   host: 'localhost',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-fetch-real-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-fetch-real-images.ts
index e039f667..ca60d0ca 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-fetch-real-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-fetch-real-images.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 10,
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-fix-everything.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-fix-everything.ts
index 339889ef..75359fec 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-fix-everything.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-fix-everything.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 10,
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-image-fetcher.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-image-fetcher.ts
index bdade994..b74e3be1 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-image-fetcher.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-image-fetcher.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 10,
   idleTimeoutMillis: 30000,
 });
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-correct-urls.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-correct-urls.ts
index d6ec20c4..26cbe740 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-correct-urls.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-correct-urls.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // CORRECT KRAVET URL FORMAT
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-download-button.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-download-button.ts
index 49184209..93aeeea0 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-download-button.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-kravet-download-button.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const KRAVET_PRODUCTS = [
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-product-harvester.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-product-harvester.ts
index 51a826af..2b0d2fc6 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-product-harvester.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-product-harvester.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 10,
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/yolo-real-product-images.ts b/DW-Programming/ImportNewSkufromURL/scripts/yolo-real-product-images.ts
index 16cf561b..cc1d45e3 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/yolo-real-product-images.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/yolo-real-product-images.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // REAL PRODUCT URLS - NOT CATEGORY PAGES!
diff --git a/DW-Programming/ImportNewSkufromURL/skip-brunschwig-continue.ts b/DW-Programming/ImportNewSkufromURL/skip-brunschwig-continue.ts
index a89cfcb8..d65169b6 100644
--- a/DW-Programming/ImportNewSkufromURL/skip-brunschwig-continue.ts
+++ b/DW-Programming/ImportNewSkufromURL/skip-brunschwig-continue.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/smart-continue-discovery.ts b/DW-Programming/ImportNewSkufromURL/smart-continue-discovery.ts
index f34a1482..83ed5e2a 100644
--- a/DW-Programming/ImportNewSkufromURL/smart-continue-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/smart-continue-discovery.ts
@@ -13,7 +13,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified'
 });
 
diff --git a/DW-Programming/ImportNewSkufromURL/test-all-vendors-pipeline.ts b/DW-Programming/ImportNewSkufromURL/test-all-vendors-pipeline.ts
index c1caba71..efee5381 100644
--- a/DW-Programming/ImportNewSkufromURL/test-all-vendors-pipeline.ts
+++ b/DW-Programming/ImportNewSkufromURL/test-all-vendors-pipeline.ts
@@ -9,7 +9,7 @@ import * as fs from 'fs';
 import * as path from 'path';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 interface VendorTestResult {
diff --git a/DW-Programming/ImportNewSkufromURL/test-random-vendor-selectors.ts b/DW-Programming/ImportNewSkufromURL/test-random-vendor-selectors.ts
index 4ecc1626..f47b1303 100644
--- a/DW-Programming/ImportNewSkufromURL/test-random-vendor-selectors.ts
+++ b/DW-Programming/ImportNewSkufromURL/test-random-vendor-selectors.ts
@@ -10,7 +10,7 @@ import * as fs from 'fs';
 import * as path from 'path';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // BrightData proxy settings
diff --git a/DW-Programming/ImportNewSkufromURL/test-vendor-batch.ts b/DW-Programming/ImportNewSkufromURL/test-vendor-batch.ts
index 2ba2cd4b..dd56238a 100644
--- a/DW-Programming/ImportNewSkufromURL/test-vendor-batch.ts
+++ b/DW-Programming/ImportNewSkufromURL/test-vendor-batch.ts
@@ -25,7 +25,7 @@ const RALPH_QUOTES = [
 // Database configuration
 const pool = new Pool({
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   host: '127.0.0.1',
   database: 'dw_unified',
   port: 5432,
diff --git a/DW-Programming/ImportNewSkufromURL/test-yolo-scrapers.ts b/DW-Programming/ImportNewSkufromURL/test-yolo-scrapers.ts
index 35bce7b4..f51ddbe6 100755
--- a/DW-Programming/ImportNewSkufromURL/test-yolo-scrapers.ts
+++ b/DW-Programming/ImportNewSkufromURL/test-yolo-scrapers.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/vendor-inspector/inspector-server.ts b/DW-Programming/ImportNewSkufromURL/vendor-inspector/inspector-server.ts
index e179c0f2..65ec7200 100644
--- a/DW-Programming/ImportNewSkufromURL/vendor-inspector/inspector-server.ts
+++ b/DW-Programming/ImportNewSkufromURL/vendor-inspector/inspector-server.ts
@@ -15,7 +15,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/yolo-overnight-runner.ts b/DW-Programming/ImportNewSkufromURL/yolo-overnight-runner.ts
index 3e16a776..81a994cd 100644
--- a/DW-Programming/ImportNewSkufromURL/yolo-overnight-runner.ts
+++ b/DW-Programming/ImportNewSkufromURL/yolo-overnight-runner.ts
@@ -16,7 +16,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/yolo-schema-discovery.ts b/DW-Programming/ImportNewSkufromURL/yolo-schema-discovery.ts
index 84edcb0d..d700c5bb 100644
--- a/DW-Programming/ImportNewSkufromURL/yolo-schema-discovery.ts
+++ b/DW-Programming/ImportNewSkufromURL/yolo-schema-discovery.ts
@@ -14,7 +14,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ImportNewSkufromURL/yolo-scraper-generator.ts b/DW-Programming/ImportNewSkufromURL/yolo-scraper-generator.ts
index 898862ef..af2cdd12 100644
--- a/DW-Programming/ImportNewSkufromURL/yolo-scraper-generator.ts
+++ b/DW-Programming/ImportNewSkufromURL/yolo-scraper-generator.ts
@@ -12,7 +12,7 @@ const pool = new Pool({
   host: 'localhost',
   port: 5432,
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   database: 'dw_unified',
   max: 20
 });
diff --git a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
index bccc7150..77621870 100644
--- a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
+++ b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
@@ -4,7 +4,7 @@ const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // All 14 sales channels
diff --git a/DW-Programming/ShopifyCalendarNext/scripts/rescan-scheduled-posts.ts b/DW-Programming/ShopifyCalendarNext/scripts/rescan-scheduled-posts.ts
index 0e91f39a..89952ce7 100644
--- a/DW-Programming/ShopifyCalendarNext/scripts/rescan-scheduled-posts.ts
+++ b/DW-Programming/ShopifyCalendarNext/scripts/rescan-scheduled-posts.ts
@@ -3,7 +3,7 @@ import { Pool } from 'pg';
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 interface ScheduledLaunch {
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 bcefaada..55aafc05 100644
--- a/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/DW-Programming/ShopifyCalendarNext/src/app/api/bespoke-product/route.ts b/DW-Programming/ShopifyCalendarNext/src/app/api/bespoke-product/route.ts
index 0244fc5a..908ab52f 100644
--- a/DW-Programming/ShopifyCalendarNext/src/app/api/bespoke-product/route.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/app/api/bespoke-product/route.ts
@@ -6,7 +6,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // GET - Fetch product data from bespoke_catalog
diff --git a/DW-Programming/ShopifyCalendarNext/src/lib/db.ts b/DW-Programming/ShopifyCalendarNext/src/lib/db.ts
index 28010caa..df3c9bc0 100644
--- a/DW-Programming/ShopifyCalendarNext/src/lib/db.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/lib/db.ts
@@ -1,7 +1,7 @@
 import { Pool } from 'pg';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 export async function initDatabase() {
diff --git a/DW-Programming/activate-versace-drafts.js b/DW-Programming/activate-versace-drafts.js
index 0600c42c..723012e1 100644
--- a/DW-Programming/activate-versace-drafts.js
+++ b/DW-Programming/activate-versace-drafts.js
@@ -12,7 +12,7 @@ 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';
-const PG_CONN = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_CONN = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const { Client } = require('pg');
diff --git a/DW-Programming/activate-versace-vi.js b/DW-Programming/activate-versace-vi.js
index a82876aa..c1d1074a 100644
--- a/DW-Programming/activate-versace-vi.js
+++ b/DW-Programming/activate-versace-vi.js
@@ -21,7 +21,7 @@ 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';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
-const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // ── Stats ───────────────────────────────────────────────────────────────
 const stats = {
diff --git a/DW-Programming/anna-french-ai-enrich.js b/DW-Programming/anna-french-ai-enrich.js
index 8e092817..6cc85eff 100644
--- a/DW-Programming/anna-french-ai-enrich.js
+++ b/DW-Programming/anna-french-ai-enrich.js
@@ -20,7 +20,7 @@ const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemi
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 650; // ~90 RPM, safe for free tier (15 RPM limit → use 650ms for paid key)
diff --git a/DW-Programming/anna-french-room-settings.js b/DW-Programming/anna-french-room-settings.js
index 6cbd8a77..07af517e 100644
--- a/DW-Programming/anna-french-room-settings.js
+++ b/DW-Programming/anna-french-room-settings.js
@@ -25,7 +25,7 @@ const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 2000; // Room generation is slow, 2s between calls to avoid overwhelming
diff --git a/DW-Programming/anna-french-shopify-push.js b/DW-Programming/anna-french-shopify-push.js
index 8433b70f..3572892a 100644
--- a/DW-Programming/anna-french-shopify-push.js
+++ b/DW-Programming/anna-french-shopify-push.js
@@ -23,7 +23,7 @@ const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 650;
diff --git a/DW-Programming/archive-thibaut-discontinued.js b/DW-Programming/archive-thibaut-discontinued.js
index 1b968ca6..d0ad2b7b 100644
--- a/DW-Programming/archive-thibaut-discontinued.js
+++ b/DW-Programming/archive-thibaut-discontinued.js
@@ -14,7 +14,7 @@ const { Client } = require('pg');
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 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';
+const PG_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 const LOG_FILE = '/root/DW-Agents/logs/thibaut-archive.log';
diff --git a/DW-Programming/arte-crawl-all-urls.js b/DW-Programming/arte-crawl-all-urls.js
index 6a73b496..bcb6f90b 100644
--- a/DW-Programming/arte-crawl-all-urls.js
+++ b/DW-Programming/arte-crawl-all-urls.js
@@ -16,7 +16,7 @@
 const { chromium } = require('playwright');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 async function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
 
diff --git a/DW-Programming/arte-image-backfill.js b/DW-Programming/arte-image-backfill.js
index e44e6249..afacbebd 100644
--- a/DW-Programming/arte-image-backfill.js
+++ b/DW-Programming/arte-image-backfill.js
@@ -11,7 +11,7 @@ const BATCH_SIZE = 25; // 25 products per GraphQL query (keeps cost manageable)
 const DELAY_MS = 600; // Rate limit safety
 
 const db = new Client({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function shopifyGraphQL(query) {
diff --git a/DW-Programming/arte-search-scrape-width.js b/DW-Programming/arte-search-scrape-width.js
index df0f93ba..6c31214d 100644
--- a/DW-Programming/arte-search-scrape-width.js
+++ b/DW-Programming/arte-search-scrape-width.js
@@ -14,7 +14,7 @@
 const { chromium } = require('playwright');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 async function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
 
diff --git a/DW-Programming/arte-width-from-shopify.js b/DW-Programming/arte-width-from-shopify.js
index e1518ac8..ef242f5c 100644
--- a/DW-Programming/arte-width-from-shopify.js
+++ b/DW-Programming/arte-width-from-shopify.js
@@ -9,7 +9,7 @@
 const https = require('https');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 
diff --git a/DW-Programming/as-creation-shopify-push.js b/DW-Programming/as-creation-shopify-push.js
index b7eadf10..e3792889 100644
--- a/DW-Programming/as-creation-shopify-push.js
+++ b/DW-Programming/as-creation-shopify-push.js
@@ -27,7 +27,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SOURCE_AGENT = 'as-creation-p8-push';
diff --git a/DW-Programming/backfill-schumacher-images.js b/DW-Programming/backfill-schumacher-images.js
index 71fa24f2..d9a326b8 100644
--- a/DW-Programming/backfill-schumacher-images.js
+++ b/DW-Programming/backfill-schumacher-images.js
@@ -11,7 +11,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 3,
 });
 
diff --git a/DW-Programming/china-seas-design-tagger.js b/DW-Programming/china-seas-design-tagger.js
index f42dbed9..92e8b4a9 100644
--- a/DW-Programming/china-seas-design-tagger.js
+++ b/DW-Programming/china-seas-design-tagger.js
@@ -18,7 +18,7 @@ const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 const BATCH_SIZE = 100;
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // --- Color tag removal pattern (from skill) ---
diff --git a/DW-Programming/china-seas-hex-colors.js b/DW-Programming/china-seas-hex-colors.js
index d3f2d1fa..aa610bf1 100644
--- a/DW-Programming/china-seas-hex-colors.js
+++ b/DW-Programming/china-seas-hex-colors.js
@@ -10,7 +10,7 @@ const https = require('https');
 const http = require('http');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/china-seas-image-enrichment-2.js b/DW-Programming/china-seas-image-enrichment-2.js
index f316266e..68c9d0cf 100644
--- a/DW-Programming/china-seas-image-enrichment-2.js
+++ b/DW-Programming/china-seas-image-enrichment-2.js
@@ -3,7 +3,7 @@
 // Tries multiple matching strategies for products that didn't match in stage 2/3
 
 const { Pool } = require('pg');
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 function normalizeText(s) {
   return s.toLowerCase().replace(/[_\-]/g, ' ').replace(/\s+/g, ' ').trim();
diff --git a/DW-Programming/china-seas-image-enrichment-3.js b/DW-Programming/china-seas-image-enrichment-3.js
index 6f1adc4c..98ce6e19 100644
--- a/DW-Programming/china-seas-image-enrichment-3.js
+++ b/DW-Programming/china-seas-image-enrichment-3.js
@@ -3,7 +3,7 @@
 // Uses word overlap scoring with typo tolerance
 
 const { Pool } = require('pg');
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 function normalizeText(s) {
   return s.toLowerCase().replace(/[_\-]/g, ' ').replace(/\s+/g, ' ').trim();
diff --git a/DW-Programming/china-seas-image-enrichment.js b/DW-Programming/china-seas-image-enrichment.js
index aab9abdb..49217c3d 100644
--- a/DW-Programming/china-seas-image-enrichment.js
+++ b/DW-Programming/china-seas-image-enrichment.js
@@ -3,7 +3,7 @@
 // Matches "Screen Printed" products to wallcovering products by pattern + color keywords
 
 const { Pool } = require('pg');
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 async function run() {
   // Get all products still missing images
diff --git a/DW-Programming/command54-shopify-push.js b/DW-Programming/command54-shopify-push.js
index 3c1f6b6f..b5022b5e 100644
--- a/DW-Programming/command54-shopify-push.js
+++ b/DW-Programming/command54-shopify-push.js
@@ -19,7 +19,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SOURCE_AGENT = 'command54-p8-push';
diff --git a/DW-Programming/dwc-bulk-audit.js b/DW-Programming/dwc-bulk-audit.js
index 8aad59af..553f5fa5 100644
--- a/DW-Programming/dwc-bulk-audit.js
+++ b/DW-Programming/dwc-bulk-audit.js
@@ -10,7 +10,7 @@ const fs = require('fs');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
-const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 function graphql(query) {
   return new Promise((resolve, reject) => {
diff --git a/DW-Programming/dwc-legacy-audit.js b/DW-Programming/dwc-legacy-audit.js
index 4f0d709a..20df31ff 100644
--- a/DW-Programming/dwc-legacy-audit.js
+++ b/DW-Programming/dwc-legacy-audit.js
@@ -10,7 +10,7 @@ const { Client } = require('pg');
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
-const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 function graphql(query) {
   return new Promise((resolve, reject) => {
diff --git a/DW-Programming/dwjs-phase2-scrape-specs.js b/DW-Programming/dwjs-phase2-scrape-specs.js
index 95b76074..d3231caf 100644
--- a/DW-Programming/dwjs-phase2-scrape-specs.js
+++ b/DW-Programming/dwjs-phase2-scrape-specs.js
@@ -19,7 +19,7 @@ const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-phase2-scrape.log';
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/enrich-anna-french-pass2.js b/DW-Programming/enrich-anna-french-pass2.js
index ea6d576b..b155efb9 100644
--- a/DW-Programming/enrich-anna-french-pass2.js
+++ b/DW-Programming/enrich-anna-french-pass2.js
@@ -8,7 +8,7 @@
 const https = require('https');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const DELAY_MS = 600;
 const BATCH_SIZE = 50;
 const MAX_RETRIES = 2;
diff --git a/DW-Programming/enrich-anna-french-specs.js b/DW-Programming/enrich-anna-french-specs.js
index faceea7a..1493be7f 100644
--- a/DW-Programming/enrich-anna-french-specs.js
+++ b/DW-Programming/enrich-anna-french-specs.js
@@ -18,7 +18,7 @@
 const https = require('https');
 const { Pool } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const pool = new Pool({ connectionString: DB_URL });
 
 const CONCURRENCY = 5;       // parallel HTTP requests
diff --git a/DW-Programming/enrich-anna-french.js b/DW-Programming/enrich-anna-french.js
index 5d3a1075..28a58949 100644
--- a/DW-Programming/enrich-anna-french.js
+++ b/DW-Programming/enrich-anna-french.js
@@ -16,7 +16,7 @@
 const https = require('https');
 const { Pool } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 const BASE_DELAY_MS = 800;
 const MAX_DELAY_MS = 12000;
diff --git a/DW-Programming/enrich-arte-width.js b/DW-Programming/enrich-arte-width.js
index cf15351f..585efdad 100644
--- a/DW-Programming/enrich-arte-width.js
+++ b/DW-Programming/enrich-arte-width.js
@@ -15,7 +15,7 @@
 const { chromium } = require('playwright');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // All known collection slugs from our DB + extras commonly seen on Arte
 const COLLECTION_SLUGS = [
diff --git a/DW-Programming/enrich-ascreation-width.js b/DW-Programming/enrich-ascreation-width.js
index e10f649b..04b4ea7c 100644
--- a/DW-Programming/enrich-ascreation-width.js
+++ b/DW-Programming/enrich-ascreation-width.js
@@ -21,7 +21,7 @@ const https = require('https');
 const http = require('http');
 
 // ─── Config ────────────────────────────────────────────────────────────────
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const pool = new Pool({ connectionString: DB_URL });
 
 const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/enrich-grahambrown-width.js b/DW-Programming/enrich-grahambrown-width.js
index cdb4526f..726d8c81 100644
--- a/DW-Programming/enrich-grahambrown-width.js
+++ b/DW-Programming/enrich-grahambrown-width.js
@@ -16,7 +16,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 // --- Config ---
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const DELAY_MS = 2000; // 2s between requests (polite rate limit)
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
diff --git a/DW-Programming/enrich-rl-width.js b/DW-Programming/enrich-rl-width.js
index f3632206..acd0d39e 100644
--- a/DW-Programming/enrich-rl-width.js
+++ b/DW-Programming/enrich-rl-width.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function fetch(url) {
diff --git a/DW-Programming/fix-empty-body-html.js b/DW-Programming/fix-empty-body-html.js
index 42aaafe2..b0634e69 100644
--- a/DW-Programming/fix-empty-body-html.js
+++ b/DW-Programming/fix-empty-body-html.js
@@ -24,7 +24,7 @@ const SHOPIFY = {
   apiVersion: '2024-10'
 };
 
-const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const RATE_LIMIT_MS = 500; // 500ms between Shopify REST calls
 const GQL_BATCH_SIZE = 25; // products per GraphQL page (with metafields)
diff --git a/DW-Programming/fix-product-type-by-width.js b/DW-Programming/fix-product-type-by-width.js
index 6600ccda..1f5a77e6 100644
--- a/DW-Programming/fix-product-type-by-width.js
+++ b/DW-Programming/fix-product-type-by-width.js
@@ -20,7 +20,7 @@
 const https = require('https');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
diff --git a/DW-Programming/fix-product-type-tags.js b/DW-Programming/fix-product-type-tags.js
index 8f33f555..f6d57186 100644
--- a/DW-Programming/fix-product-type-tags.js
+++ b/DW-Programming/fix-product-type-tags.js
@@ -17,7 +17,7 @@ const DELAY_MS = 600;
 const SLACK_WEBHOOK_PATH = '/services/T03U65C1G7J/B09RCFHS7PW/7Izxc7OGsDWKPdRALLOocO6O';
 
 const db = new Client({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
diff --git a/DW-Programming/fix-sandberg-body.js b/DW-Programming/fix-sandberg-body.js
index 8ed84ade..b4571bac 100644
--- a/DW-Programming/fix-sandberg-body.js
+++ b/DW-Programming/fix-sandberg-body.js
@@ -12,7 +12,7 @@ const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-01';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function shopifyGraphQL(query, variables = {}) {
diff --git a/DW-Programming/fix-single-variant-pricing.js b/DW-Programming/fix-single-variant-pricing.js
index b18fa0ee..76ceb445 100644
--- a/DW-Programming/fix-single-variant-pricing.js
+++ b/DW-Programming/fix-single-variant-pricing.js
@@ -12,7 +12,7 @@ const { Client } = require('pg');
 
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
 const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // Rate limiting
 const SHOPIFY_DELAY = 150; // ms between requests (well under 20/s Plus limit)
diff --git a/DW-Programming/generate-maya-room-settings.js b/DW-Programming/generate-maya-room-settings.js
index 1acbaa3f..bf73506c 100644
--- a/DW-Programming/generate-maya-room-settings.js
+++ b/DW-Programming/generate-maya-room-settings.js
@@ -17,7 +17,7 @@ const http = require('http');
 const fs = require('fs');
 const path = require('path');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const ROOM_API = 'http://45.61.58.125:3075/api/generate-room';
 const OUTPUT_DIR = '/root/DW-Agents/room-settings/maya-romanoff';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/generate-maya-spin-viewers.js b/DW-Programming/generate-maya-spin-viewers.js
index 55aeb6e0..2ba6e2d5 100644
--- a/DW-Programming/generate-maya-spin-viewers.js
+++ b/DW-Programming/generate-maya-spin-viewers.js
@@ -24,7 +24,7 @@ const http = require('http');
 
 // ─── Configuration ───────────────────────────────────────────────────────────
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const OUTPUT_DIR = '/root/DW-Agents/spin-viewers/maya-romanoff';
 const MANIFEST_PATH = path.join(OUTPUT_DIR, 'manifest.json');
 
diff --git a/DW-Programming/hex-color-blitz.js b/DW-Programming/hex-color-blitz.js
index c8cac4a3..4b5d5266 100644
--- a/DW-Programming/hex-color-blitz.js
+++ b/DW-Programming/hex-color-blitz.js
@@ -19,7 +19,7 @@ const http = require('http');
 
 // ─── Config ─────────────────────────────────────────────────────────────────
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/hollywood-hex-and-tags.js b/DW-Programming/hollywood-hex-and-tags.js
index 1cbee732..91675546 100644
--- a/DW-Programming/hollywood-hex-and-tags.js
+++ b/DW-Programming/hollywood-hex-and-tags.js
@@ -11,7 +11,7 @@ const https = require('https');
 const http = require('http');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/hollywood-hex-extract.js b/DW-Programming/hollywood-hex-extract.js
index 0900387c..175ac475 100644
--- a/DW-Programming/hollywood-hex-extract.js
+++ b/DW-Programming/hollywood-hex-extract.js
@@ -3,7 +3,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // Products to process (11 with images)
 const products = [
diff --git a/DW-Programming/hollywood-shopify-push.js b/DW-Programming/hollywood-shopify-push.js
index 3eab3774..3b8079c6 100644
--- a/DW-Programming/hollywood-shopify-push.js
+++ b/DW-Programming/hollywood-shopify-push.js
@@ -26,7 +26,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SOURCE_AGENT = 'hollywood-p8-push';
diff --git a/DW-Programming/interior-design-ai-tagger.js b/DW-Programming/interior-design-ai-tagger.js
index 99355fcc..6fa93960 100644
--- a/DW-Programming/interior-design-ai-tagger.js
+++ b/DW-Programming/interior-design-ai-tagger.js
@@ -33,7 +33,7 @@ const SHOPIFY_API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Priority order from user spec
diff --git a/DW-Programming/jd-room-batch.js b/DW-Programming/jd-room-batch.js
index 0ea710cf..fea87e19 100644
--- a/DW-Programming/jd-room-batch.js
+++ b/DW-Programming/jd-room-batch.js
@@ -37,7 +37,7 @@ const ROOM_WALL_SIZES = {
 };
 
 const pool = new pg.Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 5,
   idleTimeoutMillis: 30000,
 });
diff --git a/DW-Programming/jd-room-test.js b/DW-Programming/jd-room-test.js
index da6a24f8..3ab5520b 100644
--- a/DW-Programming/jd-room-test.js
+++ b/DW-Programming/jd-room-test.js
@@ -10,7 +10,7 @@ const ROOM_SETTING_APP = 'http://127.0.0.1:3075';
 const OUTPUT_BASE = '/root/Projects/Designer-Wallcoverings/room-settings/justindavid';
 
 const pool = new pg.Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 3,
 });
 
diff --git a/DW-Programming/justindavid-shopify-push.js b/DW-Programming/justindavid-shopify-push.js
index cf090ea7..6195a15e 100644
--- a/DW-Programming/justindavid-shopify-push.js
+++ b/DW-Programming/justindavid-shopify-push.js
@@ -22,7 +22,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SOURCE_AGENT = 'jd-p8-push';
diff --git a/DW-Programming/launch-versace-vi.js b/DW-Programming/launch-versace-vi.js
index 8457740c..cd82e9bd 100644
--- a/DW-Programming/launch-versace-vi.js
+++ b/DW-Programming/launch-versace-vi.js
@@ -15,7 +15,7 @@ const { Client } = require('pg');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 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 DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 // Rate limiting: Shopify standard = 4 req/s, Silas check + product create = 2 calls each
diff --git a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
index 3aa03c72..0d827ce6 100644
--- a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
+++ b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
@@ -25,7 +25,7 @@ const CONFIG = {
   SPREADSHEET_CSV: 'https://docs.google.com/spreadsheets/d/1hPTMFkX762hftpEAxWTvEl9rNzhd4mBITnpkYuDgMLg/gviz/tq?tqx=out:csv',
   MAYA_SEARCH_URL: 'https://www.mayaromanoff.com/search?q=',
   MAYA_BASE_URL: 'https://www.mayaromanoff.com',
-  POSTGRES_URL: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  POSTGRES_URL: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   SLACK_WEBHOOK: '${SLACK_WEBHOOK_URL}',
   NEXT_SKU_START: 50000, // DWYA-50000+
   WAIT_TIME: 6000 // 6 seconds wait for page load
diff --git a/DW-Programming/maya-romanoff-updater/server.js b/DW-Programming/maya-romanoff-updater/server.js
index d7e5300c..a0ce6b1d 100644
--- a/DW-Programming/maya-romanoff-updater/server.js
+++ b/DW-Programming/maya-romanoff-updater/server.js
@@ -29,7 +29,7 @@ const CONFIG = {
   API_VERSION: '2024-01',
   GEMINI_API_KEY: '${GOOGLE_API_KEY}',
   MAYA_BASE_URL: 'https://www.mayaromanoff.com',
-  POSTGRES_URL: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  POSTGRES_URL: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   SLACK_WEBHOOK: '${SLACK_WEBHOOK_URL}',
   SPREADSHEET_CSV: 'https://docs.google.com/spreadsheets/d/1hPTMFkX762hftpEAxWTvEl9rNzhd4mBITnpkYuDgMLg/gviz/tq?tqx=out:csv',
   SPREADSHEET_CSV_2: 'https://docs.google.com/spreadsheets/d/1mQ08UJZ5T_qVTHOW8o1s-zbz5l93AUN9c46meup6uO0/gviz/tq?tqx=out:csv'
diff --git a/DW-Programming/mdcwall-image-finder.js b/DW-Programming/mdcwall-image-finder.js
index e2494fba..f4d7395b 100644
--- a/DW-Programming/mdcwall-image-finder.js
+++ b/DW-Programming/mdcwall-image-finder.js
@@ -14,7 +14,7 @@ const https = require('https');
 const http = require('http');
 const { Client, Pool } = require('pg');
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 
 // MDC collection pages to crawl
diff --git a/DW-Programming/migrate-dwkk-to-dwpr.js b/DW-Programming/migrate-dwkk-to-dwpr.js
index 011bf440..0b093d9d 100644
--- a/DW-Programming/migrate-dwkk-to-dwpr.js
+++ b/DW-Programming/migrate-dwkk-to-dwpr.js
@@ -22,7 +22,7 @@ const https = require('https');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 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 DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 const RATE_LIMIT_MS = 2000; // 0.5 req/s
 const NEW_PREFIX = 'DWPR';
diff --git a/DW-Programming/nextjs-liquid-app/backfill-metafields.js b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
index 575cd0e9..bba22616 100644
--- a/DW-Programming/nextjs-liquid-app/backfill-metafields.js
+++ b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 
 const STORE = 'designer-laboratory-sandbox.myshopify.com';
 const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 // Rate limit: 2 req/sec with burst of 40
 const DELAY_MS = 550;
diff --git a/DW-Programming/nextjs-liquid-app/db-proxy/server.js b/DW-Programming/nextjs-liquid-app/db-proxy/server.js
index 4decb2fa..7fb2a9af 100644
--- a/DW-Programming/nextjs-liquid-app/db-proxy/server.js
+++ b/DW-Programming/nextjs-liquid-app/db-proxy/server.js
@@ -2,7 +2,7 @@ const express = require('express');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 20,
   idleTimeoutMillis: 30000,
   connectionTimeoutMillis: 5000,
diff --git a/DW-Programming/nextjs-liquid-app/update-mckenzie-titles.js b/DW-Programming/nextjs-liquid-app/update-mckenzie-titles.js
index 15097745..b2b6acbe 100644
--- a/DW-Programming/nextjs-liquid-app/update-mckenzie-titles.js
+++ b/DW-Programming/nextjs-liquid-app/update-mckenzie-titles.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/DW-Programming/phase3-ai-enrich-100.js b/DW-Programming/phase3-ai-enrich-100.js
index 1ba459dd..bbda88d2 100644
--- a/DW-Programming/phase3-ai-enrich-100.js
+++ b/DW-Programming/phase3-ai-enrich-100.js
@@ -11,7 +11,7 @@ const http = require('http');
 const { trackGeminiCall, getGeminiCosts } = require('/root/DW-Agents/shared/gemini-cost-tracker');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/phase3-ai-enrich-batch.js b/DW-Programming/phase3-ai-enrich-batch.js
index 9cd71068..5ad3f19b 100644
--- a/DW-Programming/phase3-ai-enrich-batch.js
+++ b/DW-Programming/phase3-ai-enrich-batch.js
@@ -10,7 +10,7 @@ const https = require('https');
 const http = require('http');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/phase3-ai-enrich-run.js b/DW-Programming/phase3-ai-enrich-run.js
index 5b56ec87..46c1a8ed 100644
--- a/DW-Programming/phase3-ai-enrich-run.js
+++ b/DW-Programming/phase3-ai-enrich-run.js
@@ -12,7 +12,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 pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Tables to enrich (pick a mix of smaller, high-value vendors)
diff --git a/DW-Programming/phase3-ai-enrichment.js b/DW-Programming/phase3-ai-enrichment.js
index b4a5e6ae..13a63e95 100644
--- a/DW-Programming/phase3-ai-enrichment.js
+++ b/DW-Programming/phase3-ai-enrichment.js
@@ -9,7 +9,7 @@ const https = require('https');
 const http = require('http');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/DW-Programming/pj-tearsheet-scraper.js b/DW-Programming/pj-tearsheet-scraper.js
index a4ed605e..273f1ea2 100644
--- a/DW-Programming/pj-tearsheet-scraper.js
+++ b/DW-Programming/pj-tearsheet-scraper.js
@@ -14,7 +14,7 @@ const https = require('https');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Rate limiting: 2s between products (each product = 2 requests)
diff --git a/DW-Programming/prl-ai-enrich.js b/DW-Programming/prl-ai-enrich.js
index 7391f55b..a6edb891 100644
--- a/DW-Programming/prl-ai-enrich.js
+++ b/DW-Programming/prl-ai-enrich.js
@@ -22,7 +22,7 @@ const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemi
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 650;
diff --git a/DW-Programming/push-china-seas-metafields.js b/DW-Programming/push-china-seas-metafields.js
index 490abc64..df94dd9e 100644
--- a/DW-Programming/push-china-seas-metafields.js
+++ b/DW-Programming/push-china-seas-metafields.js
@@ -36,7 +36,7 @@ function extractNumericId(gid) {
 }
 
 async function main() {
-  const client = new Client('postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified');
+  const client = new Client((process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'));
   await client.connect();
 
   const { rows } = await client.query(`
diff --git a/DW-Programming/push-color-hex-metafields.js b/DW-Programming/push-color-hex-metafields.js
index 100284e6..7f11dee4 100644
--- a/DW-Programming/push-color-hex-metafields.js
+++ b/DW-Programming/push-color-hex-metafields.js
@@ -15,7 +15,7 @@ const { Pool } = require('pg');
 const https = require('https');
 const fs = require('fs');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
diff --git a/DW-Programming/push-maya-romanoff-to-shopify.js b/DW-Programming/push-maya-romanoff-to-shopify.js
index 00b90ecc..f918f18f 100644
--- a/DW-Programming/push-maya-romanoff-to-shopify.js
+++ b/DW-Programming/push-maya-romanoff-to-shopify.js
@@ -17,7 +17,7 @@ const CONFIG = {
   SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
   SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
   API_VERSION: '2024-10',
-  POSTGRES_URL: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  POSTGRES_URL: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   SLACK_WEBHOOK: '${SLACK_WEBHOOK_URL}',
   DELAY_MS: 650,
   RETRY_DELAY_MS: 35000,
diff --git a/DW-Programming/push-versa-specs-to-shopify.js b/DW-Programming/push-versa-specs-to-shopify.js
index cd369b28..c4ac15c4 100644
--- a/DW-Programming/push-versa-specs-to-shopify.js
+++ b/DW-Programming/push-versa-specs-to-shopify.js
@@ -8,7 +8,7 @@
 const { Client } = require('pg');
 const https = require('https');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const API_VERSION = '2024-10';
diff --git a/DW-Programming/push-versace-vi.js b/DW-Programming/push-versace-vi.js
index 94127ffb..77516e3d 100644
--- a/DW-Programming/push-versace-vi.js
+++ b/DW-Programming/push-versace-vi.js
@@ -13,7 +13,7 @@
 const { Pool } = require('pg');
 // Node 22 has native fetch — no require needed
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SILAS_URL = 'http://127.0.0.1:9674';
diff --git a/DW-Programming/romo-group-enrichment-scraper.js b/DW-Programming/romo-group-enrichment-scraper.js
index 9a5ce1a5..5bbeed08 100644
--- a/DW-Programming/romo-group-enrichment-scraper.js
+++ b/DW-Programming/romo-group-enrichment-scraper.js
@@ -16,7 +16,7 @@ const puppeteer = require('puppeteer');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const BRAND_CONFIG = {
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 e4af29b8..d5308a3a 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.js
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.js
@@ -20,7 +20,7 @@ const fs = require('fs');
 const path = require('path');
 
 // ─── Config ───────────────────────────────────────────────────────────────────
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@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 = process.env.SHOPIFY_ADMIN_TOKEN;
diff --git a/DW-Programming/scrape-versa-evo-pvcfree.js b/DW-Programming/scrape-versa-evo-pvcfree.js
index f31de3cb..260d93e7 100644
--- a/DW-Programming/scrape-versa-evo-pvcfree.js
+++ b/DW-Programming/scrape-versa-evo-pvcfree.js
@@ -15,7 +15,7 @@ const BRAND = 'Versa Designed Surfaces';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function delay(ms) { return new Promise(r => setTimeout(r, ms)); }
diff --git a/DW-Programming/scrape-versace-images.js b/DW-Programming/scrape-versace-images.js
index ebd82d62..aae162ba 100644
--- a/DW-Programming/scrape-versace-images.js
+++ b/DW-Programming/scrape-versace-images.js
@@ -17,7 +17,7 @@ const https = require('https');
 const http = require('http');
 const cheerio = require('cheerio');
 
-const PG_CONN = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_CONN = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
diff --git a/DW-Programming/set-pattern-name-metafield.js b/DW-Programming/set-pattern-name-metafield.js
index d410f8af..f689a9c6 100644
--- a/DW-Programming/set-pattern-name-metafield.js
+++ b/DW-Programming/set-pattern-name-metafield.js
@@ -19,7 +19,7 @@
 const { Pool } = require('pg');
 const ShopifyQueueClient = require('/root/DW-Agents/shared/shopify-queue-client.js');
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const pool = new Pool({ connectionString: DB });
 const queue = new ShopifyQueueClient('set-pattern-name');
 
diff --git a/DW-Programming/test-anna-5.js b/DW-Programming/test-anna-5.js
index 38676471..e94f9f29 100644
--- a/DW-Programming/test-anna-5.js
+++ b/DW-Programming/test-anna-5.js
@@ -2,7 +2,7 @@
 const https = require('https');
 const { Pool } = require('pg');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 function fetchUrl(url) {
   return new Promise((resolve, reject) => {
diff --git a/DW-Programming/twil-image-retail-scraper.js b/DW-Programming/twil-image-retail-scraper.js
index f514c324..b37c9b44 100644
--- a/DW-Programming/twil-image-retail-scraper.js
+++ b/DW-Programming/twil-image-retail-scraper.js
@@ -14,7 +14,7 @@ const https = require('https');
 const http = require('http');
 const { Client } = require('pg');
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 function log(msg) {
   const pt = new Date().toLocaleString('en-US', { timeZone: 'America/Los_Angeles', hour: '2-digit', minute: '2-digit', second: '2-digit' });
diff --git a/DW-Programming/twil-image-validator.js b/DW-Programming/twil-image-validator.js
index 23e64d86..33d5703a 100644
--- a/DW-Programming/twil-image-validator.js
+++ b/DW-Programming/twil-image-validator.js
@@ -11,7 +11,7 @@ const https = require('https');
 const http = require('http');
 const { Client } = require('pg');
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const CONCURRENCY = 10;
 
 function checkUrl(url) {
diff --git a/DW-Programming/twil-tag-needs-image.js b/DW-Programming/twil-tag-needs-image.js
index ae2a9ca1..6d03187f 100644
--- a/DW-Programming/twil-tag-needs-image.js
+++ b/DW-Programming/twil-tag-needs-image.js
@@ -4,7 +4,7 @@
  * Uses the shopify-queue-worker for rate-limited API calls.
  */
 const { Pool } = require('pg');
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const GOOD_SOURCES = [
   'crownsurfacesolutions.com', 'winfieldthybony.com', 'wallpaperstogo.com',
diff --git a/DW-Programming/twil-verify-remaining.js b/DW-Programming/twil-verify-remaining.js
index 5877068f..a4132038 100644
--- a/DW-Programming/twil-verify-remaining.js
+++ b/DW-Programming/twil-verify-remaining.js
@@ -8,7 +8,7 @@ const https = require('https');
 const http = require('http');
 const { Client } = require('pg');
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 function log(msg) {
   const pt = new Date().toLocaleString('en-US', { timeZone: 'America/Los_Angeles', hour: '2-digit', minute: '2-digit', second: '2-digit' });
diff --git a/DW-Programming/update-dwjs-specs-final.js b/DW-Programming/update-dwjs-specs-final.js
index 7904b5df..b8c88b66 100644
--- a/DW-Programming/update-dwjs-specs-final.js
+++ b/DW-Programming/update-dwjs-specs-final.js
@@ -13,7 +13,7 @@ const API_VERSION = '2024-10';
 const LOG_FILE = '/tmp/dwjs-specs-final.log';
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/update-dwjs-specs-phase2.js b/DW-Programming/update-dwjs-specs-phase2.js
index 01286fff..0e66c745 100644
--- a/DW-Programming/update-dwjs-specs-phase2.js
+++ b/DW-Programming/update-dwjs-specs-phase2.js
@@ -21,7 +21,7 @@ const LOG_FILE = '/tmp/dwjs-specs-phase2.log';
 const SLACK_WEBHOOK_PATH = '/services/T03U65C1G7J/B09RCFHS7PW/7Izxc7OGsDWKPdRALLOocO6O';
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/update-dwjs-specs-phase3.js b/DW-Programming/update-dwjs-specs-phase3.js
index cb91f1bb..be6601d8 100644
--- a/DW-Programming/update-dwjs-specs-phase3.js
+++ b/DW-Programming/update-dwjs-specs-phase3.js
@@ -21,7 +21,7 @@ const LOG_FILE = '/tmp/dwjs-specs-phase3.log';
 const SLACK_WEBHOOK_PATH = '/services/T03U65C1G7J/B09RCFHS7PW/7Izxc7OGsDWKPdRALLOocO6O';
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/update-dwjs-specs-phase4.js b/DW-Programming/update-dwjs-specs-phase4.js
index dd4d1411..56d1f008 100644
--- a/DW-Programming/update-dwjs-specs-phase4.js
+++ b/DW-Programming/update-dwjs-specs-phase4.js
@@ -16,7 +16,7 @@ const LOG_FILE = '/tmp/dwjs-specs-phase4.log';
 const SLACK_WEBHOOK_PATH = '/services/T03U65C1G7J/B09RCFHS7PW/7Izxc7OGsDWKPdRALLOocO6O';
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/update-dwjs-specs.js b/DW-Programming/update-dwjs-specs.js
index d93196a7..5e9d67b6 100644
--- a/DW-Programming/update-dwjs-specs.js
+++ b/DW-Programming/update-dwjs-specs.js
@@ -15,7 +15,7 @@ const LOG_FILE = '/tmp/dwjs-specs-enrich.log';
 const GQL_ENDPOINT = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
 
 const DB_CONFIG = {
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 };
 
 function log(msg) {
diff --git a/DW-Programming/vendor-crawlers/arte-crawler/server.js b/DW-Programming/vendor-crawlers/arte-crawler/server.js
index f21a1d50..3946c401 100644
--- a/DW-Programming/vendor-crawlers/arte-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/arte-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/bespoke-crawler/server.js b/DW-Programming/vendor-crawlers/bespoke-crawler/server.js
index 43f1e1a1..075a90c6 100644
--- a/DW-Programming/vendor-crawlers/bespoke-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/bespoke-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/brewster-crawler/server.js b/DW-Programming/vendor-crawlers/brewster-crawler/server.js
index bf3e59f8..0ccd1305 100644
--- a/DW-Programming/vendor-crawlers/brewster-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/brewster-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/coleson-crawler/server.js b/DW-Programming/vendor-crawlers/coleson-crawler/server.js
index 0fcc4987..65e86805 100644
--- a/DW-Programming/vendor-crawlers/coleson-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/coleson-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/cowtan-crawler/server.js b/DW-Programming/vendor-crawlers/cowtan-crawler/server.js
index 6901bcd4..ad878027 100644
--- a/DW-Programming/vendor-crawlers/cowtan-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/cowtan-crawler/server.js
@@ -29,7 +29,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/elitis-crawler/scraper.js b/DW-Programming/vendor-crawlers/elitis-crawler/scraper.js
index ff944510..73020cc1 100644
--- a/DW-Programming/vendor-crawlers/elitis-crawler/scraper.js
+++ b/DW-Programming/vendor-crawlers/elitis-crawler/scraper.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 const { startRun, updateProgress, completeRun, failRun } = require('../lib/crawler-tracker');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
diff --git a/DW-Programming/vendor-crawlers/elitis-crawler/server.js b/DW-Programming/vendor-crawlers/elitis-crawler/server.js
index 1fab6a1c..f180dc3e 100644
--- a/DW-Programming/vendor-crawlers/elitis-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/elitis-crawler/server.js
@@ -29,7 +29,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/enrich-nlxl.js b/DW-Programming/vendor-crawlers/enrich-nlxl.js
index 23e72365..cf56008a 100644
--- a/DW-Programming/vendor-crawlers/enrich-nlxl.js
+++ b/DW-Programming/vendor-crawlers/enrich-nlxl.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 1200; // polite rate limiting
diff --git a/DW-Programming/vendor-crawlers/innovations-crawler/server.js b/DW-Programming/vendor-crawlers/innovations-crawler/server.js
index 829d22f2..4e2e9079 100644
--- a/DW-Programming/vendor-crawlers/innovations-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/innovations-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/koroseal-crawler/server.js b/DW-Programming/vendor-crawlers/koroseal-crawler/server.js
index ed193762..87dd540a 100644
--- a/DW-Programming/vendor-crawlers/koroseal-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/koroseal-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/kravet-crawler/server.js b/DW-Programming/vendor-crawlers/kravet-crawler/server.js
index f86425d8..33b1043f 100644
--- a/DW-Programming/vendor-crawlers/kravet-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/kravet-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/lib/crawler-tracker.js b/DW-Programming/vendor-crawlers/lib/crawler-tracker.js
index 14d414d6..94410bc6 100644
--- a/DW-Programming/vendor-crawlers/lib/crawler-tracker.js
+++ b/DW-Programming/vendor-crawlers/lib/crawler-tracker.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Slack webhook for #claude-to-steve channel
diff --git a/DW-Programming/vendor-crawlers/lib/sku-registry.js b/DW-Programming/vendor-crawlers/lib/sku-registry.js
index bebf42b6..954c252a 100644
--- a/DW-Programming/vendor-crawlers/lib/sku-registry.js
+++ b/DW-Programming/vendor-crawlers/lib/sku-registry.js
@@ -22,7 +22,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Vendor prefix starting ranges
diff --git a/DW-Programming/vendor-crawlers/maya-crawler/server.js b/DW-Programming/vendor-crawlers/maya-crawler/server.js
index 4927eea5..9664c08e 100644
--- a/DW-Programming/vendor-crawlers/maya-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/maya-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/pj-crawler/server.js b/DW-Programming/vendor-crawlers/pj-crawler/server.js
index 1b8165b5..8b406dea 100644
--- a/DW-Programming/vendor-crawlers/pj-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/pj-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/rlf-crawler/server.js b/DW-Programming/vendor-crawlers/rlf-crawler/server.js
index e70b5325..f30da286 100644
--- a/DW-Programming/vendor-crawlers/rlf-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/rlf-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/schumacher-crawler/server.js b/DW-Programming/vendor-crawlers/schumacher-crawler/server.js
index c7ca0c81..d86ae454 100644
--- a/DW-Programming/vendor-crawlers/schumacher-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/schumacher-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/full-fetch.js b/DW-Programming/vendor-crawlers/thibaut-crawler/full-fetch.js
index 59230f91..52ae10fd 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/full-fetch.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/full-fetch.js
@@ -15,7 +15,7 @@ const BASE_URL = 'https://www.thibautdesign.com';
 const CATEGORY_URL = 'https://www.thibautdesign.com/category/wallcoverings';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Progress tracking
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/import-from-spreadsheet.js b/DW-Programming/vendor-crawlers/thibaut-crawler/import-from-spreadsheet.js
index 20e1feb7..9d4d5586 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/import-from-spreadsheet.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/import-from-spreadsheet.js
@@ -8,7 +8,7 @@ const { Pool } = require('pg');
 const { parse } = require('csv-parse/sync');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const CSV_PATH = '/root/Projects/Designer-Wallcoverings/DW-Agents/dw-agents/agent-thibaut-updater/data/thibaut-spreadsheet.csv';
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/server.js b/DW-Programming/vendor-crawlers/thibaut-crawler/server.js
index 9df63e29..4127ebf6 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
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 4b34f7d9..5b2ae20c 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
@@ -13,7 +13,7 @@ const { Pool } = require('pg');
 const fetch = require('node-fetch');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
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 46834949..c47e508a 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/DW-Programming/vendor-crawlers/york-crawler/server.js b/DW-Programming/vendor-crawlers/york-crawler/server.js
index b97caa98..80a9c771 100644
--- a/DW-Programming/vendor-crawlers/york-crawler/server.js
+++ b/DW-Programming/vendor-crawlers/york-crawler/server.js
@@ -30,7 +30,7 @@ app.use(express.json());
 app.use(basicAuth);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // GET /status - Crawler status
diff --git a/DW-Programming/verify-versace.js b/DW-Programming/verify-versace.js
index dc50b7da..8a61720c 100644
--- a/DW-Programming/verify-versace.js
+++ b/DW-Programming/verify-versace.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 const https = require('https');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
 const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 
diff --git a/DW-Programming/versa-evo-enrich.js b/DW-Programming/versa-evo-enrich.js
index 9b65bb38..30c3cbcc 100644
--- a/DW-Programming/versa-evo-enrich.js
+++ b/DW-Programming/versa-evo-enrich.js
@@ -1,7 +1,7 @@
 const { chromium } = require('playwright');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const BASE_URL = 'https://www.versadesignedsurfaces.com';
 
 async function enrichProducts() {
diff --git a/DW-Programming/versa-evo-pvcfree-scraper.js b/DW-Programming/versa-evo-pvcfree-scraper.js
index 7d1c5272..386aa228 100644
--- a/DW-Programming/versa-evo-pvcfree-scraper.js
+++ b/DW-Programming/versa-evo-pvcfree-scraper.js
@@ -1,7 +1,7 @@
 const { chromium } = require('playwright');
 const { Client } = require('pg');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const BASE_URL = 'https://www.versadesignedsurfaces.com';
 const COLLECTION_NAME = 'Versa 20 oz Evo PVC-free';
 
diff --git a/DW-Programming/versace-dry-run.js b/DW-Programming/versace-dry-run.js
index 92b17651..e2af7279 100644
--- a/DW-Programming/versace-dry-run.js
+++ b/DW-Programming/versace-dry-run.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 const fetch = require('node-fetch');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 function toTitleCase(str) {
   if (!str) return '';
diff --git a/DW-Programming/versace-image-scraper.js b/DW-Programming/versace-image-scraper.js
index 8a5fd6e8..5c007f6c 100644
--- a/DW-Programming/versace-image-scraper.js
+++ b/DW-Programming/versace-image-scraper.js
@@ -8,7 +8,7 @@
 const { Client } = require('pg');
 const fs = require('fs');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/versace-image-uploader.js b/DW-Programming/versace-image-uploader.js
index 7d4a627d..571f7743 100644
--- a/DW-Programming/versace-image-uploader.js
+++ b/DW-Programming/versace-image-uploader.js
@@ -15,7 +15,7 @@ const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // === IMAGE MAPPINGS (scraped from products.as-creation.com) ===
diff --git a/DW-Programming/width-blitz.js b/DW-Programming/width-blitz.js
index a74dff55..414749a6 100644
--- a/DW-Programming/width-blitz.js
+++ b/DW-Programming/width-blitz.js
@@ -23,7 +23,7 @@ const https = require('https');
 const http = require('http');
 
 // ─── Config ────────────────────────────────────────────────────────────────
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const pool = new Pool({ connectionString: DB_URL });
 
 const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/zoffany-ai-enrich.js b/DW-Programming/zoffany-ai-enrich.js
index c5a7a2e2..3a44465b 100644
--- a/DW-Programming/zoffany-ai-enrich.js
+++ b/DW-Programming/zoffany-ai-enrich.js
@@ -21,7 +21,7 @@ const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemi
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 650;
diff --git a/ai-enrich-arte-fix.js b/ai-enrich-arte-fix.js
index 5a014743..680a3083 100644
--- a/ai-enrich-arte-fix.js
+++ b/ai-enrich-arte-fix.js
@@ -70,7 +70,7 @@ function callGemini(b64, name) {
 }
 
 async function main() {
-  const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+  const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
   await db.connect();
   let ok = 0, fail = 0;
 
diff --git a/ai-enrich-gaps2.js b/ai-enrich-gaps2.js
index 1560e1ca..9ec54f9e 100644
--- a/ai-enrich-gaps2.js
+++ b/ai-enrich-gaps2.js
@@ -82,7 +82,7 @@ function callGemini(b64, productName) {
 }
 
 async function main() {
-  const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+  const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
   await db.connect();
 
   let success = 0, fail = 0;
diff --git a/arte-fill-tags.js b/arte-fill-tags.js
index 94a23adb..27bb1266 100644
--- a/arte-fill-tags.js
+++ b/arte-fill-tags.js
@@ -4,7 +4,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 async function geminiAnalyze(imageUrl, patternName) {
   const prompt = `You are an interior design wallcovering tagger. Analyze this wallcovering image.
diff --git a/enrich-arte-fix.js b/enrich-arte-fix.js
index 753d3afa..5d64ace1 100644
--- a/enrich-arte-fix.js
+++ b/enrich-arte-fix.js
@@ -3,7 +3,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const PRODUCTS = [
   { id: 123, sku: '19433', pattern: 'Horus', color: 'Desert Sun', img: 'https://edge.arte-international.com/media/4960d9f1-bc0a-4bcb-9a82-c09d9e5e7d98/conversions/EssentialsLuxor_Horus_19436_Roomshot_Web_LR-medium-two-thirds.jpg' },
diff --git a/enrich-arte-gaps.js b/enrich-arte-gaps.js
index 406ae261..4e736a7f 100644
--- a/enrich-arte-gaps.js
+++ b/enrich-arte-gaps.js
@@ -3,7 +3,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
-const pgClient = new Client('postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified');
+const pgClient = new Client((process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'));
 
 const PROMPT = `You are an interior design wallcovering analyst. Analyze this wallcovering product image.
 
diff --git a/enrich-arte-puppeteer.js b/enrich-arte-puppeteer.js
index 5480b0e1..dcc87589 100644
--- a/enrich-arte-puppeteer.js
+++ b/enrich-arte-puppeteer.js
@@ -4,7 +4,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
-const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const ARTE_PRODUCTS = [
   { vc_id: 123, sku: '19433', name: 'Horus Desert Sun', url: 'https://www.arte-international.com/en/collections/essentials-luxor/horus/19433' },
diff --git a/enrich-remaining-13.js b/enrich-remaining-13.js
index 355bc5c2..17e47e46 100644
--- a/enrich-remaining-13.js
+++ b/enrich-remaining-13.js
@@ -4,7 +4,7 @@ const { Client } = require('pg');
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
-const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const PRODUCTS = [
   // Arte — use packshot_url from arte_catalog
diff --git a/gemini-classify-texture.js b/gemini-classify-texture.js
index ca1ee579..f3d31500 100644
--- a/gemini-classify-texture.js
+++ b/gemini-classify-texture.js
@@ -7,7 +7,7 @@ const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
 const PROMPT = `Is this wallcovering image a repeating pattern or a non-repeating texture? If it's a texture (grasscloth, linen, plain, solid, stucco, metallic, stone, concrete, weave, etc.), respond 'TEXTURE'. If it has a visible repeating pattern (florals, stripes, damask, geometric, medallion, toile, scenic, mural, etc.), respond 'PATTERN'. Respond with only one word: TEXTURE or PATTERN.`;
 
-const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const products = require('/tmp/thibaut_remaining.json');
 const stats = { texture: 0, pattern: 0, error: 0, total: products.length };
 
diff --git a/gemini-enrich-arte.js b/gemini-enrich-arte.js
index 8888b233..9bdd8f0f 100644
--- a/gemini-enrich-arte.js
+++ b/gemini-enrich-arte.js
@@ -82,7 +82,7 @@ async function analyzeOne(product) {
 }
 
 async function main() {
-  const client = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+  const client = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
   await client.connect();
   console.log('Processing 9 Arte products with base64 image download...\n');
   
diff --git a/gemini-enrich-arte9.js b/gemini-enrich-arte9.js
index 97ffed8e..fdf49062 100644
--- a/gemini-enrich-arte9.js
+++ b/gemini-enrich-arte9.js
@@ -4,7 +4,7 @@ const { Client } = require('pg');
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
 
-const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 const PROMPT = `You are an interior design wallcovering analyst. Analyze this wallcovering product image (it may be a room setting showing the wallcovering installed on walls).
 Focus on the WALLCOVERING itself, not furniture or decor.
diff --git a/gemini-enrich-gaps.js b/gemini-enrich-gaps.js
index b81c6c0b..a8732607 100644
--- a/gemini-enrich-gaps.js
+++ b/gemini-enrich-gaps.js
@@ -6,7 +6,7 @@ const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_KEY}`;
 
-const DB = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // Products to process — using arte_catalog packshot images for Arte, vendor_catalog images for Black Edition
 const products = [
diff --git a/lib/processing-state.ts b/lib/processing-state.ts
index 1653fd9d..53a8201a 100644
--- a/lib/processing-state.ts
+++ b/lib/processing-state.ts
@@ -49,7 +49,7 @@ export class ProcessingStateClient {
       port: parseInt(process.env.DB_PORT || '5432'),
       database: process.env.DB_NAME || 'dw_unified',
       user: process.env.DB_USER || 'dw_admin',
-      password: process.env.DB_PASSWORD || 'DW2024SecurePass'
+      password: process.env.DB_PASSWORD
     });
   }
 
diff --git a/scripts/add-review-tag-thibaut.js b/scripts/add-review-tag-thibaut.js
index 7302629b..c816f601 100644
--- a/scripts/add-review-tag-thibaut.js
+++ b/scripts/add-review-tag-thibaut.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/ai-enrich-arte-gaps.js b/scripts/ai-enrich-arte-gaps.js
index 951faa97..4eaf9522 100644
--- a/scripts/ai-enrich-arte-gaps.js
+++ b/scripts/ai-enrich-arte-gaps.js
@@ -20,7 +20,7 @@ const PROMPT = `You are an interior design product analyst. Analyze this wallcov
 
 Return ONLY valid JSON, no markdown fences.`;
 
-const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 const ARTE_SKUS = ['19433', '23401', '23412', '23413', '23421', '23422', '23431', '23433', '29221'];
 
diff --git a/scripts/ai-enrich-gaps.js b/scripts/ai-enrich-gaps.js
index 94a5303e..578ae911 100644
--- a/scripts/ai-enrich-gaps.js
+++ b/scripts/ai-enrich-gaps.js
@@ -22,7 +22,7 @@ const PROMPT = `You are an interior design product analyst. Analyze this wallcov
 
 Return ONLY valid JSON, no markdown fences.`;
 
-const db = new Client({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const db = new Client({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 // Products to enrich
 const ARTE_SKUS = ['19433', '23401', '23412', '23413', '23421', '23422', '23431', '23433', '29221'];
diff --git a/scripts/brand-mckenzie-full-scrape.ts b/scripts/brand-mckenzie-full-scrape.ts
index 47349a77..814ea0ee 100644
--- a/scripts/brand-mckenzie-full-scrape.ts
+++ b/scripts/brand-mckenzie-full-scrape.ts
@@ -13,7 +13,7 @@ const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 
 // PostgreSQL connection
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const COLLECTIONS = ['tropical-daze', 'home-deco', 'creative-florals'];
diff --git a/scripts/change-logger.ts b/scripts/change-logger.ts
index 4902e751..7ebb88ac 100644
--- a/scripts/change-logger.ts
+++ b/scripts/change-logger.ts
@@ -11,7 +11,7 @@ const DB_CONFIG = {
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 };
 
 // TypeScript types for change logging
diff --git a/scripts/enrich-remaining-13.js b/scripts/enrich-remaining-13.js
index c9720725..f8f4f238 100644
--- a/scripts/enrich-remaining-13.js
+++ b/scripts/enrich-remaining-13.js
@@ -10,7 +10,7 @@ const https = require('https');
 const http = require('http');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
diff --git a/scripts/feed-room-queue.js b/scripts/feed-room-queue.js
index aaac7100..adb420ed 100644
--- a/scripts/feed-room-queue.js
+++ b/scripts/feed-room-queue.js
@@ -14,7 +14,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 5,
 });
 
diff --git a/scripts/fix-justindavid-images.js b/scripts/fix-justindavid-images.js
index 3e2f257a..d6bde7c3 100644
--- a/scripts/fix-justindavid-images.js
+++ b/scripts/fix-justindavid-images.js
@@ -11,7 +11,7 @@ const cheerio = require('cheerio');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DELAY_MS = 800; // polite delay between page fetches
diff --git a/scripts/import-fmpro-to-postgres.js b/scripts/import-fmpro-to-postgres.js
index 3c9f0106..52fd3491 100644
--- a/scripts/import-fmpro-to-postgres.js
+++ b/scripts/import-fmpro-to-postgres.js
@@ -8,7 +8,7 @@ const fs = require('fs');
 const { execSync } = require('child_process');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const CSV_PATH = '/root/fmpro-master.csv';
diff --git a/scripts/interior-design-tags.js b/scripts/interior-design-tags.js
index 6901cd11..f43482da 100644
--- a/scripts/interior-design-tags.js
+++ b/scripts/interior-design-tags.js
@@ -35,7 +35,7 @@ const SHOPIFY_API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 5,
 });
 
diff --git a/scripts/jd-fix-image-urls.js b/scripts/jd-fix-image-urls.js
index 2241c6b8..6de32817 100644
--- a/scripts/jd-fix-image-urls.js
+++ b/scripts/jd-fix-image-urls.js
@@ -22,7 +22,7 @@ const { Client } = require('pg');
 const https = require('https');
 const http = require('http');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // Parse args
 const args = process.argv.slice(2);
diff --git a/scripts/justindavid-room-settings.js b/scripts/justindavid-room-settings.js
index d7dc5fa0..7376fc37 100644
--- a/scripts/justindavid-room-settings.js
+++ b/scripts/justindavid-room-settings.js
@@ -17,7 +17,7 @@ const https = require("https");
 const http = require("http");
 
 const pool = new Pool({
-  connectionString: "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified",
+  connectionString: (process.env.DATABASE_URL || "postgresql://dw_admin@127.0.0.1:5432/dw_unified"),
 });
 
 const GEMINI_KEY = "${GOOGLE_API_KEY}";
diff --git a/scripts/kill-wallpaper-word.js b/scripts/kill-wallpaper-word.js
index 2b3fde3c..e38d611e 100644
--- a/scripts/kill-wallpaper-word.js
+++ b/scripts/kill-wallpaper-word.js
@@ -14,7 +14,7 @@ const { Client } = require('pg');
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
-const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const DELAY_MS = 350; // between GraphQL mutations
diff --git a/scripts/koroseal-website-scraper.ts b/scripts/koroseal-website-scraper.ts
index bddbac27..0ecf0292 100644
--- a/scripts/koroseal-website-scraper.ts
+++ b/scripts/koroseal-website-scraper.ts
@@ -7,7 +7,7 @@ import puppeteer, { Browser, Page } from 'puppeteer';
 import { Pool } from 'pg';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const BASE_URL = 'https://koroseal.com';
diff --git a/scripts/mfr-sku-bulk-update.js b/scripts/mfr-sku-bulk-update.js
index 51e1eeb3..f64df687 100755
--- a/scripts/mfr-sku-bulk-update.js
+++ b/scripts/mfr-sku-bulk-update.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/populate-dwtt-mfr-sku-active.js b/scripts/populate-dwtt-mfr-sku-active.js
index 2ac1a7bb..917e1ff6 100644
--- a/scripts/populate-dwtt-mfr-sku-active.js
+++ b/scripts/populate-dwtt-mfr-sku-active.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/populate-dwtt-mfr-sku-from-catalog.js b/scripts/populate-dwtt-mfr-sku-from-catalog.js
index edefaa09..693bc9bf 100644
--- a/scripts/populate-dwtt-mfr-sku-from-catalog.js
+++ b/scripts/populate-dwtt-mfr-sku-from-catalog.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/populate-dwtt-mfr-sku.js b/scripts/populate-dwtt-mfr-sku.js
index 3a86e3c2..26630f74 100644
--- a/scripts/populate-dwtt-mfr-sku.js
+++ b/scripts/populate-dwtt-mfr-sku.js
@@ -1,7 +1,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/prl-ai-enrich.js b/scripts/prl-ai-enrich.js
index 35f8023b..02c6b628 100644
--- a/scripts/prl-ai-enrich.js
+++ b/scripts/prl-ai-enrich.js
@@ -12,7 +12,7 @@ const GEMINI_MODEL = 'gemini-2.0-flash';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_KEY}`;
 const BATCH_SIZE = 100;
 const DELAY_MS = 500;
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const PROMPT = `You are an interior design expert analyzing a wallcovering product image.
 Return ONLY valid JSON (no markdown, no backticks):
diff --git a/scripts/push-mfr-to-shopify.js b/scripts/push-mfr-to-shopify.js
index b34012b9..56228671 100644
--- a/scripts/push-mfr-to-shopify.js
+++ b/scripts/push-mfr-to-shopify.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/rw-drapery-room-settings.js b/scripts/rw-drapery-room-settings.js
index db89ca24..f5bd3232 100644
--- a/scripts/rw-drapery-room-settings.js
+++ b/scripts/rw-drapery-room-settings.js
@@ -26,7 +26,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
 });
 
diff --git a/scripts/rw-upload-room-settings.js b/scripts/rw-upload-room-settings.js
index b03a89e1..f515e820 100644
--- a/scripts/rw-upload-room-settings.js
+++ b/scripts/rw-upload-room-settings.js
@@ -24,7 +24,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass',
+  password: process.env.PG_PASSWORD || '',
   max: 5,
 });
 
diff --git a/scripts/supplier-mfr-bulk-push.js b/scripts/supplier-mfr-bulk-push.js
index f55949ad..0b075b96 100644
--- a/scripts/supplier-mfr-bulk-push.js
+++ b/scripts/supplier-mfr-bulk-push.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/scripts/surface-stick-backfill.js b/scripts/surface-stick-backfill.js
index 55c7827e..e99ca5f2 100644
--- a/scripts/surface-stick-backfill.js
+++ b/scripts/surface-stick-backfill.js
@@ -11,7 +11,7 @@ const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 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';
+const PG_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 function shopifyGet(path) {
   return new Promise((resolve, reject) => {
diff --git a/scripts/swatch-spin-generator.js b/scripts/swatch-spin-generator.js
index f3793b3f..5cd5e940 100644
--- a/scripts/swatch-spin-generator.js
+++ b/scripts/swatch-spin-generator.js
@@ -25,7 +25,7 @@ const http = require('http');
 const { Client } = require('pg');
 
 // ─── Configuration ───────────────────────────────────────────────────────────
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const OUTPUT_DIR = '/root/Projects/Designer-Wallcoverings/room-settings/justindavid/swatches';
 const PUBLIC_URL_BASE = 'http://45.61.58.125/room-settings/justindavid/swatches';
 
diff --git a/scripts/sync-shopify-to-postgres.js b/scripts/sync-shopify-to-postgres.js
index 5e57be01..ee2765b2 100644
--- a/scripts/sync-shopify-to-postgres.js
+++ b/scripts/sync-shopify-to-postgres.js
@@ -12,7 +12,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox';
diff --git a/scripts/texture-repeat-classifier.js b/scripts/texture-repeat-classifier.js
index aacaee64..271daef7 100644
--- a/scripts/texture-repeat-classifier.js
+++ b/scripts/texture-repeat-classifier.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
 const https = require('https');
 const http = require('http');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/thibaut-master-products.js b/scripts/thibaut-master-products.js
index 0a9f7847..78fea18b 100644
--- a/scripts/thibaut-master-products.js
+++ b/scripts/thibaut-master-products.js
@@ -4,7 +4,7 @@ const app = express();
 const PORT = 9660;
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Basic auth
diff --git a/scripts/thibaut-scrape-missing.js b/scripts/thibaut-scrape-missing.js
index ab856461..71bb0a52 100644
--- a/scripts/thibaut-scrape-missing.js
+++ b/scripts/thibaut-scrape-missing.js
@@ -14,7 +14,7 @@ const { Pool } = require('pg');
 const fs = require('fs');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const BASE_URL = 'https://www.thibautdesign.com/products/wallcoverings';
diff --git a/scripts/thibaut-scrape-viewer.js b/scripts/thibaut-scrape-viewer.js
index faa0bc3e..936f70f9 100644
--- a/scripts/thibaut-scrape-viewer.js
+++ b/scripts/thibaut-scrape-viewer.js
@@ -5,7 +5,7 @@ const fs = require('fs');
 const app = express();
 const PORT = 9661;
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 app.get('/api/stats', async (req, res) => {
diff --git a/scripts/vendor-monthly/shopify-sync.js b/scripts/vendor-monthly/shopify-sync.js
index 8dbb4c7a..5859ab8f 100644
--- a/scripts/vendor-monthly/shopify-sync.js
+++ b/scripts/vendor-monthly/shopify-sync.js
@@ -17,7 +17,7 @@ const { Pool } = require('pg');
 const fs = require('fs');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Shopify GraphQL configuration
diff --git a/shopify/scripts/apex-repeat-push.js b/shopify/scripts/apex-repeat-push.js
index 6c10bd6f..56654eb5 100644
--- a/shopify/scripts/apex-repeat-push.js
+++ b/shopify/scripts/apex-repeat-push.js
@@ -7,7 +7,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const MUTATION = `mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
diff --git a/shopify/scripts/arte-dashboard/arte-catalog-crawler.js b/shopify/scripts/arte-dashboard/arte-catalog-crawler.js
index 9ae38cbd..4280d43b 100644
--- a/shopify/scripts/arte-dashboard/arte-catalog-crawler.js
+++ b/shopify/scripts/arte-dashboard/arte-catalog-crawler.js
@@ -19,7 +19,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Initialize database table
diff --git a/shopify/scripts/arte-dashboard/bulk-title-updater.js b/shopify/scripts/arte-dashboard/bulk-title-updater.js
index d2755ef5..2e7288c3 100755
--- a/shopify/scripts/arte-dashboard/bulk-title-updater.js
+++ b/shopify/scripts/arte-dashboard/bulk-title-updater.js
@@ -12,7 +12,7 @@ const { Pool } = require('pg');
 const fetch = require('node-fetch');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const DASHBOARD_URL = 'http://45.61.58.125:9955';
diff --git a/shopify/scripts/arte-dashboard/crawl-all-arte.js b/shopify/scripts/arte-dashboard/crawl-all-arte.js
index 4f4fadbe..e615b34b 100644
--- a/shopify/scripts/arte-dashboard/crawl-all-arte.js
+++ b/shopify/scripts/arte-dashboard/crawl-all-arte.js
@@ -12,7 +12,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 let totalSaved = 0;
diff --git a/shopify/scripts/arte-dashboard/enrich-width.js b/shopify/scripts/arte-dashboard/enrich-width.js
index 55ee2deb..d3824975 100644
--- a/shopify/scripts/arte-dashboard/enrich-width.js
+++ b/shopify/scripts/arte-dashboard/enrich-width.js
@@ -15,7 +15,7 @@ const { Pool } = require('pg');
 const fs = require('fs');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const args = process.argv.slice(2);
diff --git a/shopify/scripts/arte-dashboard/fast-fix.js b/shopify/scripts/arte-dashboard/fast-fix.js
index e7eaa320..0a32e8ea 100644
--- a/shopify/scripts/arte-dashboard/fast-fix.js
+++ b/shopify/scripts/arte-dashboard/fast-fix.js
@@ -1,7 +1,7 @@
 const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 (async () => {
   console.log('=== Fast Arte Image Fix ===');
diff --git a/shopify/scripts/arte-dashboard/fetch-arte-packshots.js b/shopify/scripts/arte-dashboard/fetch-arte-packshots.js
index 4a149091..93542bff 100644
--- a/shopify/scripts/arte-dashboard/fetch-arte-packshots.js
+++ b/shopify/scripts/arte-dashboard/fetch-arte-packshots.js
@@ -13,7 +13,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Extract images from Arte colorway page
diff --git a/shopify/scripts/arte-dashboard/fetch-missing-skus.js b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
index 2f0b44d9..dc107e8e 100644
--- a/shopify/scripts/arte-dashboard/fetch-missing-skus.js
+++ b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
@@ -13,7 +13,7 @@ const { Pool } = require('pg');
 const fs = require('fs');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Shopify API
diff --git a/shopify/scripts/arte-dashboard/fetch-packshots-robust.js b/shopify/scripts/arte-dashboard/fetch-packshots-robust.js
index 30043885..d4e2e24f 100644
--- a/shopify/scripts/arte-dashboard/fetch-packshots-robust.js
+++ b/shopify/scripts/arte-dashboard/fetch-packshots-robust.js
@@ -8,7 +8,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 function fetch(url) {
diff --git a/shopify/scripts/arte-dashboard/fix-all-arte-images.js b/shopify/scripts/arte-dashboard/fix-all-arte-images.js
index 5d09d5b7..00a3bc06 100644
--- a/shopify/scripts/arte-dashboard/fix-all-arte-images.js
+++ b/shopify/scripts/arte-dashboard/fix-all-arte-images.js
@@ -2,7 +2,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function scrapePatternImages(page, patternName, skus) {
diff --git a/shopify/scripts/arte-dashboard/fix-all-colorway-images.js b/shopify/scripts/arte-dashboard/fix-all-colorway-images.js
index 918c7b4e..6c1cfab3 100644
--- a/shopify/scripts/arte-dashboard/fix-all-colorway-images.js
+++ b/shopify/scripts/arte-dashboard/fix-all-colorway-images.js
@@ -13,7 +13,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Fetch URL content
diff --git a/shopify/scripts/arte-dashboard/fix-all-images.js b/shopify/scripts/arte-dashboard/fix-all-images.js
index 700cac80..fcbbf271 100644
--- a/shopify/scripts/arte-dashboard/fix-all-images.js
+++ b/shopify/scripts/arte-dashboard/fix-all-images.js
@@ -1,7 +1,7 @@
 const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 (async () => {
   console.log('=== Arte Image Fix - Packshot + Roomshot ===');
diff --git a/shopify/scripts/arte-dashboard/fix-arte-images-v2.js b/shopify/scripts/arte-dashboard/fix-arte-images-v2.js
index 2086a96e..40533c2f 100644
--- a/shopify/scripts/arte-dashboard/fix-arte-images-v2.js
+++ b/shopify/scripts/arte-dashboard/fix-arte-images-v2.js
@@ -2,7 +2,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function getImageForSku(page, sku) {
diff --git a/shopify/scripts/arte-dashboard/fix-arte-images-v3.js b/shopify/scripts/arte-dashboard/fix-arte-images-v3.js
index a6faf4d9..38b63bb6 100644
--- a/shopify/scripts/arte-dashboard/fix-arte-images-v3.js
+++ b/shopify/scripts/arte-dashboard/fix-arte-images-v3.js
@@ -2,7 +2,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function getImageForSku(page, sku, productUrl) {
diff --git a/shopify/scripts/arte-dashboard/fix-arte-images-v4.js b/shopify/scripts/arte-dashboard/fix-arte-images-v4.js
index cbf608d5..b7a284c2 100644
--- a/shopify/scripts/arte-dashboard/fix-arte-images-v4.js
+++ b/shopify/scripts/arte-dashboard/fix-arte-images-v4.js
@@ -2,7 +2,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function getImageForSku(page, sku, productUrl) {
diff --git a/shopify/scripts/arte-dashboard/fix-arte-images.js b/shopify/scripts/arte-dashboard/fix-arte-images.js
index 47e402a0..3c0edfa8 100644
--- a/shopify/scripts/arte-dashboard/fix-arte-images.js
+++ b/shopify/scripts/arte-dashboard/fix-arte-images.js
@@ -13,7 +13,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Extract packshot and roomshot URLs from a colorway page
diff --git a/shopify/scripts/arte-dashboard/populate-mapping.js b/shopify/scripts/arte-dashboard/populate-mapping.js
index adf65241..806832ce 100644
--- a/shopify/scripts/arte-dashboard/populate-mapping.js
+++ b/shopify/scripts/arte-dashboard/populate-mapping.js
@@ -6,7 +6,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/shopify/scripts/arte-dashboard/scrape-batouri-colors.js b/shopify/scripts/arte-dashboard/scrape-batouri-colors.js
index b53f72c4..1b697598 100644
--- a/shopify/scripts/arte-dashboard/scrape-batouri-colors.js
+++ b/shopify/scripts/arte-dashboard/scrape-batouri-colors.js
@@ -3,7 +3,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function sleep(ms) {
diff --git a/shopify/scripts/arte-dashboard/server.js b/shopify/scripts/arte-dashboard/server.js
index 364dcabd..0522c86a 100644
--- a/shopify/scripts/arte-dashboard/server.js
+++ b/shopify/scripts/arte-dashboard/server.js
@@ -28,7 +28,7 @@ const API_VERSION = '2024-01';
 
 // PostgreSQL
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Extract MFR SKU from variant SKU (fallback)
diff --git a/shopify/scripts/arte-dashboard/test-arte-contract-crawl.js b/shopify/scripts/arte-dashboard/test-arte-contract-crawl.js
index 504f3081..c2005e83 100644
--- a/shopify/scripts/arte-dashboard/test-arte-contract-crawl.js
+++ b/shopify/scripts/arte-dashboard/test-arte-contract-crawl.js
@@ -7,7 +7,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function sleep(ms) {
diff --git a/shopify/scripts/arte-dashboard/test-extraction.js b/shopify/scripts/arte-dashboard/test-extraction.js
index 86ae0962..b01dba83 100644
--- a/shopify/scripts/arte-dashboard/test-extraction.js
+++ b/shopify/scripts/arte-dashboard/test-extraction.js
@@ -7,7 +7,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function testExtraction() {
diff --git a/shopify/scripts/arte-dashboard/update-all-packshots.js b/shopify/scripts/arte-dashboard/update-all-packshots.js
index e3185da0..1cb5c40b 100644
--- a/shopify/scripts/arte-dashboard/update-all-packshots.js
+++ b/shopify/scripts/arte-dashboard/update-all-packshots.js
@@ -10,7 +10,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Fetch HTML content from URL
diff --git a/shopify/scripts/arte-dashboard/update-bayuda.js b/shopify/scripts/arte-dashboard/update-bayuda.js
index 3cb7d467..db8eb046 100644
--- a/shopify/scripts/arte-dashboard/update-bayuda.js
+++ b/shopify/scripts/arte-dashboard/update-bayuda.js
@@ -3,7 +3,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function updateBayuda() {
diff --git a/shopify/scripts/arte-dashboard/update-tatami.js b/shopify/scripts/arte-dashboard/update-tatami.js
index 21fafac2..0a1c672c 100644
--- a/shopify/scripts/arte-dashboard/update-tatami.js
+++ b/shopify/scripts/arte-dashboard/update-tatami.js
@@ -3,7 +3,7 @@ const { chromium } = require('playwright');
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 async function updateTatami() {
diff --git a/shopify/scripts/arte-update-mfr-sku.js b/shopify/scripts/arte-update-mfr-sku.js
index 500dd24a..5a8c99c9 100644
--- a/shopify/scripts/arte-update-mfr-sku.js
+++ b/shopify/scripts/arte-update-mfr-sku.js
@@ -19,7 +19,7 @@ const API_VERSION = '2024-01';
 
 // PostgreSQL
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Initialize table
diff --git a/shopify/scripts/assign-elitis-dw-skus.js b/shopify/scripts/assign-elitis-dw-skus.js
index cceb1c11..c27a2e36 100644
--- a/shopify/scripts/assign-elitis-dw-skus.js
+++ b/shopify/scripts/assign-elitis-dw-skus.js
@@ -9,7 +9,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const VENDOR_PREFIX = 'DWEL';
diff --git a/shopify/scripts/batch-room-settings/batch-room-generator.js b/shopify/scripts/batch-room-settings/batch-room-generator.js
index c1795edb..53bf4ef6 100644
--- a/shopify/scripts/batch-room-settings/batch-room-generator.js
+++ b/shopify/scripts/batch-room-settings/batch-room-generator.js
@@ -37,7 +37,7 @@ const COMMERCIAL_PRODUCT_TYPES = new Set([
 ]);
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Parse CLI args
diff --git a/shopify/scripts/bespoke-updater/server.js b/shopify/scripts/bespoke-updater/server.js
index 8d487f5d..2dbe27ac 100644
--- a/shopify/scripts/bespoke-updater/server.js
+++ b/shopify/scripts/bespoke-updater/server.js
@@ -40,7 +40,7 @@ const pool = new Pool({
   port: 5432,
   database: 'dw_unified',
   user: 'dw_admin',
-  password: 'DW2024SecurePass'
+  password: process.env.PG_PASSWORD || ''
 });
 
 // Basic auth middleware
diff --git a/shopify/scripts/classify-texture-pattern.js b/shopify/scripts/classify-texture-pattern.js
index 83e2397c..b4f4bfcf 100644
--- a/shopify/scripts/classify-texture-pattern.js
+++ b/shopify/scripts/classify-texture-pattern.js
@@ -6,7 +6,7 @@
 
 const { Pool } = require('pg');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const GEMINI_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
 
diff --git a/shopify/scripts/gemini-catalog-tagger.js b/shopify/scripts/gemini-catalog-tagger.js
index ef355505..13eb0db7 100644
--- a/shopify/scripts/gemini-catalog-tagger.js
+++ b/shopify/scripts/gemini-catalog-tagger.js
@@ -23,7 +23,7 @@ const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemi
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
   max: 3,
 });
 
diff --git a/shopify/scripts/gemini-tag-engine/index.js b/shopify/scripts/gemini-tag-engine/index.js
index 6239f5f2..bb33d4a9 100644
--- a/shopify/scripts/gemini-tag-engine/index.js
+++ b/shopify/scripts/gemini-tag-engine/index.js
@@ -24,7 +24,7 @@ const SHOPIFY_API_VERSION = '2024-10';
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 const RATE_LIMIT_MS = 1100; // 1.1 sec between requests (safe for 15 RPM)
 const LOG_EVERY = 25;       // Log progress every N products
diff --git a/shopify/scripts/hollywood-tag-enrichment.js b/shopify/scripts/hollywood-tag-enrichment.js
index 7e26dd86..11eb7812 100644
--- a/shopify/scripts/hollywood-tag-enrichment.js
+++ b/shopify/scripts/hollywood-tag-enrichment.js
@@ -15,7 +15,7 @@ const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 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';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 
 // Design style mapping from pattern names
 const PATTERN_STYLE_MAP = {
diff --git a/shopify/scripts/interior-design-tagger.js b/shopify/scripts/interior-design-tagger.js
index 99decf3c..d734162e 100644
--- a/shopify/scripts/interior-design-tagger.js
+++ b/shopify/scripts/interior-design-tagger.js
@@ -27,7 +27,7 @@ const API_VERSION = '2024-10';
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const GEMINI_DELAY_MS = 1100;  // ~1 req/sec
diff --git a/shopify/scripts/koroseal-batch-cron.js b/shopify/scripts/koroseal-batch-cron.js
index 24753bf4..4500c824 100644
--- a/shopify/scripts/koroseal-batch-cron.js
+++ b/shopify/scripts/koroseal-batch-cron.js
@@ -23,7 +23,7 @@ const CRON_LOG_MD = '/root/Projects/Designer-Wallcoverings/shopify/scripts/cron-
 
 // PostgreSQL
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Initialize cron_job_logs table
diff --git a/shopify/scripts/la-walls-image-sync.js b/shopify/scripts/la-walls-image-sync.js
index b8b7017a..5bb49217 100644
--- a/shopify/scripts/la-walls-image-sync.js
+++ b/shopify/scripts/la-walls-image-sync.js
@@ -8,7 +8,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/shopify/scripts/paul-montgomery-image-sync.js b/shopify/scripts/paul-montgomery-image-sync.js
index fe78871e..fda0ad27 100644
--- a/shopify/scripts/paul-montgomery-image-sync.js
+++ b/shopify/scripts/paul-montgomery-image-sync.js
@@ -21,7 +21,7 @@ const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/2024-10/graphql.json`;
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const VENDORS = [
diff --git a/shopify/scripts/prl-ai-enrich.js b/shopify/scripts/prl-ai-enrich.js
index 935556f1..bf290fd5 100644
--- a/shopify/scripts/prl-ai-enrich.js
+++ b/shopify/scripts/prl-ai-enrich.js
@@ -11,7 +11,7 @@ const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GE
 const BATCH_LIMIT = 100;
 const DELAY_MS = 500;
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 const PROMPT = `You are an interior design AI analyst for commercial wallcoverings.
 Analyze this wallcovering product image and return ONLY valid JSON (no markdown, no backticks):
diff --git a/shopify/scripts/push-color-metafields.js b/shopify/scripts/push-color-metafields.js
index 27dbb520..c3b6df28 100644
--- a/shopify/scripts/push-color-metafields.js
+++ b/shopify/scripts/push-color-metafields.js
@@ -13,7 +13,7 @@
 const { Pool } = require('pg');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
 });
 
 const BATCH_SIZE = 12; // Shopify metafieldsSet limit = 25 inputs; 12 products × 2 fields = 24
diff --git a/shopify/scripts/push-fire-rating-metafields.js b/shopify/scripts/push-fire-rating-metafields.js
index 6bf7bd91..b599427d 100644
--- a/shopify/scripts/push-fire-rating-metafields.js
+++ b/shopify/scripts/push-fire-rating-metafields.js
@@ -10,7 +10,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
diff --git a/shopify/scripts/push-pattern-repeat-metafields.js b/shopify/scripts/push-pattern-repeat-metafields.js
index 3a6f50cf..9ba2c948 100644
--- a/shopify/scripts/push-pattern-repeat-metafields.js
+++ b/shopify/scripts/push-pattern-repeat-metafields.js
@@ -17,7 +17,7 @@ const fs = require('fs');
 const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
 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 PG_URI = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const BATCH_SIZE = 25;
 const DELAY_MS = 500;
 const EXCLUDED_VENDORS = ['phillip_jeffries', 'cowtan_tout', 'colefax_fowler'];
diff --git a/shopify/scripts/romo-drilldown.js b/shopify/scripts/romo-drilldown.js
index 0ec6296a..f562e865 100644
--- a/shopify/scripts/romo-drilldown.js
+++ b/shopify/scripts/romo-drilldown.js
@@ -3,7 +3,7 @@ const { chromium } = require(path.join('/root/Projects/Designer-Wallcoverings/DW
 const { Pool } = require(path.join('/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/pg'));
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const BATCH_SIZE = 50;
diff --git a/shopify/scripts/schumacher-import.js b/shopify/scripts/schumacher-import.js
index fd5fe0ce..70df2620 100644
--- a/shopify/scripts/schumacher-import.js
+++ b/shopify/scripts/schumacher-import.js
@@ -2,7 +2,7 @@ const https = require('https');
 const { Pool } = require(require('path').join('/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/pg'));
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const API_BASE = 'https://api.schumacher.com';
diff --git a/shopify/scripts/schumacher-price-scraper.js b/shopify/scripts/schumacher-price-scraper.js
index 63fef822..f704057f 100644
--- a/shopify/scripts/schumacher-price-scraper.js
+++ b/shopify/scripts/schumacher-price-scraper.js
@@ -33,7 +33,7 @@ const CONFIG = {
     'https://schumacher.com/product/{sku}',
   ],
 
-  DB_CONNECTION: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+  DB_CONNECTION: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'),
 
   RATE_LIMIT_MS: 1500,          // 1.5 seconds between requests
   LOGIN_WAIT_MS: 5000,          // Wait after login
diff --git a/shopify/scripts/set-texture-repeat-zero.js b/shopify/scripts/set-texture-repeat-zero.js
index b1d900d4..a3da44b7 100644
--- a/shopify/scripts/set-texture-repeat-zero.js
+++ b/shopify/scripts/set-texture-repeat-zero.js
@@ -14,7 +14,7 @@ const { Pool } = require('pg');
 const https = require('https');
 const { trackGeminiCall } = require('/root/DW-Agents/shared/gemini-cost-tracker');
 
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 
 const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
 const GEMINI_MODEL = 'gemini-2.0-flash';
diff --git a/shopify/scripts/sync-shopify-products.js b/shopify/scripts/sync-shopify-products.js
index 77beee01..94d9dc09 100644
--- a/shopify/scripts/sync-shopify-products.js
+++ b/shopify/scripts/sync-shopify-products.js
@@ -17,7 +17,7 @@ const { Pool } = require('pg');
 const fetch = require('node-fetch');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
diff --git a/shopify/scripts/texture-repeat-fixer.js b/shopify/scripts/texture-repeat-fixer.js
index b43d846c..f3377cb5 100644
--- a/shopify/scripts/texture-repeat-fixer.js
+++ b/shopify/scripts/texture-repeat-fixer.js
@@ -15,7 +15,7 @@ const { Pool } = require('pg');
 const https = require('https');
 const http = require('http');
 
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 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/shopify/scripts/thibaut-repeat-scraper.js b/shopify/scripts/thibaut-repeat-scraper.js
index fca27ca7..ae3205be 100644
--- a/shopify/scripts/thibaut-repeat-scraper.js
+++ b/shopify/scripts/thibaut-repeat-scraper.js
@@ -11,7 +11,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/shopify/scripts/update-all-malibu-architectural.ts b/shopify/scripts/update-all-malibu-architectural.ts
index 16348f47..3f8e717f 100644
--- a/shopify/scripts/update-all-malibu-architectural.ts
+++ b/shopify/scripts/update-all-malibu-architectural.ts
@@ -19,7 +19,7 @@ import { Pool } from 'pg';
 
 // PostgreSQL connection for tracking
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Paper-related tags to remove from Type 2 Vinyl products
diff --git a/shopify/scripts/wolf-gordon-shopify-push.js b/shopify/scripts/wolf-gordon-shopify-push.js
index bf3d2f3d..64e2300d 100644
--- a/shopify/scripts/wolf-gordon-shopify-push.js
+++ b/shopify/scripts/wolf-gordon-shopify-push.js
@@ -28,7 +28,7 @@ const { Pool } = require('pg');
 const https = require('https');
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 const SOURCE_AGENT = 'wolf-gordon-p8-push';
diff --git a/shopify/scripts/zoffany-ai-enrich-push.js b/shopify/scripts/zoffany-ai-enrich-push.js
index d225e9d4..8aa84c9b 100644
--- a/shopify/scripts/zoffany-ai-enrich-push.js
+++ b/shopify/scripts/zoffany-ai-enrich-push.js
@@ -16,7 +16,7 @@ const DELAY_MS = 800; // safe under 2/s REST limit with margin
 const MAX_RETRIES = 3;
 
 const pool = new Pool({
-  connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+  connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
 });
 
 // Known color words to strip from existing tags
diff --git a/shopify/scripts/zoffany-full-monty-20.js b/shopify/scripts/zoffany-full-monty-20.js
index 1dd23afd..ce600b95 100644
--- a/shopify/scripts/zoffany-full-monty-20.js
+++ b/shopify/scripts/zoffany-full-monty-20.js
@@ -28,7 +28,7 @@ const path = require('path');
 const { execFileSync } = require('child_process');
 
 // ─── Configuration ──────────────────────────────────────────────────────────
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
 const API_VERSION = '2024-10';
diff --git a/thibaut-repeat-run.js b/thibaut-repeat-run.js
index 90946069..e0610db5 100644
--- a/thibaut-repeat-run.js
+++ b/thibaut-repeat-run.js
@@ -7,7 +7,7 @@
  * Usage: node thibaut-repeat-run.js [--limit=N] [--dry-run]
  */
 const { Pool } = require('pg');
-const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
+const pool = new Pool({ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified') });
 const BATCH = parseInt(process.argv.find(a => a.startsWith('--limit='))?.split('=')[1] || '500', 10);
 const DRY = process.argv.includes('--dry-run');
 const sleep = (ms) => new Promise(r => setTimeout(r, ms));

← 3b1cfa98 Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade  ·  back to Designer Wallcoverings  ·  security: strip hardcoded dw_admin DSN password -> env-first b3de17d1 →