Fabricut Landing
Search the build
-
e84ffe02026-09-26 auto-data-snapshot: 2026-09-26T09:21:27 (1 data files) — data/image-restore-map.json -
fbab5692026-09-25 auto-data-snapshot: 2026-09-25T09:20:47 (1 data files) — data/image-restore-map.json -
ffdeaef2026-09-24 auto-data-snapshot: 2026-09-24T09:12:24 (1 data files) — data/image-restore-map.json -
51370032026-09-23 auto-data-snapshot: 2026-09-23T09:31:43 (1 data files) — data/image-restore-map.json -
b9ac26a2026-09-22 auto-data-snapshot: 2026-09-22T09:54:34 (1 data files) — data/image-restore-map.json -
4fba91a2026-09-21 auto-data-snapshot: 2026-09-21T09:21:33 (1 data files) — data/image-restore-map.json -
9e6ef992026-09-20 auto-data-snapshot: 2026-09-20T09:27:07 (1 data files) — data/image-restore-map.json -
74067fb2026-09-19 auto-data-snapshot: 2026-09-19T09:27:32 (1 data files) — data/image-restore-map.json -
2c806cf2026-09-18 auto-data-snapshot: 2026-09-18T09:26:51 (1 data files) — data/image-restore-map.json -
a53606e2026-09-17 auto-data-snapshot: 2026-09-17T09:20:48 (1 data files) — data/image-restore-map.json -
fe6f6d22026-09-16 auto-data-snapshot: 2026-09-16T09:33:20 (1 data files) — data/image-restore-map.json -
86026ad2026-09-15 auto-data-snapshot: 2026-09-15T09:16:55 (1 data files) — data/image-restore-map.json -
c3632632026-09-15 TK-11438: migrate build script postgres connections to unix socket -
cb64a312026-09-15 TK-11438: migrate postgres pool to unix socket (darwin fallback) -
ebe62bd2026-09-14 auto-data-snapshot: 2026-09-14T08:53:29 (1 data files) — data/image-restore-map.json -
7c50f582026-09-13 auto-data-snapshot: 2026-09-13T09:13:35 (1 data files) — data/image-restore-map.json -
23bbb762026-09-12 auto-data-snapshot: 2026-09-12T09:28:54 (1 data files) — data/image-restore-map.json -
468f0b02026-09-11 auto-data-snapshot: 2026-09-11T09:31:49 (1 data files) — data/image-restore-map.json -
d1fa60d2026-09-10 auto-data-snapshot: 2026-09-10T09:22:46 (1 data files) — data/image-restore-map.json -
20dd4d22026-09-09 auto-data-snapshot: 2026-09-09T09:32:15 (1 data files) — data/image-restore-map.json -
b1c52da2026-09-08 auto-data-snapshot: 2026-09-08T09:02:39 (1 data files) — data/image-restore-map.json -
8722a5f2026-09-07 auto-data-snapshot: 2026-09-07T09:25:49 (1 data files) — data/image-restore-map.json -
994449d2026-09-06 auto-data-snapshot: 2026-09-06T09:04:17 (1 data files) — data/image-restore-map.json -
1f6d1092026-09-05 auto-data-snapshot: 2026-09-05T09:24:41 (1 data files) — data/image-restore-map.json -
30021b72026-09-04 auto-data-snapshot: 2026-09-04T09:09:45 (1 data files) — data/image-restore-map.json -
bcacd8b2026-09-04 deploy: guard prod-only runtime data from rsync --delete -
a28d5492026-09-03 auto-data-snapshot: 2026-09-03T09:14:19 (1 data files) — data/image-restore-map.json -
af713742026-08-30 auto-data-snapshot: 2026-08-30T09:05:58 (1 data files) — data/image-restore-map.json -
e62c6ec2026-08-29 auto-data-snapshot: 2026-08-29T09:06:18 (1 data files) — data/image-restore-map.json -
a6a7f612026-08-28 auto-data-snapshot: 2026-08-28T09:02:22 (1 data files) — data/image-restore-map.json -
071efa72026-08-27 auto-data-snapshot: 2026-08-27T09:33:34 (1 data files) — data/image-restore-map.json -
193fe242026-08-26 auto-data-snapshot: 2026-08-26T09:38:32 (1 data files) — data/image-restore-map.json -
f2af87b2026-08-25 auto-data-snapshot: 2026-08-25T09:32:22 (1 data files) — data/image-restore-map.json -
a94cc212026-08-24 auto-data-snapshot: 2026-08-24T20:06:56 (1 data files) — data/image-restore-map.json -
5986a142026-08-24 fabricut: make localizer restore-map merge-safe (never clobber prior reversibility) -
3a387722026-08-24 fabricut: localize all images off vendor S3 to DW public URLs (TK-10823) -
77235df2026-08-24 auto-data-snapshot: 2026-08-24T19:04:21 (3 data files) — public/img/fabricut/2910902.jpg public/img/fabricut/2910902_stylized_secondary__room.jpg public/img/fabricut/2914903.jpg -
e5887062026-08-24 fabricut: filter dead _stylized_secondary room images (403 AccessDenied from vendor S3) -
41f035e2026-08-24 fix(fabricut): make build schema-resilient + build on canonical Mac2 -
bdb71d32026-08-24 chore(fabricut): rebase onto live — add GA snippet + pin prod port 35959 (reconcile pre-deploy drift) -
c7514d02026-08-24 fix(fabricut): group grid by pattern — one card per pattern with colorway swatch strip (1325 cards -> 189) -
aa2887a2026-08-20 chore: v1.0.0 — go-live (session close) -
935a2082026-08-20 SEO: dynamic sitemap on public + noindex robots on internal -
5048cfe2026-08-20 Public site hardening (Cody red-team FIX FIRST): remove vendor-email/selection/curate routes, strip internal chrome (pill/modal/Stock-Price/net-cost/ordering-internal) via isPublic guard, fix title (no dw_unified), drop Phillipe-Romano curate button, add robots + log-only inquiry -
7c24d192026-08-20 Fabricut microsite (fabricut-landing): DW-branded self-contained viewer over fabricut_catalog (1325 products, per-yard, real-hex color sort)
Authors
- auto-commit-fleet32
- Steve13
Agents used
Skills used
- /image-restore-map32
- /fabricut6
- /quadrille1
- /claude1
- /code1
- /localize-images1
- /encoding1
- /restore-images1
- /search1
- /selection1
- /curate1
- /modal1
- /net-cost1
- /ordering-internal1
Creative ideas + design notes
cb64a31 · 2026-09-15 · TK-11438: migrate postgres pool to unix socket (darwin fallback)
Use process.env.PGHOST || darwin?/tmp:127.0.0.1 so Mac2 services use the unix socket at /tmp and Kamatera keeps TCP until its own migration. Undo: git revert HEAD
bcacd8b · 2026-09-04 · deploy: guard prod-only runtime data from rsync --delete
deploy.sh runs 'rsync -az --delete' with no data/ exclude, so a deploy overwrote the box's runtime file with the local copy and destroyed everything written since the last deploy. Added a surgical RSYNC_EXTRA_EXCLUDES for this project's runtime path(s) only, so genuine build artifacts under data/ keep syncing. Verified by itemized rsync --dry-run against prod: the runtime file is listed for transfer WITHOUT the exclude and absent WITH it. Fleet sweep, TK-11227. Same bug class as the July 2026 artmura/quadrille mis-target fix and the abramsagency lead-ledger fix (TK-10536). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013mq9RQtVZZEWvreDqqTgv2
5986a14 · 2026-08-24 · fabricut: make localizer restore-map merge-safe (never clobber prior reversibility)
The daily-post recurrence guard runs localize-images.js --apply every day; a steady-state run finds 0 S3 rows and previously rebuilt an EMPTY restore-map, wiping reversibility. Now it MERGES by dw_sku (keeps the oldest recorded original S3 url, updates the localized target), so the 1325-row map survives empty runs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3a38772 · 2026-08-24 · fabricut: localize all images off vendor S3 to DW public URLs (TK-10823)
- scripts/localize-images.js: download 1310 imgs (272MB) to public/img/fabricut, prefer full-res product_images/<id>.jpg (900x1200) over 600px thumbnails, rewrite fabricut_catalog.image_url(1325)+all_images(579) to https://fabricut.designerwallcoverings.com/img/fabricut/<id>.jpg (DTD 5/5 verdict B: public absolute DW URL works for BOTH microsite AND Shopify daily-post). - Rooms were NOT dead — the _stylized_secondary 403 was a casing/encoding artifact; all return HTTP 200. Localized 526 real room shots (real rooms 71->526), dropped only 2 genuinely-403 rooms. NO AI room generation needed (DTD unanimous SKIP). - build-fabricut.js: replace obsolete _stylized_secondary drop with an S3-hotlink drop so the microsite never serves off fabricut.img again. - scripts/restore-images.js + data/image-restore-map.json: full reversibility. - gitignore the 272MB image binaries (reproducible + rsync-shipped on deploy). products.json: 0 S3 hotlinks (was 1325), 1325 DW-local swatches, 526 real rooms. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41f035e · 2026-08-24 · fix(fabricut): make build schema-resilient + build on canonical Mac2
build-fabricut.js crashed on Kamatera ('column book_name does not exist') because
the Kamatera fabricut_catalog mirror is schema-drifted (only has 'collection').
Add an information_schema guard so the query degrades gracefully instead of crashing,
and move the data build to a PREDEPLOY_HOOK that runs on canonical Mac2 (where
book_name + real book labels live) — ship the finished products.json instead of
rebuilding on the drifted mirror. Verified local build: 1325 products, 11 books, 189 patterns.
c7514d0 · 2026-08-24 · fix(fabricut): group grid by pattern — one card per pattern with colorway swatch strip (1325 cards -> 189)
Root cause of perceived 'duplicates': the grid rendered one card per colorway/SKU, so a 189-pattern catalog exploded into 1325 near-identical cards (94% of patterns have >1 colorway). Data/API had 0 true duplicate SKUs. Fix is front-end only: groupByPattern() collapses colorways of a series into one pattern card (swatch strip + N-colors), applied after filtering so facets/search re-group correctly. Verified headless: 189 pattern cards, color filter 0-leak, infinite-scroll no dup.
File tree
- .deploy.conf
- .gitignore
- _sangetsu_spec.mjs
- _verifylive.mjs
- data/image-restore-map.json
- docs/proof/grid.png
- docs/proof/home.png
- docs/proof/pdp-memo-modal.png
- kravet_fe_full.mjs
- launchd/com.steve.astek-data-refresh.plist
- launchd/com.steve.astek-monthly-refresh.plist
- lib/vendor-requests.js
- node_modules
- package-lock.json
- package.json
- public/drill.js
- public/img/fabricut/2910902.jpg
- public/img/fabricut/2910902_stylized_secondary__room.jpg
- public/img/fabricut/2914903.jpg
- public/index.html
- public/nav-agent/nav-agent.css
- public/nav-agent/nav-agent.js
- public/product.html
- public/styles.css
- scripts/build-fabricut.js
- scripts/build-products-json.js
- scripts/localize-images.js
- scripts/monthly-refresh.sh
- scripts/restore-images.js
- scripts/scrape-astek.js
- server.js