← back to York Reprice 2026 08
Onboard 12 York 'New' items as DRAFT (DWJS-92941..92952) — TK-10031
d25b8507f467db21f36e60019e4cc93aaa255e45 · 2026-07-30 12:14:03 -0700 · Steve Abrams
- Diagnosed the 17 'onboard-ready': brewster_catalog.image_url is CROSS-LINKED (wrong image per SKU) for all 17
(incl. a butterfly image on Abilene-Ikat = settlement risk). Recovered correct CDN URLs by name-slug match
for 12; visually inspected all 12 = settlement-clean + name-correct. 5 have no findable correct image -> held.
- Collision-safe SKU alloc (start DWJS-92941; true max live = 92940; the stock builder only scanned the phase-1
632 and would collide). Separate -12 pipeline files so the live 735 queue + held-lists are never clobbered.
- Created 12 DRAFT, 0 err, verified 12/12 (DRAFT + correct image + mfr metafield + collections). Publish DRAFT->ACTIVE
remains a separate gated step. Added the 5 image-corrupt SKUs to onboard-image-held.json.
Files touched
A build-onboard-payloads-12.mjsA build-rows-17.mjsM data/onboard-image-held.jsonA data/onboard-payloads-12-enriched.jsonA data/onboard-payloads-12.jsonA data/onboard-rows-12.jsonA data/onboard-rows-17.jsonA enrich-onboard-12.pyA recover-images-17.mjs
Diff
commit d25b8507f467db21f36e60019e4cc93aaa255e45
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 30 12:14:03 2026 -0700
Onboard 12 York 'New' items as DRAFT (DWJS-92941..92952) — TK-10031
- Diagnosed the 17 'onboard-ready': brewster_catalog.image_url is CROSS-LINKED (wrong image per SKU) for all 17
(incl. a butterfly image on Abilene-Ikat = settlement risk). Recovered correct CDN URLs by name-slug match
for 12; visually inspected all 12 = settlement-clean + name-correct. 5 have no findable correct image -> held.
- Collision-safe SKU alloc (start DWJS-92941; true max live = 92940; the stock builder only scanned the phase-1
632 and would collide). Separate -12 pipeline files so the live 735 queue + held-lists are never clobbered.
- Created 12 DRAFT, 0 err, verified 12/12 (DRAFT + correct image + mfr metafield + collections). Publish DRAFT->ACTIVE
remains a separate gated step. Added the 5 image-corrupt SKUs to onboard-image-held.json.
---
build-onboard-payloads-12.mjs | 59 +++
build-rows-17.mjs | 42 ++
data/onboard-image-held.json | 25 ++
data/onboard-payloads-12-enriched.json | 1 +
data/onboard-payloads-12.json | 722 +++++++++++++++++++++++++++++++++
data/onboard-rows-12.json | 314 ++++++++++++++
data/onboard-rows-17.json | 456 +++++++++++++++++++++
enrich-onboard-12.py | 248 +++++++++++
recover-images-17.mjs | 33 ++
9 files changed, 1900 insertions(+)
diff --git a/build-onboard-payloads-12.mjs b/build-onboard-payloads-12.mjs
new file mode 100644
index 0000000..b071509
--- /dev/null
+++ b/build-onboard-payloads-12.mjs
@@ -0,0 +1,59 @@
+#!/usr/bin/env node
+// build-onboard-payloads-12.mjs — same proven logic as build-onboard-payloads.mjs, but:
+// • reads data/onboard-rows-12.json • writes data/onboard-payloads-12.json
+// • SKU allocation starts at DWJS-92941 (maxN=92940 = true max across live Shopify + both enriched files;
+// the original builder only scanned the phase-1 632 and would COLLIDE with the 735 batch's numbers).
+import fs from 'node:fs';
+const rows=JSON.parse(fs.readFileSync('data/onboard-rows-12.json','utf8'));
+const slug=s=>String(s||'').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'');
+const isNat=m=>/grasscloth|sisal|paperweave|paper weave|\bcork\b|\bhemp\b|\bjute\b|raffia|abaca|arrowroot/i.test(m||'');
+const map=r=> (r.us_map>0?r.us_map : (r.us_msrp>0?Math.round(r.us_msrp*75)/100 : null));
+let n=92941; // collision-safe start (verified true max DWJS = 92940)
+const payloads=[]; const skipped=[]; const skipReason={};
+for(const r of rows){
+ const pn=(r.pattern_name||'').trim(), cw=(r.colorway||'').trim();
+ if(!r.image_url){ skipped.push([r.export_sku,'no-image']); skipReason['no-image']=(skipReason['no-image']||0)+1; continue; }
+ if(!pn){ skipped.push([r.export_sku,'no-pattern-name']); skipReason['no-pattern-name']=(skipReason['no-pattern-name']||0)+1; continue; }
+ const nat=isNat(r.technical_material);
+ let price=null, optName=null, uom=null, min='1', step='1', pricedUom='Priced Per Single Roll';
+ if(nat){ price=r.roll_price_single; optName='Sold Per Single Roll'; uom='BLT'; min='2'; step='2'; }
+ else {
+ const u=(r.uom||'').toUpperCase();
+ if(u==='YD'){ price=map(r); optName='Sold By The Yard'; uom='YD'; min='1'; step='1'; pricedUom='Priced Per Yard'; }
+ else if(u==='EA'||u==='BDR'){ price=map(r); optName='Sold Each'; uom=u; min='1'; step='1'; pricedUom='Priced Each'; }
+ else { price=map(r); optName='Sold Per Single Roll'; uom='BLT'; min='2'; step='2'; }
+ }
+ const P=Number(price);
+ if(!(P>0) || !isFinite(P)){ skipped.push([r.export_sku,'no-price']); skipReason['no-price']=(skipReason['no-price']||0)+1; continue; }
+ const SKU=`DWJS-${n++}`;
+ const addCw = cw && !pn.toLowerCase().includes(cw.toLowerCase());
+ const title=`${pn}${addCw?' '+cw:''} | Jeffrey Stevens`;
+ const handle=slug(`${pn}-${cw}-wallpaper-${r.export_sku}`);
+ const mf={}; const put=(k,v)=>{ if(v!==null&&v!==undefined&&String(v).trim()!=='') mf[k]=String(v); };
+ put('custom.manufacturer_sku',r.export_sku); put('dwc.manufacturer_sku',r.export_sku);
+ put('custom.pattern_name',pn); put('custom.collection_name',r.book_name);
+ put('custom.brand_name',r.brand); put('custom.parent_brand',r.parent_brand);
+ put('custom.us_msrp',r.us_msrp); put('custom.wholesale_price',r.wholesale);
+ if(r.width_inches&&r.length_feet) put('global.width',`${r.width_inches}" x ${r.length_feet} ft`);
+ put('custom.width',r.width_inches); put('global.length',r.length_feet?`${r.length_feet} ft`:'');
+ put('global.repeat',r.pattern_repeat); put('custom.pattern_repeat',r.pattern_repeat);
+ put('global.MATCH',r.match_type); put('custom.match_type',r.match_type);
+ put('custom.backing',r.backing); put('specs.coverage',r.coverage);
+ put('specs.style',r.marketing_style); put('specs.pattern',r.marketing_pattern);
+ put('custom.color_family',r.color_family);
+ put('global.unit_of_measure',pricedUom);
+ put('global.v_prods_quantity_order_min',min); put('global.v_prods_quantity_order_units',step);
+ if(min==='2') put('global.packaged','Shipped in Doubles');
+ payloads.push({ mfr_sku:r.export_sku, title, handle, vendor:'Jeffrey Stevens', productType:'Wallcovering', status:'DRAFT',
+ descriptionHtml:r.dynamic_description||'',
+ options:[{name:'Size',values:['Sample',optName]}],
+ variants:[{sku:`${SKU}-Sample`,price:'4.25',option:'Sample',inventoryPolicy:'CONTINUE'},
+ {sku:SKU,price:P.toFixed(2),option:optName,inventoryPolicy:'CONTINUE'}],
+ image:r.image_url, metafields:mf, uom });
+}
+const seen=new Set();
+for(const p of payloads){ let h=p.handle,i=2; while(seen.has(h)){h=`${p.handle}-${i++}`;} p.handle=h; seen.add(h); }
+fs.writeFileSync('data/onboard-payloads-12.json',JSON.stringify(payloads,null,1));
+console.log(`built ${payloads.length} payloads | skipped ${skipped.length} ${JSON.stringify(skipReason)}`);
+console.log(` SKU ${payloads[0]?.variants[1].sku}..${payloads.at(-1)?.variants[1].sku} | all DRAFT+priced: ${payloads.every(p=>p.status==='DRAFT'&&+p.variants[1].price>0)}`);
+console.log('$0 (local)');
diff --git a/build-rows-17.mjs b/build-rows-17.mjs
new file mode 100644
index 0000000..b2946a2
--- /dev/null
+++ b/build-rows-17.mjs
@@ -0,0 +1,42 @@
+#!/usr/bin/env node
+// build-rows-17.mjs — pull the 17 clean onboard candidates from brewster_york_master (+ image) into
+// data/onboard-rows-17.json (exact phase1-enriched shape build-onboard-payloads expects). $0 local.
+import fs from 'node:fs'; import { execSync } from 'node:child_process';
+const cands = JSON.parse(fs.readFileSync('data-onboard17-candidates.json','utf8'));
+const skus = cands.map(c=>`'${String(c.mfr_sku).replace(/'/g,"''")}'`).join(',');
+const SEP=String.fromCharCode(31);
+const sql=`select concat_ws(chr(31),
+ upper(trim(bym.mfr_sku)), coalesce(bym.parent_brand,''), coalesce(bym.brand,''), coalesce(bym.pattern_name,''),
+ coalesce(bym.colorway,''), coalesce(bym.product_name,''), coalesce(bym.book_collection_name,''),
+ coalesce(bym.us_msrp::text,''), coalesce(bym.us_map::text,''), coalesce(bym.uom,''),
+ coalesce(bym.width_inches::text,''), coalesce(bym.length_feet::text,''), coalesce(bym.pattern_repeat,''),
+ coalesce(bym.match_type,''), coalesce(bym.technical_material,''), coalesce(bym.backing,''), coalesce(bym.coverage,''),
+ coalesce(bym.marketing_style,''), coalesce(bym.marketing_pattern,''), coalesce(bym.color_family,''),
+ coalesce(bym.wholesale::text,''), coalesce(bym.dynamic_description,''), coalesce(bym.roll_price_single::text,''),
+ coalesce(nullif(bc.image_url,''), nullif(yc.image_url,''), ''))
+ from brewster_york_master bym
+ left join brewster_catalog bc on upper(trim(bc.mfr_sku))=upper(trim(bym.mfr_sku))
+ left join york_catalog yc on upper(trim(yc.mfr_sku))=upper(trim(bym.mfr_sku))
+ where upper(trim(bym.mfr_sku)) in (${skus})`;
+fs.writeFileSync('/tmp/_rows17.sql',sql);
+const out=execSync(`PGPASSWORD=DW2024! /opt/homebrew/opt/postgresql@14/bin/psql -h 127.0.0.1 -U dw_admin -d dw_unified -tA -f /tmp/_rows17.sql`,{encoding:'utf8'}).trim();
+const num=x=>(x==null||x==='')?null:(isNaN(+x)?null:+x);
+const seen=new Set(); const rows=[];
+for(const line of out.split('\n').filter(Boolean)){
+ const c=line.split(SEP);
+ const sku=c[0]; if(seen.has(sku))continue; seen.add(sku); // brewster_york_master may have dup rows per SKU
+ rows.push({ export_sku:sku, parent_brand:c[1], brand:c[2], pattern_name:c[3], colorway:c[4], product_name:c[5],
+ book_name:c[6], us_msrp:num(c[7]), us_map:num(c[8]), uom:(c[9]||'').toUpperCase()||null,
+ width_inches:num(c[10]), length_feet:num(c[11]), pattern_repeat:c[12]||null, match_type:c[13]||null,
+ technical_material:c[14]||null, backing:c[15]||null, coverage:c[16]||null, marketing_style:c[17]||null,
+ marketing_pattern:c[18]||null, color_family:c[19]||null, wholesale:num(c[20]),
+ dynamic_description:c[21]||'', roll_price_single:num(c[22]), image_url:c[23]||null });
+}
+fs.writeFileSync('data/onboard-rows-17.json',JSON.stringify(rows,null,1));
+// completeness report
+const miss=k=>rows.filter(r=>!r[k]||(typeof r[k]==='string'&&!r[k].trim())).length;
+console.log(`rows: ${rows.length}/${cands.length}`);
+console.log(` missing image_url: ${miss('image_url')} | missing description: ${miss('dynamic_description')} | missing color_family: ${miss('color_family')}`);
+console.log(` missing price (no us_map AND no roll_single): ${rows.filter(r=>!(r.us_map>0)&&!(r.roll_price_single>0)).length}`);
+console.log(` missing width/length: ${rows.filter(r=>!r.width_inches||!r.length_feet).length} | missing uom: ${miss('uom')}`);
+console.log('$0 (local)');
diff --git a/data/onboard-image-held.json b/data/onboard-image-held.json
index c3c638f..93695bd 100644
--- a/data/onboard-image-held.json
+++ b/data/onboard-image-held.json
@@ -40,5 +40,30 @@
"title": "Romero Black | Jeffrey Stevens",
"image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0152981_romero-black-3d-geometric-wallpaper.jpeg",
"reason": "empty CDN image (HTTP 200, 0 bytes) — hold for image re-scrape"
+ },
+ {
+ "mfr_sku": "4147-27383",
+ "title": "Berkshire Butter Damask",
+ "reason": "brewster_catalog image cross-linked (shows marta-floral); no correct image in table (2026-07-30)"
+ },
+ {
+ "mfr_sku": "4147-27404",
+ "title": "Essex Wheat Geometric",
+ "reason": "image cross-linked (shows westley-plaid); no correct image in table"
+ },
+ {
+ "mfr_sku": "4148-27441",
+ "title": "Adavu Sage Damask",
+ "reason": "image cross-linked (shows glen-texture); no correct image in table"
+ },
+ {
+ "mfr_sku": "4148-27466",
+ "title": "Nabi Aqua Geometric",
+ "reason": "image cross-linked (shows hollyhock-floral); no correct image in table"
+ },
+ {
+ "mfr_sku": "4172-27486",
+ "title": "Navarres Stripe Charcoal Faux Linen",
+ "reason": "image cross-linked (shows salvo); no correct image in table"
}
]
\ No newline at end of file
diff --git a/data/onboard-payloads-12-enriched.json b/data/onboard-payloads-12-enriched.json
new file mode 100644
index 0000000..94a308d
--- /dev/null
+++ b/data/onboard-payloads-12-enriched.json
@@ -0,0 +1 @@
+[{"mfr_sku":"4147-27261","title":"Exhale Moss | Jeffrey Stevens","handle":"exhale-moss-wallpaper-4147-27261","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"A replica of high-end grasscloth, this design features wide bands, knotted details, and prominent raised ink stitching. Featured here in a blend of neutrals and cool greens. Exhale is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92941-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92941","price":"97.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0093554_exhale-moss-woven-faux-grasscloth-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4147-27261","dwc.manufacturer_sku":"4147-27261","custom.pattern_name":"Exhale","custom.collection_name":"Haberdashery","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"140","custom.wholesale_price":"70","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Modern","specs.pattern":"Faux Grasscloth","custom.color_family":"Greens","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#B7B49E","custom.color_1_percentage":19.9,"custom.color_2_hex":"#8B8D7D","custom.color_2_percentage":19.7,"custom.color_3_hex":"#ABAA95","custom.color_3_percentage":18.7,"custom.color_details":"[{\"name\":\"Tan\",\"hex\":\"#b7b49e\",\"pct\":19.9},{\"name\":\"Gray\",\"hex\":\"#8b8d7d\",\"pct\":19.7},{\"name\":\"Gray\",\"hex\":\"#abaa95\",\"pct\":18.7},{\"name\":\"Gray\",\"hex\":\"#999a88\",\"pct\":17.0},{\"name\":\"Gray\",\"hex\":\"#a1a08c\",\"pct\":16.2},{\"name\":\"Beige\",\"hex\":\"#cac7b3\",\"pct\":8.5}]","custom.color_hex":"#B7B49E","global.color_hex":"#B7B49E","custom.background_color":"Tan"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","green-wallpaper-collection","modern"],"tags":["A-Street Prints","Faux Grasscloth","Gray","Greens","Haberdashery","Jeffrey Stevens","Modern","Non Woven","Non-Woven","Pattern","Tan","USA","Wallcovering","color:Tan","display_variant"]},{"mfr_sku":"4147-27378","title":"Octavia Neutral | Jeffrey Stevens","handle":"octavia-neutral-wallpaper-4147-27378","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"This compelling wallpaper perfectly captures the look of artisan-made marbled paper in a scale that flatters any living space. Featured here in shades of grey, taupe, and cream. Octavia is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92942-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92942","price":"127.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0099291_octavia-neutral-marbled-ink-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4147-27378","dwc.manufacturer_sku":"4147-27378","custom.pattern_name":"Octavia","custom.collection_name":"Haberdashery","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"180","custom.wholesale_price":"90","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"25.2","custom.pattern_repeat":"25.2","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Eclectic","specs.pattern":"Abstract","custom.color_family":"Neutrals","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#958E84","custom.color_1_percentage":19.9,"custom.color_2_hex":"#FFFFFF","custom.color_2_percentage":18.7,"custom.color_3_hex":"#DCD7CC","custom.color_3_percentage":17.6,"custom.color_details":"[{\"name\":\"Gray\",\"hex\":\"#958e84\",\"pct\":19.9},{\"name\":\"White\",\"hex\":\"#ffffff\",\"pct\":18.7},{\"name\":\"Beige\",\"hex\":\"#dcd7cc\",\"pct\":17.6},{\"name\":\"Beige\",\"hex\":\"#c3beb3\",\"pct\":17.0},{\"name\":\"Tan\",\"hex\":\"#b4aea4\",\"pct\":16.8},{\"name\":\"Off-White\",\"hex\":\"#f4f0e7\",\"pct\":10.0}]","custom.color_hex":"#958E84","global.color_hex":"#958E84","custom.background_color":"Gray"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","warm-whites-ivory-1"],"tags":["A-Street Prints","Abstract","Beige","Eclectic","Gray","Haberdashery","Jeffrey Stevens","Neutrals","Non Woven","Non-Woven","Pattern","USA","Wallcovering","White","color:Gray","display_variant"]},{"mfr_sku":"4147-27384","title":"Westley Grey | Jeffrey Stevens","handle":"westley-grey-wallpaper-4147-27384","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"Plaid's comforting and classic sophistication is reimagined with a grand scale and playful palette. Seen here with cream and taupe accents against a grey foundation. Westley is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92943-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92943","price":"127.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0099333_westley-grey-plaid-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4147-27384","dwc.manufacturer_sku":"4147-27384","custom.pattern_name":"Westley","custom.collection_name":"Haberdashery","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"180","custom.wholesale_price":"90","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Modern","specs.pattern":"Plaids","custom.color_family":"Greys","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#979690","custom.color_1_percentage":25.3,"custom.color_2_hex":"#72736E","custom.color_2_percentage":20.5,"custom.color_3_hex":"#777773","custom.color_3_percentage":16.7,"custom.color_details":"[{\"name\":\"Gray\",\"hex\":\"#979690\",\"pct\":25.3},{\"name\":\"Brown\",\"hex\":\"#72736e\",\"pct\":20.5},{\"name\":\"Gray\",\"hex\":\"#777773\",\"pct\":16.7},{\"name\":\"Gray\",\"hex\":\"#a7a7a1\",\"pct\":15.8},{\"name\":\"Gray\",\"hex\":\"#878782\",\"pct\":11.7},{\"name\":\"Beige\",\"hex\":\"#c7c6c0\",\"pct\":10.0}]","custom.color_hex":"#979690","global.color_hex":"#979690","custom.background_color":"Gray"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","grey-silver","modern"],"tags":["A-Street Prints","Brown","Gray","Greys","Haberdashery","Jeffrey Stevens","Modern","Non Woven","Non-Woven","Pattern","Plaids","USA","Wallcovering","color:Gray","display_variant"]},{"mfr_sku":"4147-27405","title":"Essex Light Grey | Jeffrey Stevens","handle":"essex-light-grey-wallpaper-4147-27405","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"The impressive scale of this column-esque design is playfully contrasted by the hand-drawn lines that shape its geometric forms. Seen here with white linework against silver-grey. Essex is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92944-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92944","price":"127.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0099480_essex-light-grey-geometric-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4147-27405","dwc.manufacturer_sku":"4147-27405","custom.pattern_name":"Essex","custom.collection_name":"Haberdashery","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"180","custom.wholesale_price":"90","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Modern","specs.pattern":"Geometrics","custom.color_family":"Greys","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#B8B3AD","custom.color_1_percentage":43.2,"custom.color_2_hex":"#C3BEB6","custom.color_2_percentage":25.4,"custom.color_3_hex":"#CCC8C1","custom.color_3_percentage":18.2,"custom.color_details":"[{\"name\":\"Tan\",\"hex\":\"#b8b3ad\",\"pct\":43.2},{\"name\":\"Beige\",\"hex\":\"#c3beb6\",\"pct\":25.4},{\"name\":\"Beige\",\"hex\":\"#ccc8c1\",\"pct\":18.2},{\"name\":\"Beige\",\"hex\":\"#bab5ae\",\"pct\":4.9},{\"name\":\"Tan\",\"hex\":\"#b7b3ab\",\"pct\":4.5},{\"name\":\"Tan\",\"hex\":\"#b6b1ab\",\"pct\":3.8}]","custom.color_hex":"#B8B3AD","global.color_hex":"#B8B3AD","custom.background_color":"Tan"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","grey-silver","modern","geometric"],"tags":["A-Street Prints","Beige","Geometrics","Greys","Haberdashery","Jeffrey Stevens","Modern","Non Woven","Non-Woven","Pattern","Tan","USA","Wallcovering","color:Tan","display_variant"]},{"mfr_sku":"4147-27408","title":"Abilene Apricot | Jeffrey Stevens","handle":"abilene-apricot-wallpaper-4147-27408","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"The earthen elegance of ikat styling gives soft sophistication to rows of hexagons, diamonds, and zigzags. Featured here in a palette of tangerine, golden yellow, pink, pale grey, and brown. Abilene is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92945-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92945","price":"127.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0099501_abilene-apricot-ikat-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4147-27408","dwc.manufacturer_sku":"4147-27408","custom.pattern_name":"Abilene","custom.collection_name":"Haberdashery","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"180","custom.wholesale_price":"90","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Bohemian","specs.pattern":"Geometrics","custom.color_family":"Oranges","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#DBD3C9","custom.color_1_percentage":27.4,"custom.color_2_hex":"#C6A791","custom.color_2_percentage":23.4,"custom.color_3_hex":"#BFA988","custom.color_3_percentage":19.9,"custom.color_details":"[{\"name\":\"Beige\",\"hex\":\"#dbd3c9\",\"pct\":27.4},{\"name\":\"Tan\",\"hex\":\"#c6a791\",\"pct\":23.4},{\"name\":\"Tan\",\"hex\":\"#bfa988\",\"pct\":19.9},{\"name\":\"Gray\",\"hex\":\"#a88f78\",\"pct\":16.3},{\"name\":\"Beige\",\"hex\":\"#e3dcd3\",\"pct\":6.9},{\"name\":\"Beige\",\"hex\":\"#cebfa8\",\"pct\":6.1}]","custom.color_hex":"#DBD3C9","global.color_hex":"#DBD3C9","custom.background_color":"Beige"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","orange","bohemian","geometric"],"tags":["A-Street Prints","Beige","Bohemian","Geometrics","Haberdashery","Jeffrey Stevens","Non Woven","Non-Woven","Oranges","Pattern","Tan","USA","Wallcovering","color:Beige","display_variant"]},{"mfr_sku":"4148-27437","title":"Adavu Dove | Jeffrey Stevens","handle":"adavu-dove-wallpaper-4148-27437","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"This generously scaled scrollwork damask gains additional sophistication from its sleek, two-tone palette. Featured here with pale grey detailing against a white backdrop imbued with fabric-like texture. Adavu is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92946-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92946","price":"82.50","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0113104_adavu-dove-damask-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4148-27437","dwc.manufacturer_sku":"4148-27437","custom.pattern_name":"Adavu","custom.collection_name":"PrintWorks","custom.brand_name":"Chesapeake","custom.parent_brand":"Brewster Home Fashions","custom.us_msrp":"110","custom.wholesale_price":"55","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Traditional","specs.pattern":"Damask","custom.color_family":"Whites & Off-Whites","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#FDFEF8","custom.color_1_percentage":37.2,"custom.color_2_hex":"#EEEEE8","custom.color_2_percentage":23.5,"custom.color_3_hex":"#F4F4EF","custom.color_3_percentage":22.9,"custom.color_details":"[{\"name\":\"White\",\"hex\":\"#fdfef8\",\"pct\":37.2},{\"name\":\"Off-White\",\"hex\":\"#eeeee8\",\"pct\":23.5},{\"name\":\"Off-White\",\"hex\":\"#f4f4ef\",\"pct\":22.9},{\"name\":\"White\",\"hex\":\"#fbfbf6\",\"pct\":12.9},{\"name\":\"White\",\"hex\":\"#fcfef7\",\"pct\":3.1},{\"name\":\"White\",\"hex\":\"#fdfef7\",\"pct\":0.4}]","custom.color_hex":"#FDFEF8","global.color_hex":"#FDFEF8","custom.background_color":"White"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","warm-whites-ivory-1","traditional","damask"],"tags":["Brewster Home Fashions","Chesapeake","Damask","Jeffrey Stevens","Non Woven","Non-Woven","Off-White","Pattern","PrintWorks","Traditional","USA","Wallcovering","White","Whites & Off-Whites","color:White","display_variant"]},{"mfr_sku":"4172-27505","title":"Folly Seafoam | Jeffrey Stevens","handle":"folly-seafoam-wallpaper-4172-27505","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a pale aqua backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92947-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92947","price":"105.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0113897_folly-seafoam-zen-swirls-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-27505","dwc.manufacturer_sku":"4172-27505","custom.pattern_name":"Folly","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"140","custom.wholesale_price":"70","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"23.6","custom.pattern_repeat":"23.6","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Coastal","specs.pattern":"Abstract","custom.color_family":"Blues","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#D6DFD7","custom.color_1_percentage":22.8,"custom.color_2_hex":"#CBD5CC","custom.color_2_percentage":17.6,"custom.color_3_hex":"#D2DBD3","custom.color_3_percentage":16.9,"custom.color_details":"[{\"name\":\"Off-White\",\"hex\":\"#d6dfd7\",\"pct\":22.8},{\"name\":\"Beige\",\"hex\":\"#cbd5cc\",\"pct\":17.6},{\"name\":\"Beige\",\"hex\":\"#d2dbd3\",\"pct\":16.9},{\"name\":\"Beige\",\"hex\":\"#cfd9d0\",\"pct\":14.8},{\"name\":\"Off-White\",\"hex\":\"#dde4dd\",\"pct\":14.8},{\"name\":\"White\",\"hex\":\"#fefefe\",\"pct\":13.0}]","custom.color_hex":"#D6DFD7","global.color_hex":"#D6DFD7","custom.background_color":"Off-White"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","blue-wallpaper"],"tags":["A-Street Prints","Abstract","Beige","Blues","Coastal","Jeffrey Stevens","Non Woven","Non-Woven","Off-White","Pattern","Sea Salt","USA","Wallcovering","color:Off-White","display_variant"]},{"mfr_sku":"4172-27506","title":"Folly Light Blue | Jeffrey Stevens","handle":"folly-light-blue-wallpaper-4172-27506","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a light blue backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92948-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92948","price":"105.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0113904_folly-light-blue-zen-swirls-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-27506","dwc.manufacturer_sku":"4172-27506","custom.pattern_name":"Folly","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"140","custom.wholesale_price":"70","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"23.6","custom.pattern_repeat":"23.6","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Coastal","specs.pattern":"Abstract","custom.color_family":"Blues","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#CDD4D6","custom.color_1_percentage":23.2,"custom.color_2_hex":"#C6CED0","custom.color_2_percentage":21.4,"custom.color_3_hex":"#D4DADC","custom.color_3_percentage":16.2,"custom.color_details":"[{\"name\":\"Beige\",\"hex\":\"#cdd4d6\",\"pct\":23.2},{\"name\":\"Beige\",\"hex\":\"#c6ced0\",\"pct\":21.4},{\"name\":\"Off-White\",\"hex\":\"#d4dadc\",\"pct\":16.2},{\"name\":\"Beige\",\"hex\":\"#d0d8d9\",\"pct\":14.1},{\"name\":\"White\",\"hex\":\"#fefefe\",\"pct\":13.0},{\"name\":\"Off-White\",\"hex\":\"#dae0e1\",\"pct\":11.9}]","custom.color_hex":"#CDD4D6","global.color_hex":"#CDD4D6","custom.background_color":"Beige"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","blue-wallpaper"],"tags":["A-Street Prints","Abstract","Beige","Blues","Coastal","Jeffrey Stevens","Non Woven","Non-Woven","Off-White","Pattern","Sea Salt","USA","Wallcovering","color:Beige","display_variant"]},{"mfr_sku":"4172-27507","title":"Folly Blush | Jeffrey Stevens","handle":"folly-blush-wallpaper-4172-27507","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a soft coral backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92949-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92949","price":"105.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0113911_folly-blush-zen-swirls-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-27507","dwc.manufacturer_sku":"4172-27507","custom.pattern_name":"Folly","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"140","custom.wholesale_price":"70","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"23.6","custom.pattern_repeat":"23.6","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Coastal","specs.pattern":"Abstract","custom.color_family":"Pinks","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#ECD3C3","custom.color_1_percentage":21.7,"custom.color_2_hex":"#EACDBB","custom.color_2_percentage":21.1,"custom.color_3_hex":"#EED9CB","custom.color_3_percentage":16.2,"custom.color_details":"[{\"name\":\"Beige\",\"hex\":\"#ecd3c3\",\"pct\":21.7},{\"name\":\"Beige\",\"hex\":\"#eacdbb\",\"pct\":21.1},{\"name\":\"Beige\",\"hex\":\"#eed9cb\",\"pct\":16.2},{\"name\":\"Beige\",\"hex\":\"#edd7c7\",\"pct\":14.3},{\"name\":\"Off-White\",\"hex\":\"#f0dfd2\",\"pct\":13.7},{\"name\":\"White\",\"hex\":\"#fefdfc\",\"pct\":13.0}]","custom.color_hex":"#ECD3C3","global.color_hex":"#ECD3C3","custom.background_color":"Beige"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","pink-wallcovering-collection"],"tags":["A-Street Prints","Abstract","Beige","Coastal","Jeffrey Stevens","Non Woven","Non-Woven","Pattern","Pinks","Sea Salt","USA","Wallcovering","color:Beige","display_variant"]},{"mfr_sku":"4172-27518","title":"Destin Grey | Jeffrey Stevens","handle":"destin-grey-wallpaper-4172-27518","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"Faux linen and organic shibori detailing in cool grey ink makes this stripe wallpaper a masterclass in casual elegance. Destin is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92950-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92950","price":"135.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0113988_destin-grey-stripe-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-27518","dwc.manufacturer_sku":"4172-27518","custom.pattern_name":"Destin","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"180","custom.wholesale_price":"90","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"20.9","custom.pattern_repeat":"20.9","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Modern","specs.pattern":"Stripes","custom.color_family":"Greys","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#F0F1EB","custom.color_1_percentage":19.0,"custom.color_2_hex":"#F7F8F2","custom.color_2_percentage":18.6,"custom.color_3_hex":"#F8F9F3","custom.color_3_percentage":17.7,"custom.color_details":"[{\"name\":\"Off-White\",\"hex\":\"#f0f1eb\",\"pct\":19.0},{\"name\":\"Off-White\",\"hex\":\"#f7f8f2\",\"pct\":18.6},{\"name\":\"Off-White\",\"hex\":\"#f8f9f3\",\"pct\":17.7},{\"name\":\"Beige\",\"hex\":\"#d4d5cf\",\"pct\":15.4},{\"name\":\"White\",\"hex\":\"#fafbf6\",\"pct\":14.8},{\"name\":\"Off-White\",\"hex\":\"#f4f5ef\",\"pct\":14.5}]","custom.color_hex":"#F0F1EB","global.color_hex":"#F0F1EB","custom.background_color":"Off-White"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","grey-silver","modern","stripes"],"tags":["A-Street Prints","Greys","Jeffrey Stevens","Modern","Non Woven","Non-Woven","Off-White","Pattern","Sea Salt","Stripes","USA","Wallcovering","color:Off-White","display_variant"]},{"mfr_sku":"4172-27520","title":"Largo Neutral | Jeffrey Stevens","handle":"largo-neutral-wallpaper-4172-27520","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"Vertical stripes feature a neutral palette that subtly shifts between pale grey, cream, beige, and sand, all accentuated by the tactility of raised ink detailing. Largo is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92951-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92951","price":"105.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0114002_largo-neutral-striated-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-27520","dwc.manufacturer_sku":"4172-27520","custom.pattern_name":"Largo","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"140","custom.wholesale_price":"70","global.width":"20.5\" x 33 ft","custom.width":"20.5","global.length":"33 ft","global.repeat":"0","custom.pattern_repeat":"0","global.MATCH":"Random","custom.match_type":"Random","custom.backing":"Non Woven","specs.coverage":"About 56.4 square feet","specs.style":"Transitional","specs.pattern":"Stripes","custom.color_family":"Neutrals","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#E7E3D5","custom.color_1_percentage":20.6,"custom.color_2_hex":"#EBE7DA","custom.color_2_percentage":19.2,"custom.color_3_hex":"#E4DECF","custom.color_3_percentage":16.7,"custom.color_details":"[{\"name\":\"Off-White\",\"hex\":\"#e7e3d5\",\"pct\":20.6},{\"name\":\"Off-White\",\"hex\":\"#ebe7da\",\"pct\":19.2},{\"name\":\"Beige\",\"hex\":\"#e4decf\",\"pct\":16.7},{\"name\":\"Beige\",\"hex\":\"#dcd6c6\",\"pct\":16.1},{\"name\":\"Beige\",\"hex\":\"#e0dccd\",\"pct\":15.3},{\"name\":\"Off-White\",\"hex\":\"#f2efe4\",\"pct\":12.1}]","custom.color_hex":"#E7E3D5","global.color_hex":"#E7E3D5","custom.background_color":"Off-White"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","warm-whites-ivory-1","transitional-wallpaper","stripes"],"tags":["A-Street Prints","Beige","Jeffrey Stevens","Neutrals","Non Woven","Non-Woven","Off-White","Pattern","Sea Salt","Stripes","Transitional","USA","Wallcovering","color:Off-White","display_variant"]},{"mfr_sku":"4172-82008","title":"Salvo Gold | Jeffrey Stevens","handle":"salvo-gold-wallpaper-4172-82008","vendor":"Jeffrey Stevens","productType":"Wallcovering","status":"DRAFT","descriptionHtml":"Reminiscent of rattan vines, these curving, golden poles add chic definition to any space. Salvo is an unpasted, non woven wallpaper measuring 27 inches wide by 27 feet long, covering approximately 60.8 square feet per roll.","options":[{"name":"Size","values":["Sample","Sold Per Single Roll"]}],"variants":[{"sku":"DWJS-92952-Sample","price":"4.25","option":"Sample","inventoryPolicy":"CONTINUE"},{"sku":"DWJS-92952","price":"150.00","option":"Sold Per Single Roll","inventoryPolicy":"CONTINUE"}],"image":"https://bhf-cdn.azureedge.net/bhf-blob-prod/0114135_salvo-gold-curved-contours-wallpaper.jpeg","metafields":{"custom.manufacturer_sku":"4172-82008","dwc.manufacturer_sku":"4172-82008","custom.pattern_name":"Salvo","custom.collection_name":"Sea Salt","custom.brand_name":"A-Street Prints","custom.parent_brand":"A-Street Prints","custom.us_msrp":"200","custom.wholesale_price":"100","global.width":"27\" x 27 ft","custom.width":"27","global.length":"27 ft","global.repeat":"12.6","custom.pattern_repeat":"12.6","global.MATCH":"Straight","custom.match_type":"Straight","custom.backing":"Non Woven","specs.coverage":"About 60.8 square feet","specs.style":"Coastal","specs.pattern":"Trellis","custom.color_family":"Metallics","global.unit_of_measure":"Priced Per Single Roll","global.v_prods_quantity_order_min":"2","global.v_prods_quantity_order_units":"2","global.packaged":"Shipped in Doubles","custom.color_1_hex":"#F8F7F5","custom.color_1_percentage":44.6,"custom.color_2_hex":"#E8E3D7","custom.color_2_percentage":35.8,"custom.color_3_hex":"#FCFCFB","custom.color_3_percentage":6.8,"custom.color_details":"[{\"name\":\"Off-White\",\"hex\":\"#f8f7f5\",\"pct\":44.6},{\"name\":\"Off-White\",\"hex\":\"#e8e3d7\",\"pct\":35.8},{\"name\":\"White\",\"hex\":\"#fcfcfb\",\"pct\":6.8},{\"name\":\"Off-White\",\"hex\":\"#f9f7f6\",\"pct\":6.2},{\"name\":\"Off-White\",\"hex\":\"#f7f7f4\",\"pct\":5.0},{\"name\":\"Off-White\",\"hex\":\"#f8f7f4\",\"pct\":1.5}]","custom.color_hex":"#F8F7F5","global.color_hex":"#F8F7F5","custom.background_color":"Off-White"},"uom":"BLT","collections":["jeffrey-stevens","jeffrey-stevens-wallpaper-collection","metallic-wallpaper-collection"],"tags":["A-Street Prints","Coastal","Jeffrey Stevens","Metallics","Non Woven","Non-Woven","Off-White","Pattern","Sea Salt","Trellis","USA","Wallcovering","White","color:Off-White","display_variant"]}]
\ No newline at end of file
diff --git a/data/onboard-payloads-12.json b/data/onboard-payloads-12.json
new file mode 100644
index 0000000..5b17cb1
--- /dev/null
+++ b/data/onboard-payloads-12.json
@@ -0,0 +1,722 @@
+[
+ {
+ "mfr_sku": "4147-27261",
+ "title": "Exhale Moss | Jeffrey Stevens",
+ "handle": "exhale-moss-wallpaper-4147-27261",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "A replica of high-end grasscloth, this design features wide bands, knotted details, and prominent raised ink stitching. Featured here in a blend of neutrals and cool greens. Exhale is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92941-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92941",
+ "price": "97.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0093554_exhale-moss-woven-faux-grasscloth-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4147-27261",
+ "dwc.manufacturer_sku": "4147-27261",
+ "custom.pattern_name": "Exhale",
+ "custom.collection_name": "Haberdashery",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "140",
+ "custom.wholesale_price": "70",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Modern",
+ "specs.pattern": "Faux Grasscloth",
+ "custom.color_family": "Greens",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4147-27378",
+ "title": "Octavia Neutral | Jeffrey Stevens",
+ "handle": "octavia-neutral-wallpaper-4147-27378",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "This compelling wallpaper perfectly captures the look of artisan-made marbled paper in a scale that flatters any living space. Featured here in shades of grey, taupe, and cream. Octavia is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92942-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92942",
+ "price": "127.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099291_octavia-neutral-marbled-ink-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4147-27378",
+ "dwc.manufacturer_sku": "4147-27378",
+ "custom.pattern_name": "Octavia",
+ "custom.collection_name": "Haberdashery",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "180",
+ "custom.wholesale_price": "90",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "25.2",
+ "custom.pattern_repeat": "25.2",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Eclectic",
+ "specs.pattern": "Abstract",
+ "custom.color_family": "Neutrals",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4147-27384",
+ "title": "Westley Grey | Jeffrey Stevens",
+ "handle": "westley-grey-wallpaper-4147-27384",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "Plaid's comforting and classic sophistication is reimagined with a grand scale and playful palette. Seen here with cream and taupe accents against a grey foundation. Westley is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92943-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92943",
+ "price": "127.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099333_westley-grey-plaid-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4147-27384",
+ "dwc.manufacturer_sku": "4147-27384",
+ "custom.pattern_name": "Westley",
+ "custom.collection_name": "Haberdashery",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "180",
+ "custom.wholesale_price": "90",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Modern",
+ "specs.pattern": "Plaids",
+ "custom.color_family": "Greys",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4147-27405",
+ "title": "Essex Light Grey | Jeffrey Stevens",
+ "handle": "essex-light-grey-wallpaper-4147-27405",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "The impressive scale of this column-esque design is playfully contrasted by the hand-drawn lines that shape its geometric forms. Seen here with white linework against silver-grey. Essex is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92944-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92944",
+ "price": "127.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099480_essex-light-grey-geometric-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4147-27405",
+ "dwc.manufacturer_sku": "4147-27405",
+ "custom.pattern_name": "Essex",
+ "custom.collection_name": "Haberdashery",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "180",
+ "custom.wholesale_price": "90",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Modern",
+ "specs.pattern": "Geometrics",
+ "custom.color_family": "Greys",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4147-27408",
+ "title": "Abilene Apricot | Jeffrey Stevens",
+ "handle": "abilene-apricot-wallpaper-4147-27408",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "The earthen elegance of ikat styling gives soft sophistication to rows of hexagons, diamonds, and zigzags. Featured here in a palette of tangerine, golden yellow, pink, pale grey, and brown. Abilene is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92945-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92945",
+ "price": "127.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099501_abilene-apricot-ikat-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4147-27408",
+ "dwc.manufacturer_sku": "4147-27408",
+ "custom.pattern_name": "Abilene",
+ "custom.collection_name": "Haberdashery",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "180",
+ "custom.wholesale_price": "90",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Bohemian",
+ "specs.pattern": "Geometrics",
+ "custom.color_family": "Oranges",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4148-27437",
+ "title": "Adavu Dove | Jeffrey Stevens",
+ "handle": "adavu-dove-wallpaper-4148-27437",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "This generously scaled scrollwork damask gains additional sophistication from its sleek, two-tone palette. Featured here with pale grey detailing against a white backdrop imbued with fabric-like texture. Adavu is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92946-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92946",
+ "price": "82.50",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113104_adavu-dove-damask-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4148-27437",
+ "dwc.manufacturer_sku": "4148-27437",
+ "custom.pattern_name": "Adavu",
+ "custom.collection_name": "PrintWorks",
+ "custom.brand_name": "Chesapeake",
+ "custom.parent_brand": "Brewster Home Fashions",
+ "custom.us_msrp": "110",
+ "custom.wholesale_price": "55",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Traditional",
+ "specs.pattern": "Damask",
+ "custom.color_family": "Whites & Off-Whites",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-27505",
+ "title": "Folly Seafoam | Jeffrey Stevens",
+ "handle": "folly-seafoam-wallpaper-4172-27505",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a pale aqua backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92947-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92947",
+ "price": "105.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113897_folly-seafoam-zen-swirls-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-27505",
+ "dwc.manufacturer_sku": "4172-27505",
+ "custom.pattern_name": "Folly",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "140",
+ "custom.wholesale_price": "70",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "23.6",
+ "custom.pattern_repeat": "23.6",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Coastal",
+ "specs.pattern": "Abstract",
+ "custom.color_family": "Blues",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-27506",
+ "title": "Folly Light Blue | Jeffrey Stevens",
+ "handle": "folly-light-blue-wallpaper-4172-27506",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a light blue backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92948-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92948",
+ "price": "105.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113904_folly-light-blue-zen-swirls-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-27506",
+ "dwc.manufacturer_sku": "4172-27506",
+ "custom.pattern_name": "Folly",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "140",
+ "custom.wholesale_price": "70",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "23.6",
+ "custom.pattern_repeat": "23.6",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Coastal",
+ "specs.pattern": "Abstract",
+ "custom.color_family": "Blues",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-27507",
+ "title": "Folly Blush | Jeffrey Stevens",
+ "handle": "folly-blush-wallpaper-4172-27507",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a soft coral backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92949-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92949",
+ "price": "105.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113911_folly-blush-zen-swirls-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-27507",
+ "dwc.manufacturer_sku": "4172-27507",
+ "custom.pattern_name": "Folly",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "140",
+ "custom.wholesale_price": "70",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "23.6",
+ "custom.pattern_repeat": "23.6",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Coastal",
+ "specs.pattern": "Abstract",
+ "custom.color_family": "Pinks",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-27518",
+ "title": "Destin Grey | Jeffrey Stevens",
+ "handle": "destin-grey-wallpaper-4172-27518",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "Faux linen and organic shibori detailing in cool grey ink makes this stripe wallpaper a masterclass in casual elegance. Destin is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92950-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92950",
+ "price": "135.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113988_destin-grey-stripe-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-27518",
+ "dwc.manufacturer_sku": "4172-27518",
+ "custom.pattern_name": "Destin",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "180",
+ "custom.wholesale_price": "90",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "20.9",
+ "custom.pattern_repeat": "20.9",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Modern",
+ "specs.pattern": "Stripes",
+ "custom.color_family": "Greys",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-27520",
+ "title": "Largo Neutral | Jeffrey Stevens",
+ "handle": "largo-neutral-wallpaper-4172-27520",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "Vertical stripes feature a neutral palette that subtly shifts between pale grey, cream, beige, and sand, all accentuated by the tactility of raised ink detailing. Largo is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92951-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92951",
+ "price": "105.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114002_largo-neutral-striated-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-27520",
+ "dwc.manufacturer_sku": "4172-27520",
+ "custom.pattern_name": "Largo",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "140",
+ "custom.wholesale_price": "70",
+ "global.width": "20.5\" x 33 ft",
+ "custom.width": "20.5",
+ "global.length": "33 ft",
+ "global.repeat": "0",
+ "custom.pattern_repeat": "0",
+ "global.MATCH": "Random",
+ "custom.match_type": "Random",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 56.4 square feet",
+ "specs.style": "Transitional",
+ "specs.pattern": "Stripes",
+ "custom.color_family": "Neutrals",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ },
+ {
+ "mfr_sku": "4172-82008",
+ "title": "Salvo Gold | Jeffrey Stevens",
+ "handle": "salvo-gold-wallpaper-4172-82008",
+ "vendor": "Jeffrey Stevens",
+ "productType": "Wallcovering",
+ "status": "DRAFT",
+ "descriptionHtml": "Reminiscent of rattan vines, these curving, golden poles add chic definition to any space. Salvo is an unpasted, non woven wallpaper measuring 27 inches wide by 27 feet long, covering approximately 60.8 square feet per roll.",
+ "options": [
+ {
+ "name": "Size",
+ "values": [
+ "Sample",
+ "Sold Per Single Roll"
+ ]
+ }
+ ],
+ "variants": [
+ {
+ "sku": "DWJS-92952-Sample",
+ "price": "4.25",
+ "option": "Sample",
+ "inventoryPolicy": "CONTINUE"
+ },
+ {
+ "sku": "DWJS-92952",
+ "price": "150.00",
+ "option": "Sold Per Single Roll",
+ "inventoryPolicy": "CONTINUE"
+ }
+ ],
+ "image": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114135_salvo-gold-curved-contours-wallpaper.jpeg",
+ "metafields": {
+ "custom.manufacturer_sku": "4172-82008",
+ "dwc.manufacturer_sku": "4172-82008",
+ "custom.pattern_name": "Salvo",
+ "custom.collection_name": "Sea Salt",
+ "custom.brand_name": "A-Street Prints",
+ "custom.parent_brand": "A-Street Prints",
+ "custom.us_msrp": "200",
+ "custom.wholesale_price": "100",
+ "global.width": "27\" x 27 ft",
+ "custom.width": "27",
+ "global.length": "27 ft",
+ "global.repeat": "12.6",
+ "custom.pattern_repeat": "12.6",
+ "global.MATCH": "Straight",
+ "custom.match_type": "Straight",
+ "custom.backing": "Non Woven",
+ "specs.coverage": "About 60.8 square feet",
+ "specs.style": "Coastal",
+ "specs.pattern": "Trellis",
+ "custom.color_family": "Metallics",
+ "global.unit_of_measure": "Priced Per Single Roll",
+ "global.v_prods_quantity_order_min": "2",
+ "global.v_prods_quantity_order_units": "2",
+ "global.packaged": "Shipped in Doubles"
+ },
+ "uom": "BLT"
+ }
+]
\ No newline at end of file
diff --git a/data/onboard-rows-12.json b/data/onboard-rows-12.json
new file mode 100644
index 0000000..bf3b7f4
--- /dev/null
+++ b/data/onboard-rows-12.json
@@ -0,0 +1,314 @@
+[
+ {
+ "export_sku": "4147-27261",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Exhale",
+ "colorway": "Moss",
+ "product_name": "Exhale Moss Woven Faux Grasscloth Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 140,
+ "us_map": 97.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Faux Grasscloth",
+ "color_family": "Greens",
+ "wholesale": 70,
+ "dynamic_description": "A replica of high-end grasscloth, this design features wide bands, knotted details, and prominent raised ink stitching. Featured here in a blend of neutrals and cool greens. Exhale is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0093554_exhale-moss-woven-faux-grasscloth-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27378",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Octavia",
+ "colorway": "Neutral",
+ "product_name": "Octavia Neutral Marbled Ink Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "25.2",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Eclectic",
+ "marketing_pattern": "Abstract",
+ "color_family": "Neutrals",
+ "wholesale": 90,
+ "dynamic_description": "This compelling wallpaper perfectly captures the look of artisan-made marbled paper in a scale that flatters any living space. Featured here in shades of grey, taupe, and cream. Octavia is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099291_octavia-neutral-marbled-ink-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27384",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Westley",
+ "colorway": "Grey",
+ "product_name": "Westley Grey Plaid Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Plaids",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "Plaid's comforting and classic sophistication is reimagined with a grand scale and playful palette. Seen here with cream and taupe accents against a grey foundation. Westley is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099333_westley-grey-plaid-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27405",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Essex",
+ "colorway": "Light Grey",
+ "product_name": "Essex Light Grey Geometric Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "The impressive scale of this column-esque design is playfully contrasted by the hand-drawn lines that shape its geometric forms. Seen here with white linework against silver-grey. Essex is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099480_essex-light-grey-geometric-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27408",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Abilene",
+ "colorway": "Apricot",
+ "product_name": "Abilene Apricot Ikat Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Bohemian",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Oranges",
+ "wholesale": 90,
+ "dynamic_description": "The earthen elegance of ikat styling gives soft sophistication to rows of hexagons, diamonds, and zigzags. Featured here in a palette of tangerine, golden yellow, pink, pale grey, and brown. Abilene is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099501_abilene-apricot-ikat-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4148-27437",
+ "parent_brand": "Brewster Home Fashions",
+ "brand": "Chesapeake",
+ "pattern_name": "Adavu",
+ "colorway": "Dove",
+ "product_name": "Adavu Dove Damask Wallpaper",
+ "book_name": "PrintWorks",
+ "us_msrp": 110,
+ "us_map": 82.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Traditional",
+ "marketing_pattern": "Damask",
+ "color_family": "Whites & Off-Whites",
+ "wholesale": 55,
+ "dynamic_description": "This generously scaled scrollwork damask gains additional sophistication from its sleek, two-tone palette. Featured here with pale grey detailing against a white backdrop imbued with fabric-like texture. Adavu is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 53.92,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113104_adavu-dove-damask-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27505",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Seafoam",
+ "product_name": "Folly Seafoam Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Blues",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a pale aqua backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113897_folly-seafoam-zen-swirls-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27506",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Light Blue",
+ "product_name": "Folly Light Blue Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Blues",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a light blue backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113904_folly-light-blue-zen-swirls-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27507",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Blush",
+ "product_name": "Folly Blush Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Pinks",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a soft coral backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113911_folly-blush-zen-swirls-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27518",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Destin",
+ "colorway": "Grey",
+ "product_name": "Destin Grey Stripe Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 180,
+ "us_map": 135,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Stripes",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "Faux linen and organic shibori detailing in cool grey ink makes this stripe wallpaper a masterclass in casual elegance. Destin is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113988_destin-grey-stripe-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27520",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Largo",
+ "colorway": "Neutral",
+ "product_name": "Largo Neutral Striated Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "0",
+ "match_type": "Random",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Transitional",
+ "marketing_pattern": "Stripes",
+ "color_family": "Neutrals",
+ "wholesale": 70,
+ "dynamic_description": "Vertical stripes feature a neutral palette that subtly shifts between pale grey, cream, beige, and sand, all accentuated by the tactility of raised ink detailing. Largo is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114002_largo-neutral-striated-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-82008",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Salvo",
+ "colorway": "Gold",
+ "product_name": "Salvo Gold Curved Contours Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 200,
+ "us_map": 150,
+ "uom": "BLT",
+ "width_inches": 27,
+ "length_feet": 27,
+ "pattern_repeat": "12.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 60.8 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Trellis",
+ "color_family": "Metallics",
+ "wholesale": 100,
+ "dynamic_description": "Reminiscent of rattan vines, these curving, golden poles add chic definition to any space. Salvo is an unpasted, non woven wallpaper measuring 27 inches wide by 27 feet long, covering approximately 60.8 square feet per roll.",
+ "roll_price_single": 98.04,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114135_salvo-gold-curved-contours-wallpaper.jpeg"
+ }
+]
\ No newline at end of file
diff --git a/data/onboard-rows-17.json b/data/onboard-rows-17.json
new file mode 100644
index 0000000..882dafa
--- /dev/null
+++ b/data/onboard-rows-17.json
@@ -0,0 +1,456 @@
+[
+ {
+ "export_sku": "4147-27261",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Exhale",
+ "colorway": "Moss",
+ "product_name": "Exhale Moss Woven Faux Grasscloth Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 140,
+ "us_map": 97.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Faux Grasscloth",
+ "color_family": "Greens",
+ "wholesale": 70,
+ "dynamic_description": "A replica of high-end grasscloth, this design features wide bands, knotted details, and prominent raised ink stitching. Featured here in a blend of neutrals and cool greens. Exhale is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0093554_exhale-moss-woven-faux-grasscloth-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4147-27378",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Octavia",
+ "colorway": "Neutral",
+ "product_name": "Octavia Neutral Marbled Ink Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "25.2",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Eclectic",
+ "marketing_pattern": "Abstract",
+ "color_family": "Neutrals",
+ "wholesale": 90,
+ "dynamic_description": "This compelling wallpaper perfectly captures the look of artisan-made marbled paper in a scale that flatters any living space. Featured here in shades of grey, taupe, and cream. Octavia is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099291_octavia-neutral-marbled-ink-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4147-27383",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Berkshire",
+ "colorway": "Butter",
+ "product_name": "Berkshire Butter Damask Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Traditional",
+ "marketing_pattern": "Damask",
+ "color_family": "Yellows",
+ "wholesale": 90,
+ "dynamic_description": "A charming take on a classic, this damask features a free-flowing ogee structure embellished with various floral and botanical details. Seen here in buttery yellow against cream. Berkshire is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099179_marta-green-floral-trail-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27384",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Westley",
+ "colorway": "Grey",
+ "product_name": "Westley Grey Plaid Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Plaids",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "Plaid's comforting and classic sophistication is reimagined with a grand scale and playful palette. Seen here with cream and taupe accents against a grey foundation. Westley is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099333_westley-grey-plaid-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4147-27404",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Essex",
+ "colorway": "Wheat",
+ "product_name": "Essex Wheat Geometric Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Browns",
+ "wholesale": 90,
+ "dynamic_description": "The impressive scale of this column-esque design is playfully contrasted by the hand-drawn lines that shape its geometric forms. Seen here with golden-brown linework against cool white. Essex is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099333_westley-grey-plaid-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4147-27405",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Essex",
+ "colorway": "Light Grey",
+ "product_name": "Essex Light Grey Geometric Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "The impressive scale of this column-esque design is playfully contrasted by the hand-drawn lines that shape its geometric forms. Seen here with white linework against silver-grey. Essex is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099480_essex-light-grey-geometric-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4147-27408",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Abilene",
+ "colorway": "Apricot",
+ "product_name": "Abilene Apricot Ikat Wallpaper",
+ "book_name": "Haberdashery",
+ "us_msrp": 180,
+ "us_map": 127.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Bohemian",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Oranges",
+ "wholesale": 90,
+ "dynamic_description": "The earthen elegance of ikat styling gives soft sophistication to rows of hexagons, diamonds, and zigzags. Featured here in a palette of tangerine, golden yellow, pink, pale grey, and brown. Abilene is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0099501_abilene-apricot-ikat-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4148-27437",
+ "parent_brand": "Brewster Home Fashions",
+ "brand": "Chesapeake",
+ "pattern_name": "Adavu",
+ "colorway": "Dove",
+ "product_name": "Adavu Dove Damask Wallpaper",
+ "book_name": "PrintWorks",
+ "us_msrp": 110,
+ "us_map": 82.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Traditional",
+ "marketing_pattern": "Damask",
+ "color_family": "Whites & Off-Whites",
+ "wholesale": 55,
+ "dynamic_description": "This generously scaled scrollwork damask gains additional sophistication from its sleek, two-tone palette. Featured here with pale grey detailing against a white backdrop imbued with fabric-like texture. Adavu is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 53.92,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113104_adavu-dove-damask-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4148-27441",
+ "parent_brand": "Brewster Home Fashions",
+ "brand": "Chesapeake",
+ "pattern_name": "Adavu",
+ "colorway": "Sage",
+ "product_name": "Adavu Sage Damask Wallpaper",
+ "book_name": "PrintWorks",
+ "us_msrp": 110,
+ "us_map": 82.5,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Traditional",
+ "marketing_pattern": "Damask",
+ "color_family": "Greens",
+ "wholesale": 55,
+ "dynamic_description": "This generously scaled scrollwork damask gains additional sophistication from its sleek, two-tone palette. Featured here with sage green detailing against a white backdrop imbued with fabric-like texture. Adavu is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 53.92,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0090739_glen-beige-texture-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4148-27466",
+ "parent_brand": "Brewster Home Fashions",
+ "brand": "Chesapeake",
+ "pattern_name": "Nabi",
+ "colorway": "Aqua",
+ "product_name": "Nabi Aqua Geometric Wallpaper",
+ "book_name": "PrintWorks",
+ "us_msrp": 100,
+ "us_map": 75,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "7",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Transitional",
+ "marketing_pattern": "Geometrics",
+ "color_family": "Blues",
+ "wholesale": 50,
+ "dynamic_description": "Reminiscent of mosaic tiles, this complex geometric wallpaper offer kaleidoscopic detailing within an orderly, gridded structure. Featured here in soft aqua, pale grey, and white. Nabi is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 49.02,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0112794_hollyhock-honey-floral-crest-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27486",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Navarres Stripe",
+ "colorway": "Charcoal",
+ "product_name": "Navarres Stripe Charcoal Faux Linen Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 180,
+ "us_map": 135,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "0",
+ "match_type": "Random",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Transitional",
+ "marketing_pattern": "Stripes",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "Charcoal grey pinstripes, plaited details, and subtle tactility recreates the elegance of French linen with modern embellishments. Navarres Stripe is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114135_salvo-gold-curved-contours-wallpaper.jpeg"
+ },
+ {
+ "export_sku": "4172-27505",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Seafoam",
+ "product_name": "Folly Seafoam Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Blues",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a pale aqua backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113897_folly-seafoam-zen-swirls-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4172-27506",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Light Blue",
+ "product_name": "Folly Light Blue Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Blues",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a light blue backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113904_folly-light-blue-zen-swirls-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4172-27507",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Folly",
+ "colorway": "Blush",
+ "product_name": "Folly Blush Zen Swirls Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "23.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Abstract",
+ "color_family": "Pinks",
+ "wholesale": 70,
+ "dynamic_description": "The free flowing swirls of this tranquil design are given luxurious depth with white raised ink linework and a soft coral backdrop imbued with linen detailing. Folly is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113911_folly-blush-zen-swirls-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4172-27518",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Destin",
+ "colorway": "Grey",
+ "product_name": "Destin Grey Stripe Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 180,
+ "us_map": 135,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "20.9",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Modern",
+ "marketing_pattern": "Stripes",
+ "color_family": "Greys",
+ "wholesale": 90,
+ "dynamic_description": "Faux linen and organic shibori detailing in cool grey ink makes this stripe wallpaper a masterclass in casual elegance. Destin is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 88.24,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0113988_destin-grey-stripe-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4172-27520",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Largo",
+ "colorway": "Neutral",
+ "product_name": "Largo Neutral Striated Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 140,
+ "us_map": 105,
+ "uom": "BLT",
+ "width_inches": 20.5,
+ "length_feet": 33,
+ "pattern_repeat": "0",
+ "match_type": "Random",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 56.4 square feet",
+ "marketing_style": "Transitional",
+ "marketing_pattern": "Stripes",
+ "color_family": "Neutrals",
+ "wholesale": 70,
+ "dynamic_description": "Vertical stripes feature a neutral palette that subtly shifts between pale grey, cream, beige, and sand, all accentuated by the tactility of raised ink detailing. Largo is an unpasted, non woven wallpaper measuring 20.5 inches wide by 33 feet long, covering approximately 56.4 square feet per roll.",
+ "roll_price_single": 68.63,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114002_largo-neutral-striated-wallpaper.jpeg",
+ "_recovered": true
+ },
+ {
+ "export_sku": "4172-82008",
+ "parent_brand": "A-Street Prints",
+ "brand": "A-Street Prints",
+ "pattern_name": "Salvo",
+ "colorway": "Gold",
+ "product_name": "Salvo Gold Curved Contours Wallpaper",
+ "book_name": "Sea Salt",
+ "us_msrp": 200,
+ "us_map": 150,
+ "uom": "BLT",
+ "width_inches": 27,
+ "length_feet": 27,
+ "pattern_repeat": "12.6",
+ "match_type": "Straight",
+ "technical_material": "Non Woven",
+ "backing": "Non Woven",
+ "coverage": "About 60.8 square feet",
+ "marketing_style": "Coastal",
+ "marketing_pattern": "Trellis",
+ "color_family": "Metallics",
+ "wholesale": 100,
+ "dynamic_description": "Reminiscent of rattan vines, these curving, golden poles add chic definition to any space. Salvo is an unpasted, non woven wallpaper measuring 27 inches wide by 27 feet long, covering approximately 60.8 square feet per roll.",
+ "roll_price_single": 98.04,
+ "image_url": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114135_salvo-gold-curved-contours-wallpaper.jpeg",
+ "_recovered": true
+ }
+]
\ No newline at end of file
diff --git a/enrich-onboard-12.py b/enrich-onboard-12.py
new file mode 100644
index 0000000..8a6ba64
--- /dev/null
+++ b/enrich-onboard-12.py
@@ -0,0 +1,248 @@
+#!/usr/bin/env python3
+"""York Phase-1 enrichment: PIL median-cut color-hex, collection routing, tag derivation.
+$0 local — PIL/numpy for hex, deterministic hex->name, live-verified collection handles."""
+import json, os, sys, hashlib, urllib.request, io, time
+from collections import Counter
+from PIL import Image
+import numpy as np
+
+ROOT = '/Users/macstudio3/Projects/york-reprice-2026-08'
+DATA = os.path.join(ROOT, 'data')
+IMG_CACHE = os.path.join(DATA, 'img-cache')
+os.makedirs(IMG_CACHE, exist_ok=True)
+
+payloads = json.load(open(os.path.join(DATA, 'onboard-payloads-12.json')))
+live_handles = {c['handle'] for c in json.load(open(os.path.join(DATA, 'live-collections.json')))}
+
+# ---------- basic color-name reference (deterministic nearest, no LLM) ----------
+# name -> representative RGB
+NAMED = {
+ 'White': (255,255,255),
+ 'Off-White': (245,242,235),
+ 'Beige': (222,205,178),
+ 'Tan': (196,170,132),
+ 'Brown': (120,85,60),
+ 'Gray': (150,150,150),
+ 'Black': (25,25,25),
+ 'Blue': (60,110,190),
+ 'Navy': (30,45,90),
+ 'Teal': (40,130,130),
+ 'Green': (70,140,70),
+ 'Gold': (200,165,80),
+ 'Red': (185,45,45),
+ 'Pink': (225,150,175),
+ 'Purple': (120,70,150),
+}
+NAMES = list(NAMED.keys())
+NAMEV = np.array([NAMED[n] for n in NAMES], dtype=float)
+
+def hex_to_name(hexstr):
+ r = int(hexstr[1:3],16); g = int(hexstr[3:5],16); b = int(hexstr[5:7],16)
+ d = np.sqrt(((NAMEV - np.array([r,g,b],dtype=float))**2).sum(axis=1))
+ return NAMES[int(d.argmin())]
+
+def rgb_to_hex(rgb):
+ return '#{:02X}{:02X}{:02X}'.format(int(rgb[0]),int(rgb[1]),int(rgb[2]))
+
+# ---------- image download w/ cache ----------
+def fetch_image(url):
+ key = hashlib.sha256(url.encode()).hexdigest()[:24]
+ ext = os.path.splitext(url.split('?')[0])[1].lower()
+ if ext not in ('.jpg','.jpeg','.png','.webp','.gif','.bmp'): ext='.img'
+ path = os.path.join(IMG_CACHE, key+ext)
+ if os.path.exists(path) and os.path.getsize(path) > 0:
+ return path
+ req = urllib.request.Request(url, headers={'User-Agent':'Mozilla/5.0 DW-local-enrich'})
+ with urllib.request.urlopen(req, timeout=45) as resp:
+ data = resp.read()
+ with open(path,'wb') as f: f.write(data)
+ return path
+
+# ---------- PIL median-cut dominant colors ----------
+def dominant_colors(path, k=6):
+ im = Image.open(path).convert('RGB')
+ im.thumbnail((200,200))
+ # median-cut quantization via PIL, then compute coverage from quantized palette
+ q = im.quantize(colors=k, method=Image.MEDIANCUT)
+ pal = q.getpalette() # flat RGB list
+ counts = Counter(q.getdata())
+ total = sum(counts.values())
+ out = []
+ for idx, cnt in counts.most_common():
+ r = pal[idx*3]; g = pal[idx*3+1]; b = pal[idx*3+2]
+ pct = round(100.0*cnt/total, 1)
+ out.append({'hex': rgb_to_hex((r,g,b)), 'pct': pct})
+ # merge near-identical hexes that median-cut split
+ return out
+
+# ---------- color_family -> canonical color-tab collection handle (live-verified) ----------
+# Precedence: prefer the "…-wallpaper"/"Collection" style handles the exemplar/color-tabs use.
+COLOR_FAMILY_HANDLE = {
+ 'Greys': 'grey-silver',
+ 'Blues': 'blue-wallpaper',
+ 'Whites & Off-Whites': 'warm-whites-ivory-1',
+ 'Browns': 'brown-wallpaper-collection',
+ 'Beiges': 'beige-cream-wallpaper-collection',
+ 'Greens': 'green-wallpaper-collection',
+ 'Blacks': 'black',
+ 'Metallics': 'metallic-wallpaper-collection',
+ 'Neutrals': 'warm-whites-ivory-1',
+ 'Purples': 'purple-wallcovering-collection',
+ 'Reds': 'red-wallpaper-collection',
+ 'Oranges': 'orange',
+ 'Yellows': 'yellow-wallpaper-collection',
+ 'Pinks': 'pink-wallcovering-collection',
+}
+
+# ---------- specs.style -> style collection handle (live-verified) ----------
+STYLE_HANDLE = {
+ 'Naturals': 'grasscloth-natural-fiber',
+ 'Traditional': 'traditional',
+ 'Modern': 'modern',
+ 'Transitional': 'transitional-wallpaper',
+ 'Glam': 'naturally-glamorous',
+ 'Lodge': 'rustic-charm-wallpaper-collection',
+ 'Masculine': None, # no live handle
+ 'Whimsical': 'novelty-wallpaper-collection',
+ 'Farmhouse': 'farmhouse-wallpaper',
+ 'Bohemian': 'bohemian',
+ 'Nautical': 'coastal-nautical-1',
+ 'Eclectic': None, # no live handle
+ 'Scenic': 'murals-scenics',
+ 'Abstract': 'abstract',
+}
+
+# ---------- specs.pattern -> pattern collection handle (live-verified) ----------
+PATTERN_HANDLE = {
+ 'Texture Pattern': 'even-more-textures',
+ 'Stripes': 'stripes',
+ 'Damask': 'damask',
+ 'Geometrics': 'geometric',
+ 'Small Prints': None,
+ 'Novelty': 'novelty-wallpaper-collection',
+ 'Toile': 'traditional',
+ 'Graphics': 'abstract',
+ 'Fabric & Woven Textures': 'even-more-textures',
+}
+
+# always-on vendor collections that exist live
+VENDOR_HANDLES = [h for h in ['jeffrey-stevens','jeffrey-stevens-wallpaper-collection'] if h in live_handles]
+
+def verify(h):
+ return h if (h and h in live_handles) else None
+
+# ---------- tag derivation ----------
+def derive_tags(mf, color_names, bg_name):
+ tags = set()
+ tags.add('Wallcovering')
+ tags.add('Pattern')
+ # brand / vendor
+ tags.add('Jeffrey Stevens')
+ if mf.get('custom.parent_brand'): tags.add(mf['custom.parent_brand'])
+ if mf.get('custom.brand_name'): tags.add(mf['custom.brand_name'])
+ tags.add('display_variant')
+ tags.add('USA')
+ # color family + individual colors
+ cf = mf.get('custom.color_family','')
+ if cf: tags.add(cf)
+ for cn in color_names: tags.add(cn)
+ if bg_name: tags.add('color:'+bg_name)
+ # style
+ st = mf.get('specs.style','')
+ if st: tags.add(st)
+ # pattern
+ pat = mf.get('specs.pattern','')
+ if pat: tags.add(pat)
+ # backing / material
+ bk = mf.get('custom.backing','')
+ if bk:
+ tags.add(bk)
+ if bk.lower().startswith('non'): tags.add('Non-Woven')
+ # coverage / unit hints
+ if mf.get('specs.style') in ('Naturals',): tags.add('Natural')
+ # collection_name as a tag
+ cn = mf.get('custom.collection_name','')
+ if cn: tags.add(cn)
+ # pattern name words (motif hints)
+ pn = (mf.get('custom.pattern_name','') or '')
+ for w in ('Paperweave','Grasscloth','Stripe','Damask','Floral','Leaf','Geometric','Texture','Weave','Linen','Silk','Faux'):
+ if w.lower() in pn.lower(): tags.add(w)
+ return sorted(t for t in tags if t and str(t).strip())
+
+# ---------- main loop ----------
+done=0; failed=0; total_colors=0
+fail_list=[]
+handle_freq=Counter()
+routed_ct=0
+tag_total=0
+missing_family=Counter()
+
+for i,p in enumerate(payloads):
+ mf = p['metafields']
+ # --- COLOR ---
+ color_names=[]; bg_name=''
+ try:
+ path = fetch_image(p['image'])
+ cols = dominant_colors(path, k=6)
+ # top 3 for color_1/2/3
+ top3 = cols[:3]
+ details=[]
+ for c in cols:
+ nm = hex_to_name(c['hex'])
+ details.append({'name':nm,'hex':c['hex'].lower(),'pct':c['pct']})
+ # populate metafields
+ for n,c in enumerate(top3, start=1):
+ mf[f'custom.color_{n}_hex'] = c['hex']
+ mf[f'custom.color_{n}_percentage'] = c['pct']
+ mf['custom.color_details'] = json.dumps(details, separators=(',',':'))
+ mf['custom.color_hex'] = cols[0]['hex'] # dominant
+ mf['global.color_hex'] = cols[0]['hex']
+ bg_name = hex_to_name(cols[0]['hex']) # largest-area color name
+ mf['custom.background_color'] = bg_name
+ color_names = [d['name'] for d in details[:3]]
+ total_colors += len(cols)
+ done += 1
+ except Exception as e:
+ failed += 1
+ fail_list.append({'mfr_sku':p['mfr_sku'],'image':p['image'],'error':str(e)})
+
+ # --- COLLECTIONS ---
+ handles=[]
+ for h in VENDOR_HANDLES: handles.append(h)
+ fam = mf.get('custom.color_family','')
+ ch = verify(COLOR_FAMILY_HANDLE.get(fam))
+ if ch: handles.append(ch)
+ elif fam:
+ missing_family[fam] += 1 # family present but resolved to no live handle
+ sh = verify(STYLE_HANDLE.get(mf.get('specs.style','')))
+ if sh: handles.append(sh)
+ ph = verify(PATTERN_HANDLE.get(mf.get('specs.pattern','')))
+ if ph: handles.append(ph)
+ # dedupe preserve order
+ seen=set(); handles=[h for h in handles if not (h in seen or seen.add(h))]
+ p['collections'] = handles
+ for h in handles: handle_freq[h]+=1
+ if len(handles)>=1: routed_ct+=1
+
+ # --- TAGS ---
+ tags = derive_tags(mf, color_names, bg_name)
+ p['tags'] = tags
+ tag_total += len(tags)
+
+ if (i+1) % 50 == 0:
+ print(f' [{i+1}/{len(payloads)}] color-done={done} failed={failed} $0 (local)', flush=True)
+
+# write outputs
+json.dump(payloads, open(os.path.join(DATA,'onboard-payloads-12-enriched.json'),'w'), separators=(',',':'))
+json.dump(fail_list, open(os.path.join(DATA,'onboard-color-fail-12.json'),'w'), indent=1)
+
+N=len(payloads)
+print('\n===== ENRICHMENT SUMMARY =====')
+print(f'color: {done} done / {failed} failed image download; avg colors/product = {total_colors/max(done,1):.2f}')
+print(f'collections: {routed_ct}/{N} routed >=1')
+print('top-10 handle frequency:')
+for h,c in handle_freq.most_common(10): print(f' {c:4d} {h}')
+print('color_family with NO live handle:')
+for f,c in missing_family.most_common(): print(f' {c:4d} {f}')
+print(f'tags: avg {tag_total/N:.2f} tags/product')
+print('$0 (local) — PIL/numpy, no metered API')
diff --git a/recover-images-17.mjs b/recover-images-17.mjs
new file mode 100644
index 0000000..4961cd9
--- /dev/null
+++ b/recover-images-17.mjs
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+// recover-images-17.mjs — brewster_catalog.image_url is cross-linked (wrong image per SKU) for the 17.
+// The CORRECT CDN images exist in the table under OTHER SKUs; recover each by matching this SKU's
+// product_name slug against the image FILENAME slug. Writes corrected image_url into onboard-rows-17.json.
+// $0 local. Does NOT write to brewster_catalog (that DB-level relink is a separate gated job).
+import fs from 'node:fs'; import { execSync } from 'node:child_process';
+const slug=s=>String(s||'').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'').replace(/-wallpaper$/,'');
+// load every brewster_catalog image once: filename-slug -> url
+const out=execSync(`PGPASSWORD=DW2024! /opt/homebrew/opt/postgresql@14/bin/psql -h 127.0.0.1 -U dw_admin -d dw_unified -tA -F'|' -c "select image_url from brewster_catalog where image_url is not null and image_url<>''"`,{encoding:'utf8'}).trim();
+const byslug=new Map();
+for(const url of out.split('\n').filter(Boolean)){
+ const fn=url.split('/').pop().replace(/^\d+_/,'').replace(/\.[a-z]+$/i,''); // strip leading id_ and ext
+ const s=slug(fn);
+ if(!byslug.has(s)) byslug.set(s,url);
+}
+const rows=JSON.parse(fs.readFileSync('data/onboard-rows-17.json','utf8'));
+let fixed=0,exact=0,unmatched=[];
+for(const r of rows){
+ const want=slug(r.product_name);
+ let url=byslug.get(want);
+ if(!url){ // try loosened: find a filename slug that CONTAINS the product slug or vice versa
+ for(const [s,u] of byslug){ if(s===want){url=u;break;} }
+ }
+ if(url){ const wrong=r.image_url; r.image_url=url; r._recovered=(wrong!==url); if(wrong!==url)fixed++; else exact++; }
+ else unmatched.push(r.export_sku+' ('+want+')');
+}
+fs.writeFileSync('data/onboard-rows-17.json',JSON.stringify(rows,null,1));
+console.log(`recovered: ${fixed} corrected, ${exact} already-correct, ${unmatched.length} UNMATCHED`);
+if(unmatched.length) console.log(' UNMATCHED (cannot onboard):', unmatched.join(', '));
+// verify: does each corrected filename now contain the product-name slug?
+let ok=0; for(const r of rows){ if(r.image_url && r.image_url.toLowerCase().includes(slug(r.product_name).split('-')[0])) ok++; }
+console.log(` filename now name-matches: ${ok}/${rows.length}`);
+console.log('$0 (local)');
← 15b3d86 auto-save: 2026-07-30T06:45:19 (1 files) — cadence/data/late
·
back to York Reprice 2026 08
·
TK-10031: onboard-12 color-fail artifact (empty — all 12 ima ea979b9 →