Reidwitlin Landing
Search the build
-
685f7c82026-07-15 reidwitlin-landing: add Memo/Stock/Price chip actions (shared vendor-requests module) -
d7714e52026-07-07 chore: lint, refactor, v0.2.3 (session close) -
b8b384a2026-07-07 auto-save: 2026-07-07T12:30:21 (4 files) — lib/backfill-source-images.js lib/relabel-colorways.js scripts/backfill-source-images.js scripts/build-rwltd-data.js -
d67eec92026-07-07 reidwitlin: contrarian FIX-THEN-SHIP — guard silent-zero-result feed failure (throw if <50 patterns), unify slug apostrophe-strip lib<->build, catch distinguishes integration vs feed errors; integration path exercised -
e7985902026-07-07 reidwitlin: wire source-image backfill into canonical build (shared lib) so a full rebuild preserves the 190 recovered photos instead of regressing to 197 no-photo; refactor standalone patcher onto same lib -
593987a2026-07-07 reidwitlin: recompute facets after backfill re-partition (was stale 799; now matches 989 published) + always-write idempotent -
a86679b2026-07-07 reidwitlin: backfill 190 authoritative colorway photos from free rwltd.com feed -> auto-restore per own-photo-or-draft rule (799->989 published, 197->7 drafted) -
4535dde2026-07-07 reidwitlin: enforce own-photo-or-draft — hide 197 no-own-photo colorways from live (799 published, 197 drafted+preserved for auto-restore) -
7fac2fd2026-07-07 reidwitlin PDP: fix CSS filter cascade — move repflag chip out of desaturated .main so the in-image true-color chip renders accurate (contrarian catch) -
ff792e82026-07-07 Contrarian FIX-FIRST: block sibling-swatch mislabels + harden swatch matching -
6d6aabd2026-07-07 reidwitlin PDP: harden hybrid-disclosure hero for no-photo colorways — desaturate flagged representative photo + enlarge/emphasize true-color chip ('Actual color'), per DTD verdict -
a4f7fcf2026-07-07 Recover 353 per-colorway swatches by filename match — no re-scrape, no spend -
92d5aeb2026-07-07 vendor-requests: resolve george send-token/auth across Mac + Kamatera paths (fix email_failed) -
474a1702026-07-07 vendor-requests: self-bootstrap vendor_requests table (fix 'relation does not exist' on fresh DB) -
8418a552026-07-07 reidwitlin: relabel mis-stamped colorways from pixel hue so pair-card text matches its image (Dreamer/Dream On/Dream Weaver, 33 products) -
d52d1612026-07-07 Color classifier: light+desaturated warms are cream/beige, not vivid orange/gold -
c7c7db02026-07-07 Contrarian-gate fixes: apostrophe slug bug, solo-series dedup, jewel-tone rescue, stale comment -
d08cf852026-07-07 PDP hybrid color disclosure (DTD verdict C): true-color chip + representative flag -
918c1df2026-07-07 Catalog data-quality sweep: chroma-neutral detection, slash-label tidy, unique-only galleries -
941c6a22026-07-07 Fix systemic color mislabel: derive colorway from mfr_sku + bucket/hue from AI-vision hex -
a2068552026-07-06 chore: pin port + stable .env credential via pm2, guarded dotenv, v0.2.2 (session close) -
98a3a2a2026-07-02 Retrofit front page to the internal-line-viewer spec (astek :9944 parity): left panel with search + pattern type-ahead + 7 collapsed facet tables (Books/Styles/Colors/Patterns/Colorways/Width/Repeat; Styles derived from tags — no style column in rwltd_catalog; Material/Length/Match skipped, 0/996 populated), value+count click-to-filter with teal summary badge + Clear, Card Fields toggles down to pure image grid, density slider drives --cols AND --fs type scale, tight 1px/2px/8px cards, data-href + single delegated click (no <a>-wrapped cards), rwltd.* localStorage namespace, location.origin fetches; memo-sample modal + PDP flow kept. E2E-verified Chromium + WebKit creds-in-URL: 120 grid children == 120 cards, 0 empty anchors, all tables collapsed, filter 996→341→996, imgonly clean, --fs 1.18→0.50, 0 console/page errors. -
41474dc2026-07-02 chore: addendum gate clean, v0.2.1 (session close) -
466dd2a2026-07-02 discounts are line-specific (Steve): Artmura % unconfirmed — removed inherited newwall 20%, Get Price confirms; module sync incl. no-DW-SKU-in-outbound-email rule -
7aa3cbb2026-07-02 buy-from distributor support: Artmura purchases route via NewWall (tricia@newwall.com, 866-770-2111, 20% newwall registry discount) — emails greet the distributor, PDP shows Buy From row -
b5d77422026-07-02 chore: lint clean, refactor, v0.2.0 (session close) -
366f0902026-07-02 data refresh with confirmed 20% rwltd discount -
ab341972026-07-02 internal PDP port from astek template: pricing tiers, Request Memo/Check Stock/Get Price with vendor-email preview+send (REQ numbers), Call Vendor bar, vendor meta from registry+fmpro (account-note sanitizer); pm2 reidwitlin-landing :9945 -
19bbf562026-07-02 Grid UI upgrade: density slider to 20 cols, grid/list view toggle with sticky sortable column headers (10 fields, asc/desc, full-set sort), Safari user:pass@ fetch fix (location.origin) -
f1817572026-07-02 chore: v0.1.1 (session close — lint clean, refactor auto-saved in 2baaa11) -
2baaa112026-07-02 auto-save: 2026-07-02T07:46:12 (2 files) — scripts/build-rwltd-data.js server.js -
86b29a32026-07-02 deploy: pin reidwitlin to free port 9952 -
45081762026-07-02 reidwitlin-landing: Kamatera-sourced build script, deps, 996-product data, deploy config -
ac85f962026-07-02 Reid Witlin internal landing — cloned from astek-landing, catalog from enriched rwltd_catalog (996 products), Basic Auth admin/DW2024!
Authors
- Steve34
Agents used
Skills used
- /gold4
- /hue3
- /backfill-source-images2
- /build-rwltd-data2
- /yolo2
- /grey2
- /relabel-colorways1
- /shared1
- /room1
- /lifestyle1
- /emphasize1
- /auth1
- /beige1
- /neutral1
- /brown1
- /black1
- /utility1
- /near-black1
- /ivory1
- /taupe1
- /family1
- /off-white1
- /white1
- /red1
- /page1
- /list1
- /desc1
Creative ideas + design notes
4535dde · 2026-07-07 · reidwitlin: enforce own-photo-or-draft — hide 197 no-own-photo colorways from live (799 published, 197 drafted+preserved for auto-restore)
Steve's rule 2026-07-07: a representative/shared stand-in doesn't count as 'has an image'. Partition on the build's derived image_note signal; drafts kept in snapshot.drafts[] and auto-restore on a future rebuild once a real colorway photo lands. Kills hybrid disclosure. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ff792e8 · 2026-07-07 · Contrarian FIX-FIRST: block sibling-swatch mislabels + harden swatch matching
The /yolo contrarian caught 4 products displaying a CONFIRMED SIBLING colorway's named swatch under a 'no photo' note (turn-up-cherry & -chocolate showing canary.jpg, not-leather-slate->seal, vinyltini-crimson->baileys) — a wrong-color lie, worse than representative. Fixes: - TIER 4 now checks a claimed-swatch map; if the only fallback image is another colorway's confirmed swatch, show NONE (honest 0-image) instead of the wrong color. - Mood/room/lifestyle shots excluded from matching (kills kinky-copy-3 variant '3' false-matching bouclette_knotty_mood_shot_3). - imgMatchesColorway: token-sequence match instead of endsWith (kills Gold->marigold), and strips SERIES tokens first (kills Linen Like sibling contamination). Counts: 639 name / 16 variant / 144 unique / 193 rep / 4 sibling-blocked. Verified.
a4f7fcf · 2026-07-07 · Recover 353 per-colorway swatches by filename match — no re-scrape, no spend
'55% have no photo' was a data-shape illusion: the scrape stored each series' full swatch set in every colorway's image list, so nothing looked unique — but the colorway swatch is present, named after the colorway (Cassis.jpg, Bloodline_Fawn.jpg, 18695-Beige) or the mfr_sku variant number (Acquisitions_160). Two-tier filename match: 636 by colorway-name, 18 by variant#, 144 unique, 198 still representative (opaque hash filenames, no colorway key). image_note 551 -> 198. Coexists with the other session's relabelUnreliableSeries pass. Gemini backfill moot (catalog already 100% enriched).
d52d161 · 2026-07-07 · Color classifier: light+desaturated warms are cream/beige, not vivid orange/gold
#C9B8A0 (I'm Crushed Beige) was bucketed 'orange' — a warm tan at l=0.71 slipping under the gold hue cutoff. Perceived colorfulness needs more chroma at high lightness, so warm colors with l>=0.62 and chroma<0.22 now route to white/neutral. Verified: real lemon #E1D781, bright gold #C59024, bronze, muddy-gold all keep their buckets; 0 residual light-desat warms in orange/gold. Palette: white 207/grey 270/gold 102/brown 111.
c7c7db0 · 2026-07-07 · Contrarian-gate fixes: apostrophe slug bug, solo-series dedup, jewel-tone rescue, stale comment
- CRITICAL: slug() now strips apostrophes before the char-class collapse, so
'I'm Crushed' -> 'im-crushed' matches the vendor mfr_sku. Fixes 11 doubled titles
('I'm Crushed Im Crushed Beige' -> 'I'm Crushed Beige'). Residual doubled titles 0.
- Solo-colorway series dedup (sku==series slug): 'By Hand Smooth By Hand Smooth' -> 'By Hand Smooth'.
- bucketFromHex jewel-tone rescue: muted MID-tone COOL colors (120-300deg, chroma>=0.06)
keep their bucket instead of collapsing to grey — Admiral #393F4C -> blue (navy),
Turquoise #3A5757 -> teal. Warm neutrals + near-white/black unchanged (no regression).
- Removed stale 'Astek' copy-paste comment in product.html.
Found by the /yolo contrarian adversarial gate.
d08cf85 · 2026-07-07 · PDP hybrid color disclosure (DTD verdict C): true-color chip + representative flag
For the 551 colorways with no colorway-specific photo, the hero shows the shared series texture BUT now carries: (1) a true-color dot rendered from the AI-vision hex overlaid on the hero, (2) a true-color chip + hex next to the colorway name (shown on ALL PDPs), (3) a visible 'representative — no colorway-specific photo on file' note. Resolves the honesty/utility tension: designers keep the texture cue and see the real color, never deceived. DTD panel unanimous C (Codex+Qwen).
918c1df · 2026-07-07 · Catalog data-quality sweep: chroma-neutral detection, slash-label tidy, unique-only galleries
- bucketFromHex now uses CHROMA (max-min) not HSL saturation for the neutral gate — HSL 's' spikes on pastels/near-black (#F5F5DC beige read as saturated gold). Fixes 133 neutral-hex-in-chromatic-bucket mislabels (beige/ivory/taupe/ slate now correctly white/grey). neutral_hex conflicts 133 -> 0. - tidyLabel() collapses AI 'family/family' slash labels (White/off-white -> Off-White). label_has_slash 33 -> 0. - Gallery de-contamination pass: only ~444/996 colorways have a unique swatch; the rest reused series-generic shots rendering the WRONG color. PDPs now show only colorway-unique imagery (single hero, no misleading thumbnail strip); 551 no-photo colorways flagged image_note='representative'. Shared-image PDPs ~994 -> 13. - blue bucket 202 -> 28; neutrals now correctly dominate (grey 294/white 161).
941c6a2 · 2026-07-07 · Fix systemic color mislabel: derive colorway from mfr_sku + bucket/hue from AI-vision hex
rwltd_catalog.color_name was mis-scraped (whole Aura series stamped 'Blue'/hue 215 on brown/gold/red swatches; 567/996 bucket-vs-hex conflicts). build-rwltd-data.js now recovers the true colorway from mfr_sku (aura-muddy-gold -> 'Muddy Gold') and classifies color_bucket/hue from color_hex pixels. Conflicts 567 -> 13. Blue cohort 202 -> 50. Fixes 'Aura Blue' showing a dark-brown swatch + wrong-color pairs row.
File tree
- .deploy.conf
- .gitignore
- data/products.json
- docs/proof/grid.png
- docs/proof/home.png
- docs/proof/pdp-memo-modal.png
- ecosystem.config.js
- lib/backfill-source-images.js
- lib/relabel-colorways.js
- lib/vendor-requests.js
- package-lock.json
- package.json
- public/index.html
- public/product.html
- public/styles.css
- scripts/backfill-source-images.js
- scripts/build-rwltd-data.js
- scripts/fix-colorway-labels.js
- server.js