← back to Designer Wallcoverings
Pierre Frey LAUNCH via cadence: vendors.js sampleOnly entry + activate-gated quote-only bypass (quotes tag -> activate w/ null price) + dedicated drip wrapper; first 15 promoted live (ACTIVE 3->18)
b10f1ac84621576c19aec28aef525a63ed1e2a99 · 2026-07-07 14:42:18 -0700 · steve@designerwallcoverings.com
Files touched
M shopify/scripts/cadence/activate-gated.jsA shopify/scripts/cadence/pierre-frey-activate-drip.shM shopify/scripts/cadence/vendors.js
Diff
commit b10f1ac84621576c19aec28aef525a63ed1e2a99
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Tue Jul 7 14:42:18 2026 -0700
Pierre Frey LAUNCH via cadence: vendors.js sampleOnly entry + activate-gated quote-only bypass (quotes tag -> activate w/ null price) + dedicated drip wrapper; first 15 promoted live (ACTIVE 3->18)
---
shopify/scripts/cadence/activate-gated.js | 11 ++++++++---
shopify/scripts/cadence/pierre-frey-activate-drip.sh | 17 +++++++++++++++++
shopify/scripts/cadence/vendors.js | 14 ++++++++++++++
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/shopify/scripts/cadence/activate-gated.js b/shopify/scripts/cadence/activate-gated.js
index 581c3cba..bd1247d8 100644
--- a/shopify/scripts/cadence/activate-gated.js
+++ b/shopify/scripts/cadence/activate-gated.js
@@ -145,7 +145,7 @@ function candidates(table, limit) {
}
const STATUS_Q = `query($ids:[ID!]!){nodes(ids:$ids){... on Product{
- id status title descriptionHtml
+ id status title descriptionHtml tags
images(first:50){nodes{url}}
variants(first:10){nodes{price sku}}
metafields(first:60){nodes{namespace key value}}
@@ -181,9 +181,14 @@ const SL = 'single_line_text_field';
if (!n) continue;
if (n.status === 'ACTIVE') { alreadyActive++; continue; }
if (n.status !== 'DRAFT') { skippedArchived++; continue; } // ARCHIVED → leave
- // PRICE gate on the live product: a real per-unit price > the $4.25 sample
+ // PRICE gate on the live product: a real per-unit price > the $4.25 sample.
+ // EXCEPTION — quote-only lines (Pierre Frey, Dedar, …) legitimately have NO roll
+ // price (only the $4.25 sample) and activate quote-only: NULL price + `quotes` tag.
+ // They carry the `quotes` tag, so bypass the real-price requirement for them; ALL
+ // other gates (specs + real description + image + sample variant) still apply.
const hasRealPrice = (n.variants?.nodes || []).some(v => parseFloat(v.price) > 4.25);
- if (!hasRealPrice) { skippedArchived++; continue; }
+ const isQuoteOnly = (n.tags || []).includes('quotes');
+ if (!hasRealPrice && !isQuoteOnly) { skippedArchived++; continue; }
// FULL ACTIVATION GATE (Steve 2026-06-20): specs + real description + ALL
// vendor images + title guards + sample variant. Built from the LIVE product
// (images/metafields/body) cross-checked against the vendor row's all_images.
diff --git a/shopify/scripts/cadence/pierre-frey-activate-drip.sh b/shopify/scripts/cadence/pierre-frey-activate-drip.sh
new file mode 100755
index 00000000..b16f4a1b
--- /dev/null
+++ b/shopify/scripts/cadence/pierre-frey-activate-drip.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+# Pierre Frey quote-only LAUNCH drip (Steve "launch on the cadence schedule" 2026-07-07).
+# Promotes gate-passing DRAFT Pierre Frey products (quote-only: $4.25 sample + NULL price +
+# `quotes` tag) to ACTIVE, in bounded batches, via the shared activate-gated.js gate.
+# The gate (specs + real description + image + sample variant) still applies; the quote-only
+# `quotes`-tag bypass of the real-price requirement is what lets these activate. Un-ready
+# (e.g. enrichment-incomplete) rows are left DRAFT and retried next tick.
+set -u
+# launchd runs with a minimal PATH — node (/usr/local/bin) + psql (homebrew) aren't on it.
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH"
+SHOP="$HOME/Projects/Designer-Wallcoverings/shopify"
+cd "$SHOP" || exit 1
+LOG="/tmp/dw-pierre-frey-activate.log"
+LIMIT="${PF_ACTIVATE_LIMIT:-60}"
+echo "=== $(date) pierre-frey activate drip (limit $LIMIT) ===" >> "$LOG"
+node scripts/cadence/activate-gated.js --vendor "Pierre Frey" --limit "$LIMIT" --commit >> "$LOG" 2>&1
+echo "exit $? at $(date)" >> "$LOG"
diff --git a/shopify/scripts/cadence/vendors.js b/shopify/scripts/cadence/vendors.js
index c6ff4e8e..713fdf39 100644
--- a/shopify/scripts/cadence/vendors.js
+++ b/shopify/scripts/cadence/vendors.js
@@ -186,4 +186,18 @@ module.exports = {
imageOverride: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_3266367c-1ae8-48d5-8b02-d033802bee77.png?v=1722462657',
soldBy: 'Sample', productType: 'Wallcovering',
note: 'DRAFT-only drip, held unpriced until PJ cost confirmed (Steve 2026-06-30). NEVER pass --activate for PJ. Logo image only; dedup-clean net-new in pj_draft_catalog (DWPJ-14511+).' },
+
+ // ── Pierre Frey — quote-only samples LAUNCH via cadence drip (Steve "launch" 2026-07-07) ──────
+ // Full pierrefrey.com/en/wallpapers scrape (1,161 SKUs, DWPF-, its own pierre_frey_catalog table)
+ // imported as DRAFT quote-only. UNLIKE PJ (draftOnly, held), Pierre Frey is CLEARED TO ACTIVATE:
+ // it is quote-only (no cost — pierrefrey.com shows no price), so it activates with a $4.25 Sample
+ // variant + NULL product price + `quotes` tag (the price-agnostic validate-before-activate gate
+ // permits null price; it requires specs+description+image+sample only). Activation drips via a
+ // dedicated scheduled job (com.steve.dw-pierre-frey-activate → activate-gated.js --vendor "Pierre
+ // Frey" --limit N --commit); each tick promotes whatever now passes the gate (real ai_description
+ // from enrichment clears the "description too short" check). sampleOnly:true keeps it OUT of the
+ // priced-import cadence and HELD from the sampleonly IMPORT drip by default — this entry is used
+ // by activate-gated.js (which reads the same vendors.js) to recognize + promote the drafts.
+ 'Pierre Frey': { table: 'pierre_frey_catalog', sampleOnly: true, soldBy: 'Sample', productType: 'Wallcovering',
+ note: 'Quote-only samples LAUNCH (Steve 2026-07-07). No cost (pierrefrey.com shows no price) → activates quote-only: $4.25 Sample + NULL price + quotes tag. Drip-activated via com.steve.dw-pierre-frey-activate; held from the sampleonly IMPORT drip (already imported as DRAFT).' },
};
← c428c621 auto-save: 2026-07-07T14:31:09 (6 files) — DW-Programming/Im
·
back to Designer Wallcoverings
·
pierre-frey import: deLabel strips leading Wallcovering pref 89a20838 →