Dw Domain Fleet

repo: ~/Projects/dw-domain-fleet · 57 commits · 1 in last 24h, 1 in last 7d ·

Search the build

57 commits indexed

  1. 2cb23f3 2026-07-27 migrate GoDaddy auth → Bearer PAT (TK-10 key rotation); sso-key fallback retained
  2. 7b1c304 2026-07-06 Square fleet card images (aspect-ratio 1/1)
  3. 4936c4d 2026-06-20 Add Tier-A promo-banner desktop verification screenshot from prior run
  4. e0e0d83 2026-06-19 Tier A promo strip: text-only rotating 'New · <product> →' new-arrivals banner across the 44 multitenant DW sites (promoStrip() in render.js, per-site cfg.promoBanner default on); verified live on carmelwallpaper
  5. 1b277d8 2026-06-09 snapshot before task-52 verification (standalone hero allocation data drift)
  6. 45f2fce 2026-06-03 fix(fleet): route scrubTags through canonical isVendorTag + extend scrubVendor denylist — kills dwf vendor tag-chip + slug leaks (Anna French, Christian Lacroix, Ralph Lauren, AS Creation, Gaston Y Daniela, etc); verified 0 vendor names in barwallpaper DOM across 3267 products
  7. bd7303f 2026-06-03 Vendor-neutral image proxy: render emits /img/<token>, server.js streams CDN bytes (closed proxy + LRU). Kills image_url vendor-name leak in card/PDP/hero/JSON-LD. DTD-A. Proven local: 0 leaks, /img 200.
  8. 7c6386c 2026-06-01 Per-site catalog extras overlay (data/extras/<slug>.json) — site-exclusive products w/ buy_url, no flagship-store write, survives pull-catalog. For asseeninla LA-toile line.
  9. 251f908 2026-06-01 fleet-heroes: fix spurious exit-1 in deploy mode + dedup by slug (don't re-churn same-site www+repo pairs)
  10. 6c986ea 2026-06-01 fleet-heroes: open DW fleet registry viewer (:9774) on launch (FLEET_HEROES_NO_OPEN to suppress)
  11. addb71d 2026-06-01 Add fleet-heroes.sh driver: repeatable fleet-wide hero refresh + global dedupe (report-only default, --deploy gated, batched reload)
  12. c069168 2026-06-01 fix: app.set('trust proxy', 1) — resolves ERR_ERL_UNEXPECTED_X_FORWARDED_FOR across all 9 dwf-* apps behind nginx
  13. 10970b9 2026-06-01 Standalone hero apply + size-vetted retry scripts (prod-side); de-collide 2 content-site lead heroes
  14. d7527ba 2026-06-01 Standalone sister-site unique hero allocation (59 sites, 0 dup, 0 generic-overlap)
  15. 5d250af 2026-06-01 Honor prior bleachfriendly drop (domain not renewing): remove re-added config, regen 43-site manifest
  16. 79bf34f 2026-06-01 Add bleachfriendly to fleet config + regen 44-site hero manifest (352/352 unique)
  17. 52573cc 2026-06-01 Unique clean heroes per site: global disjoint hero-allocation manifest
  18. 8b660a0 2026-06-01 drop bleachfriendly from fleet (domain not renewing): remove gen-configs spec+name, manifest entry, pm2 app, site config + local nginx conf
  19. 3b76655 2026-05-31 audit: read-only all-sites vendor-href leak re-verify — fleet STILL leaks (259, a85eb02 undeployed); 3 standalones clean
  20. 7fd25ca 2026-05-31 audit: standalone storefronts outbound-href vendor leak (cdm/carmel/ntw all leak via buy-CTA+anchor, deploy Steve-gated)
  21. a85eb02 2026-05-31 render: route PDP buy CTA + main-store anchor + canonical through clean slug (kills vendor-handle DOM leak)
  22. 49997ea 2026-05-31 Add sort <select> + density control bar to dwf homepage Featured grid (standing-rule compliance, client-side sort, shared localStorage with /catalog)
  23. 55a7f0b 2026-05-31 Add 2026-05-31 read-only vendor-leak re-verify: slug/chip scrub holds 0; outbound DW-store href leaks 594 across 43 sites
  24. 1bdbba0 2026-05-30 scrubVendor: optional inter-token separator ([^a-z0-9]*) catches no-separator handle spellings (wolfgordon, gpjbaker) + add 'g p j baker' per-initial variant + collapse mid-handle residue. Closes the 936 wolfgordon URL-slug leaks (#3 morning digest). Export scrubVendor for tests
  25. 0ac4d91 2026-05-30 render.js productSlug: guard both slug returns with hasVendorToken() — closes the 936 residual URL-slug leaks (935 wolfgordon + 1 gpjbaker) the separator-requiring scrubVendor regex missed on CONCATENATED handle spellings (wolfgordonwallcovering) + per-initial splits (g-p-j-baker). Falls back to clean scrubbed-sku/hash slug. Normal products unaffected; route still dual-key resolves old URLs.
  26. 5aee355 2026-05-29 Close C: 'A is enough' (Steve 2026-05-29). Source handle rename rejected — blind detection can't tell vendor 'Harlequin' from 'harlequin' pattern / house-brand products; would corrupt live canonical URLs. Shipped render-time scrub (A) is the fix
  27. 56504de 2026-05-29 render.js+server.js: eliminate data-handle/data-sku DOM vendor leak via clean-slug + /buy/:slug server-side redirect (DTD verdict B), reconciled on top of verdict-A slug-cleaning
  28. a2b73c4 2026-05-29 Park C (vendor handle source-rename) plan — DTD verdict A's durable follow-up; gated, awaiting Steve go on a Shopify+dw_unified handle migration
  29. 52a5b40 2026-05-29 render.js productSlug: when the whole handle is a vendor name (e.g. brunschwig-fils), fall back to scrubbed-sku or a deterministic hash slug instead of the raw handle — closes the last 4 URL leaks (DTD verdict A)
  30. 9450ca4 2026-05-29 render.js scrubVendor: fix regex builder (split on non-alnum + drop empty tokens — was mangling 'brunschwig & fils' → '-fils' residue) + add slug variants cole-son/caroline-cecil/clarke-clarke/morris-co so /product hrefs are fully vendor-clean (DTD verdict A)
  31. 09c24d7 2026-05-29 render.js: scrubVendor() removes vendor names from displayed title + card-meta sku + /product slug + productPage h1/sku (fleet vendor-leak fix, 2026-05-29 audit). Link-safe: data-handle/data-sku raw, route resolves clean-slug OR raw-handle, DW-store CTA uses raw handle
  32. ee30c6a 2026-05-29 fix: strip 3rd-party vendor tokens from product slug/handle in fleet UI (redactVendorSlug) — closes the slug-level vendor leak across the dwf fleet that the 2026-05-28 chip scrub missed; route-safe (server.js resolves via productSlug(x)===key + real-handle fallback)
  33. 34fbe0e 2026-05-29 fix(fleet pdp): toggle hidden until ?theme=N opt-in
  34. 453b000 2026-05-29 feat(fleet pdp): theme1/theme2 toggle via ?theme=N query-param gate
  35. 661cbec 2026-05-28 shared/render.js: scrub head-baked vendor from product titles (audit 2026-05-28 task#53 addendum). scrubTags closed the tag-chip leak; titles like 'Versace 4 Metallic Wallcovering' still leaked the vendor via card-title + data-title (→ quick-view modal title + aria-label) + productPage <h1>/<title>/og:title. Add scrubTitleLead() (denylist-driven leading-vendor stripper, mirrors stripLeadVendor in _shared/api-vendor-redact.js but on THIS file's VENDORS_DENYLIST so chip+title stay on one list) + displayTitle() helper used by both card() and productPage() so the two derivations stay identical. House-brand-led names preserved; empty/generic remainder falls back to 'Designer Wallcovering'. CANARY-verified on designermagnetics.com (526 products): /catalog + /product visible-text vendor hits 0 (was: Versace in card-title+data-title), 0 empty/mangled titles, house brand preserved 67x. NOT DEPLOYED — follow-up tick fans out deploy + fleet-wide rendered-DOM re-verify per drift-aware plan.
  36. 82e0968 2026-05-28 shared/render.js: scrub vendor names from tag-chips fleet-wide (closes audit 2026-05-28 task#53 HIGH finding). Add scrubTags() helper with 47-vendor denylist (mirrors _shared/sku-redact.js + adds Kravet, de Gournay, Romo, Farrow & Ball, Colefax & Fowler, Sanderson, Morris & Co, Osborne & Little — all surfaced by the audit or missing from the prior denylist). Apply at both leak points: card data-tags attribute (feeds quick-view modal chips) + productPage <span> chip strip. Verified: 7 audit-leaked vendors filtered (Brunschwig & Fils, Kravet, Schumacher, Maya Romanoff, Lee Jofa, de Gournay, Romo), house brands preserved (Designer Wallcoverings, Hollywood). NOT YET DEPLOYED — awaiting Steve sign-off + drift-aware deploy plan.
  37. af735a7 2026-05-28 shared/render.js: reconcile prod drift — pull equalize toolbar markup (ctl-sort + ctl-density flex wrappers + space-between + range/search flex constraints) back into Mac2 source after directly-on-prod shipping earlier today. Mac2's card-hover-effect (aa83057) preserved untouched. Hashes now align on the equalize feature; only card-hover (4 CSS + 1 HTML line) remains Mac2-ahead.
  38. aa83057 2026-05-28 shared/render.js: universal hover-preview — stamp --card-bg on card-img inline style + ::after pseudo-element shows 3×3 tile-repeat of the same image on :hover (reveals the seamless pattern structure). One edit applies to all 44 sister sites in dw-domain-fleet/sites/ on next restart. prefers-reduced-motion guarded.
  39. 1e6fa79 2026-05-19 catalog: hydrate sort dropdown + density slider from localStorage before first paint
  40. febdfbc 2026-05-19 chore: broaden .gitignore — snapshot/editor cruft (*.bak, *.orig, *.rej, *.swp, *~, *.pre-*)
  41. 46abc9e 2026-05-19 feat: clean fleet /product/ slugs — productSlug() strips 'wallpaper'; handle kept verbatim for Shopify canonical+sample; dual-key route resolves old+new URLs
  42. 5004030 2026-05-19 fix: restore lost pattern name on 4 William Morris products (Fruit | William Morris)
  43. 2481a30 2026-05-19 fix: theme toggle occluded by hamburger (now fixed-position z-101 left of menu); blank-title fallback to SKU for malformed catalog rows
  44. d0f30c2 2026-05-19 DNS cutover batches 4-5 complete (idx 27-43): 44/44 fleet HTTPS verified
  45. 8b73567 2026-05-19 DNS cutover batch 5 (idx 36-43): 8/8 live HTTPS 200 — fleet cutover complete 44/44
  46. 26f2aef 2026-05-19 Add /info page, trim navpanel to 4 items, sun/moon theme toggle
  47. 40eaabd 2026-05-19 DNS cutover batch 4 (idx 27-35): 9/9 live HTTPS 200
  48. 1e65c59 2026-05-19 DNS cutover batch 3 (idx 18-26): SSL+HTTPS verified
  49. cfc34cd 2026-05-19 DNS cutover batch 3 (idx 18-26): 9/9 live HTTPS 200
  50. f84402b 2026-05-19 DNS cutover batch 2 (idx 9-17): 9/9 live HTTPS 200
  51. 42bb3e2 2026-05-19 DNS cutover batch 1 (idx 0-8): 9/9 live HTTPS 200 + nginx blocker resolved
  52. b9e4a69 2026-05-19 fleet: DEPLOY+SMOKE phase — 44/44 deployed to Kamatera, all online ports 10001-10044, 44/44 origin smoke pass; log nginx typo-redirect-1800wallcoverings conflict blocker
  53. b57956d 2026-05-18 fleet: STEP 2 — re-port fleet-44 to 10001-10044 (clear collision with sister sites on 9901-9944); regenerate ecosystem + nginx + sync site config ports; 44/44 boot-test pass
  54. 2186562 2026-05-18 fleet: SCOPE CORRECTION 66→44 (dtd Option B split) — 22 domains stay 301 redirects; add asseeninmovies; product pages with rel=canonical→main store + per-site title/meta; crawlable card links
  55. 32e95f9 2026-05-18 fleet: DNS cutover + SSL + deploy scripts, PROGRESS.md
  56. d1bbf07 2026-05-18 fleet: explicit display-name overrides, ecosystem + nginx generators, boot-test (65/65 pass)
  57. fb983c1 2026-05-18 dw-domain-fleet: shared parameterized microsite server + 65 site configs; grasscloth exemplar verified locally

Authors

Agents used

  • none detected

Skills used

  • /info7
  • /render5
  • /catalog4
  • /product4
  • /data-sku2
  • /buy2
  • /theme22
  • /hero1
  • /extras1
  • /gen-standalone-heroes1
  • /gen-hero-allocation1
  • /hero-allocation1
  • /carmel1
  • /ntw1
  • /chip1
  • /hash1
  • /caroline-cecil1
  • /clarke-clarke1
  • /morris-co1
  • /sku1
  • /handle1
  • /api-vendor-redact1
  • /generic1
  • /mangled1
  • /sku-redact1
  • /search1
  • /sites1
  • /editor1
  • /moon1
  • /about1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

d7527ba · 2026-06-01 · Standalone sister-site unique hero allocation (59 sites, 0 dup, 0 generic-overlap)
59 standalone storefronts served only 14 distinct static hero-bg.jpg files (31
shared one 1.9MB template image). scripts/gen-standalone-heroes.js assigns each
a unique, clean, niche-relevant catalog image, disjoint from the 344 generic
heroes and each other. Deploy replaces the 51 duplicate-cluster files; 8
already-unique heroes preserved.
5d250af · 2026-06-01 · Honor prior bleachfriendly drop (domain not renewing): remove re-added config, regen 43-site manifest
Reverts the accidental re-add in 79bf34f. bleachfriendly.com serves a static
hero and its domain is lapsing per 8b660a0; it does not belong in the rotating
hero fleet. Prod's live 43 active template sites are already verified unique.
52573cc · 2026-06-01 · Unique clean heroes per site: global disjoint hero-allocation manifest
Every generic-fleet site previously derived its hero from the same
newest-niche slice; thin-niche sites fell back to the shared all-wallcovering
pool, so 18+ sites rendered the identical lead image (43 sites used only 67
unique images across 344 hero slots).

scripts/gen-hero-allocation.js now precomputes data/hero-allocation.json — a
globally-disjoint, niche-relevant, clean (https, non-swatch) set of 8 heroes
per site, distinct base patterns within each rotation. server.js reads it.
Result: 344/344 hero slots unique, zero cross-site duplicates.
56504de · 2026-05-29 · render.js+server.js: eliminate data-handle/data-sku DOM vendor leak via clean-slug + /buy/:slug server-side redirect (DTD verdict B), reconciled on top of verdict-A slug-cleaning
data-handle + data-sku now carry the vendor-free productSlug instead of the raw
Shopify handle; the quick-view buy-sample CTA links to the fleet's own /buy/:slug
route, which resolves the real handle server-side and 302-redirects to the DW
store — so the raw vendor-laden handle never reaches the rendered DOM. Folds in
the parallel session's productSlug \s+ re-hyphenate refinement (verdict A). Closed
redirect: target host hardcoded, slug validated, 404 on miss.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34fbe0e · 2026-05-29 · fix(fleet pdp): toggle hidden until ?theme=N opt-in
Prior version always set data-page-theme attribute even for default
visitors, defeating the gate. Now: no opt-in → attribute unset, toggle
display:none. Opt-in via URL or localStorage → attribute set, toggle
becomes inline-flex.
453b000 · 2026-05-29 · feat(fleet pdp): theme1/theme2 toggle via ?theme=N query-param gate
Adds the same theme1/theme2 preview surface to all 44 dwf-* product pages
via the shared productPage() template. Since dw-domain-fleet has no admin
auth, gate is by URL query param (?theme=2 → flip to theme2, persisted
in localStorage 'wallco-page-theme'). Toggle UI is hidden until theme2
mode is active so default visitors see vanilla theme1.
1e6fa79 · 2026-05-19 · catalog: hydrate sort dropdown + density slider from localStorage before first paint
Density already read its saved value but the apply() races the initial --cols:5
emitted in CSS, so users with a saved density saw a brief flash. Add a clear
"before first paint" comment to lock the ordering.

Sort dropdown was write-only — change events persisted to localStorage but a
fresh /catalog visit always rendered with the server's selected="newest". Now,
when the URL has no ?sort= override, the dropdown hydrates from localStorage
(validated against the known option set) so the user's last choice surfaces.
The form still posts ?sort=<value> on next change so the server-rendered list
matches what the dropdown shows. Pure client-side; catalog query, sortProducts,
and product resolution untouched.

Fleet-wide change since render.js is the shared template for all 44 sites.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
26f2aef · 2026-05-19 · Add /info page, trim navpanel to 4 items, sun/moon theme toggle
TASK 1: New per-site /info page (infoPage in shared/render.js + /info
route in server.js) — Memo Samples, Trade Program, Shipping & Lead
Times, FAQ. cfg-driven, no vendor names, no banned 'wallpaper' word,
rel=canonical to the site's own /info.

TASK 2: Navpanel now exactly 4 items — Designs, About, Info, Contact.

TASK 3: Theme toggle shows a sun in light mode, moon in dark mode —
both SVGs in the button, swapped via CSS keyed on html[data-theme=dark],
no JS change so it survives the anti-flash inline script.

Verified: node -c passes both files; grassclothwallcovering booted on
:10999 — /, /info, /about, /catalog all 200; /info renders all 4
sections; nav shows the 4 items; no 'wallpaper' in /info copy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

File tree

122 files tracked. Click any to browse the source at HEAD.

Other build journals

← Dw Discovery  ·  all 4 projects  ·  Dw Domain Fleet Agent A59d9147930477079 →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 1ms