[object Object]

← back to Fentucci Naturals

auto-save: 2026-07-22T18:46:04 (2 files) — data/lookbook-verification.json scripts/lookbook-verify.js

56057b48efe77376ba33db88bb7ddbfb7d31c06c · 2026-07-22 18:46:08 -0700 · Steve Abrams

Files touched

Diff

commit 56057b48efe77376ba33db88bb7ddbfb7d31c06c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 22 18:46:08 2026 -0700

    auto-save: 2026-07-22T18:46:04 (2 files) — data/lookbook-verification.json scripts/lookbook-verify.js
---
 data/lookbook-verification.json | 96 +++++++++++++++++++++++++++++++++++++++++
 scripts/lookbook-verify.js      | 70 ++++++++++++++++++++++++++++++
 2 files changed, 166 insertions(+)

diff --git a/data/lookbook-verification.json b/data/lookbook-verification.json
new file mode 100644
index 0000000..7affd72
--- /dev/null
+++ b/data/lookbook-verification.json
@@ -0,0 +1,96 @@
+{
+  "checked_at": "2026-07-23T01:32:54.202Z",
+  "method": "playwright chromium, waitUntil load + wix-media img-count stabilization (Wix long-polls; networkidle never fires) + full scroll (lazy-load) + settle; rendered DOM imgs incl. empty alts + rendered innerText scanned for SKU-shaped tokens",
+  "pages": {
+    "reflectionvol1": {
+      "url": "https://www.tokiwausa.com/reflectionvol1",
+      "page_title": "Reflections Vol.1",
+      "rendered_wix_media_imgs": 15,
+      "rendered_gallery_items": 12,
+      "gallery_items_with_alt": 0,
+      "sku_bearing_alts": [],
+      "sku_tokens_in_rendered_text": [],
+      "sample_alts": [],
+      "sample_gallery_srcs": [
+        "https://static.wixstatic.com/media/5fb668_b9ae200b6bc24a74a03d25c73f6b65bc~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_a5272c4e08fd4c9f8d0be8316c29fcab~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_3c407ed75841498f8a50c86d9385235a~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_1b211051bd8a490e9682812d562cf716~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_eef017cdea45408895cf87098401b206~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua"
+      ],
+      "verdict": "lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text"
+    },
+    "reflectionsvol2": {
+      "url": "https://www.tokiwausa.com/reflectionsvol2",
+      "page_title": "Reflections Vol.2 | Tokiwa Tusho.Co.,Inc.",
+      "rendered_wix_media_imgs": 13,
+      "rendered_gallery_items": 10,
+      "gallery_items_with_alt": 0,
+      "sku_bearing_alts": [],
+      "sku_tokens_in_rendered_text": [],
+      "sample_alts": [],
+      "sample_gallery_srcs": [
+        "https://static.wixstatic.com/media/5fb668_401a7cc5454d48c29728905bfbac4a10~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_3174d137951a4627aa7f6ce0de36a5e4~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_52e662167d554cd6982e634674fe2222~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_e7fb47aa760848789bd43ece7015a2aa~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_9934968e340040e9a3fbd1f027c7048f~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua"
+      ],
+      "verdict": "lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text"
+    },
+    "greenbookcollection": {
+      "url": "https://www.tokiwausa.com/greenbookcollection",
+      "page_title": "Green Book | Tokiwa Tusho.Co.,Inc.",
+      "rendered_wix_media_imgs": 20,
+      "rendered_gallery_items": 17,
+      "gallery_items_with_alt": 0,
+      "sku_bearing_alts": [],
+      "sku_tokens_in_rendered_text": [],
+      "sample_alts": [],
+      "sample_gallery_srcs": [
+        "https://static.wixstatic.com/media/5fb668_8321bd445a564e5eb788f83495aa2c50~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_dea3765fa97649f6932ad99fb87a4b3b~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_57175ff24c12440c9a8d3a3e544b855d~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_60d2cac4180b4ed2aa43348c0e07dc09~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_7c7dc9f419e548ebb0938ae13221553b~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua"
+      ],
+      "verdict": "lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text"
+    },
+    "glassbeadscollection": {
+      "url": "https://www.tokiwausa.com/glassbeadscollection",
+      "page_title": "Glass Beads Collection | Tokiwa Tusho.Co.,Inc.",
+      "rendered_wix_media_imgs": 11,
+      "rendered_gallery_items": 8,
+      "gallery_items_with_alt": 0,
+      "sku_bearing_alts": [],
+      "sku_tokens_in_rendered_text": [],
+      "sample_alts": [],
+      "sample_gallery_srcs": [
+        "https://static.wixstatic.com/media/5fb668_c4d4852826e4419c84938e2c0cdbbff3~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_2889a6919bb9437abb04832434df8eb4~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_ad76870fff354b7d8b0d015c1b1ccaca~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_3b3fb9cb8d604050b1f2d6c656c00ef1~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_bea00b8374264770a7a74ecf59a58699~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua"
+      ],
+      "verdict": "lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text"
+    },
+    "textilecollection": {
+      "url": "https://www.tokiwausa.com/textilecollection",
+      "page_title": "Textile Collection | Tokiwa Tusho.Co.,Inc.",
+      "rendered_wix_media_imgs": 10,
+      "rendered_gallery_items": 7,
+      "gallery_items_with_alt": 0,
+      "sku_bearing_alts": [],
+      "sku_tokens_in_rendered_text": [],
+      "sample_alts": [],
+      "sample_gallery_srcs": [
+        "https://static.wixstatic.com/media/5fb668_b5d810cbf0634d4faf46e001aa03f6d0~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_32b8ee321d2e4b25bad6da13e8a61682~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_fed79ce79656430882e0dc86cb106fce~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_167e3a89c3c94a2ebbad3c0f8a47ce5c~mv2.jpg/v1/fill/w_312,h_312,q_90,enc_avif,qua",
+        "https://static.wixstatic.com/media/5fb668_15096524207145b5a516029902e76895~mv2.jpg/v1/fill/w_313,h_312,q_90,enc_avif,qua"
+      ],
+      "verdict": "lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text"
+    }
+  }
+}
\ No newline at end of file
diff --git a/scripts/lookbook-verify.js b/scripts/lookbook-verify.js
new file mode 100644
index 0000000..6d26726
--- /dev/null
+++ b/scripts/lookbook-verify.js
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+// FIX 3 — verify the 5 zero-yield lookbook COLLECTIONS pages with a REAL
+// rendered browser (Playwright chromium). The plain-fetch scraper found 0
+// SKU-bearing items on these Wix Pro Gallery pages; gallery items can be
+// client-hydrated, so the SSR-only result must be proven, not assumed.
+// Counts ALL rendered wixstatic media imgs (empty alts included — an earlier
+// version wrongly junk-filtered alt="" and reported 0 rendered imgs), checks
+// alts AND rendered page text for SKU-shaped tokens, and writes evidence to
+// data/lookbook-verification.json.
+const fs = require('fs');
+const path = require('path');
+const { chromium } = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/playwright');
+
+const BASE = 'https://www.tokiwausa.com';
+const PAGES = ['reflectionvol1', 'reflectionsvol2', 'greenbookcollection', 'glassbeadscollection', 'textilecollection'];
+// site-chrome imgs (logo strip, social icons) — identified by size/uri, not alt
+const SKUISH = /^([A-Z]{1,4}-?\d{3,5}[A-D]?|005-\d{3}-003(-\d+)?|[A-Z -]{2,20}NO\.\s?\d+|[A-Za-z ]+#\d+|[A-Z]{2,6}-[A-Z0-9]{0,8}\d)$/i;
+const TEXT_SKU = /\b([A-Z]{1,4}-\d{3,5}[A-D]?|005-\d{3}-003-\d+|[A-Z]{2,10}\s?NO\.\s?\d+|KP\d{4}|GB-\d{4}|PD-\d{4})\b/g;
+
+(async () => {
+  const browser = await chromium.launch();
+  const out = { checked_at: new Date().toISOString(), method: 'playwright chromium, waitUntil load + wix-media img-count stabilization (Wix long-polls; networkidle never fires) + full scroll (lazy-load) + settle; rendered DOM imgs incl. empty alts + rendered innerText scanned for SKU-shaped tokens', pages: {} };
+  for (const slug of PAGES) {
+    const page = await browser.newPage({ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36' });
+    const url = `${BASE}/${slug}`;
+    await page.goto(url, { waitUntil: 'load', timeout: 60000 });
+    let prev = -1;
+    for (let i = 0; i < 20; i++) {
+      await page.waitForTimeout(1500);
+      const n = await page.$$eval('img', els => els.filter(e => (e.currentSrc || e.src || '').includes('static.wixstatic.com/media')).length);
+      if (n === prev && n > 0 && i >= 3) break;
+      prev = n;
+    }
+    await page.evaluate(async () => {
+      for (let y = 0; y < document.body.scrollHeight; y += 600) { window.scrollTo(0, y); await new Promise(r => setTimeout(r, 150)); }
+      window.scrollTo(0, document.body.scrollHeight);
+    });
+    await page.waitForTimeout(6000);
+    const imgs = await page.$$eval('img', els => els.map(e => ({
+      src: e.currentSrc || e.src || '', alt: (e.alt || '').trim(),
+      w: e.naturalWidth, h: e.naturalHeight, visible: !!(e.offsetWidth || e.offsetHeight),
+    })));
+    const text = await page.evaluate(() => document.body.innerText);
+    const media = imgs.filter(i => i.src.includes('static.wixstatic.com/media'));
+    // gallery items = visible, substantial renders (logo strip ~152x40, icons 20x20 excluded by size)
+    const gallery = media.filter(i => i.visible && i.w >= 100 && i.h >= 100);
+    const altBases = gallery.map(i => i.alt.replace(/\.(jpe?g|png|webp)$/i, '')).filter(Boolean);
+    const skuAlts = [...new Set(altBases.filter(b => SKUISH.test(b)))];
+    const skuText = [...new Set([...text.matchAll(TEXT_SKU)].map(m => m[1]))];
+    out.pages[slug] = {
+      url,
+      page_title: await page.title(),
+      rendered_wix_media_imgs: media.length,
+      rendered_gallery_items: gallery.length,
+      gallery_items_with_alt: altBases.length,
+      sku_bearing_alts: skuAlts,
+      sku_tokens_in_rendered_text: skuText,
+      sample_alts: [...new Set(altBases)].slice(0, 15),
+      sample_gallery_srcs: gallery.slice(0, 5).map(i => i.src.slice(0, 120)),
+      verdict: (skuAlts.length || skuText.length)
+        ? 'SKU-BEARING — scrape into pipeline'
+        : 'lookbook-only: gallery renders room-scene/editorial spreads with no per-SKU alts or SKU text',
+    };
+    console.log(slug, JSON.stringify(out.pages[slug], null, 1));
+    await page.close();
+  }
+  await browser.close();
+  fs.writeFileSync(path.join(__dirname, '..', 'data', 'lookbook-verification.json'), JSON.stringify(out, null, 2));
+  console.log('wrote data/lookbook-verification.json');
+})();

← f3f925a FIX 2: quote-only hardening — custom.price_mode=quote_only +  ·  back to Fentucci Naturals  ·  FIX 1 residue: sync specs.pattern jsonb to renamed towns (23 ab35a39 →