Dw Batch

repo: ~/Projects/_dw-batch · 78 commits · 1 in last 24h, 1 in last 7d ·

Search the build

78 commits indexed

  1. fc5cf59 2026-07-27 migrate GoDaddy auth → Bearer PAT (TK-10 key rotation); sso-key fallback retained
  2. 81ec3cf 2026-07-06 template-v2: square product-card images (aspect-ratio 1/1)
  3. 7cc69d6 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  4. 84cf413 2026-05-20 feat: meta-pixel fleet pre-stage + flipper
  5. 7b4d978 2026-05-20 regen-aesthetic-pg: PG-direct fix for 20 sister sites with dead aesthetic facet
  6. 3638ba1 2026-05-19 add reconcile-rails.js — propose top-N actual high-frequency tag tokens as a site's rails
  7. 25d039b 2026-05-19 fix: widen-thin-sites.js now classifies aesthetic via classifyAesthetic(tags, rails) instead of hardcoded "all"
  8. 41459c5 2026-05-18 remove dead domains brazilliancewallpaper.com + dohngia.com (expired 2026-05-04)
  9. 375a1b3 2026-05-13 gucci chrome: distinguish interior-page-no-hero-expected from real misses (0 real misses now)
  10. 387e555 2026-05-13 gucci chrome: add cinema hero pattern + existing-CTA detection (26 inject / 58 preserve / 8 manual)
  11. d85c31f 2026-05-13 gucci chrome: broaden hero detector to catch id=hero, hero-section, ns-hero, data-hero (30→up from 16 cta injections in dry-run)
  12. 0cdd439 2026-05-13 gucci chrome: add fanout patcher script (dry-run validated on 92 sites)
  13. 63ab1ae 2026-05-13 snapshot: backup uncommitted work (1 files)
  14. 41943a1 2026-05-13 fleet patcher hardening: idempotency guards + post-tick validator
  15. 61d67d3 2026-05-13 snapshot: 50 file(s) changed, +50 new
  16. c919782 2026-05-10 hamburger v3 audit: 65 customs verified working + cross-machine drift report (Mac1 + Kamatera read-only)
  17. 5f8f65c 2026-05-10 editorial: suedewallpaper.com seeded — 5 pages live
  18. ba430b0 2026-05-10 editorial: stringwallpaper.com seeded — 5 pages live
  19. 785692f 2026-05-10 editorial: silkwallcoverings.com seeded — 5 pages live
  20. 1250e9f 2026-05-10 editorial: selfadhesivewallpaper.com seeded — 5 pages live
  21. 9d4d3ac 2026-05-10 editorial: screenprintedwallpaper.com seeded — 5 pages live
  22. 6702192 2026-05-10 editorial: restorationwallpaper.com seeded — 5 pages live
  23. c8114cf 2026-05-10 editorial: recycledwallpaper.com seeded — 5 pages live
  24. 7bb0d08 2026-05-10 editorial: raffiawalls.com seeded — 5 pages live
  25. b8effb3 2026-05-10 editorial: raffiawallcoverings.com seeded — 5 pages live
  26. 048c88f 2026-05-10 editorial: naturalwallcoverings.com seeded — 5 pages live
  27. 7b3efc8 2026-05-10 editorial: museumwallpaper.com seeded — 5 pages live
  28. 67ab9c9 2026-05-10 editorial: micawallpaper.com seeded — 5 pages live
  29. 1664dc8 2026-05-10 editorial: metallicwallpaper.com seeded — 5 pages live
  30. 364d48f 2026-05-10 editorial: linenwallpaper.com seeded — 5 pages live
  31. 658f1e5 2026-05-10 editorial: jutewallpaper.com seeded — 5 pages live
  32. f0e738e 2026-05-10 editorial: hotelwallcoverings.com seeded — 5 pages live
  33. b5e1b0e 2026-05-10 editorial: hospitalitywallpaper.com seeded — 5 pages live
  34. e2ccc64 2026-05-10 editorial: healthcarewallpaper.com seeded — 5 pages live
  35. 2f97c8f 2026-05-10 editorial: greenwallcoverings.com seeded — 5 pages live
  36. 633e79d 2026-05-10 editorial: fabricwallpaper.com seeded — 5 pages live
  37. 1f63550 2026-05-10 editorial: embroideredwallpaper.com seeded — 5 pages live
  38. d7b5281 2026-05-10 editorial: corkwallcovering.com seeded — 5 pages live
  39. 1556749 2026-05-10 editorial: contractwallpaper.com seeded — 5 pages live
  40. c4ffaf8 2026-05-10 editorial: blockprintedwallpaper.com seeded — 5 pages live
  41. 198a265 2026-05-10 editorial: architecturalwallcoverings.com seeded — 5 pages live
  42. 328a27e 2026-05-10 editorial: apartmentwallpaper.com seeded — 5 pages live
  43. d4cedcc 2026-05-10 editorial: 1940swallpaper.com seeded — 5 pages live
  44. b74bbe6 2026-05-10 editorial: 1900swallpaper.com seeded — 5 pages live
  45. 9229e71 2026-05-10 editorial: 1800swallpaper.com seeded — 5 pages live
  46. fd69f38 2026-05-10 editorial: long-running loop (kicked off as nohup pid 19871; ~8h overnight run)
  47. 3bef6a3 2026-05-10 editorial: per-tick wrapper (pick → gen → restyle → scp → verify → commit)
  48. 8dc3697 2026-05-10 editorial: silkwallpaper.com seeded — 5 pages live
  49. 0609a7a 2026-05-10 editorial: per-vertical generator (Ollama qwen3:14b) + retrowalls.com 5-page seed
  50. c9dc885 2026-05-10 fleet-ga: post-deploy refresh (events still 0; awaiting first user interaction)
  51. 07834b9 2026-05-10 fleet: fire gtag events (modal_open / memo_request / lead) on dwm modals
  52. dc9b16d 2026-05-10 fleet-ga: pull traffic sources + action events + last-3 visit geo per site
  53. 04016cc 2026-05-08 consensus: P2 SEO content audit DONE (template-cluster fix deferred)
  54. 7b94a40 2026-05-08 P2 SEO audit + 8-site brand-name disambiguation
  55. 502f470 2026-05-08 consensus: P1 reverse-channel DONE
  56. 2320cd4 2026-05-08 consensus: P1 unified autonomy ledger DONE
  57. 1276c65 2026-05-08 qa-watchdog: append clean/regression events to autonomy ledger
  58. 2ae8b52 2026-05-07 Consensus backlog from Claude+Codex review (2026-05-07 evening)
  59. 1a07814 2026-05-07 Autonomy stack snapshot — 2026-05-07 evening
  60. ebf61bd 2026-05-07 qa-audit: relax info_email regex to accept Cloudflare email-obfuscation
  61. 3e51856 2026-05-07 apply-brand-fleet: broaden DW-footer scrubber + force brand-name in footer-brand
  62. cf2df99 2026-05-07 qa-audit: loosen ghost_button regex to allow optional whitespace around colon
  63. 3e9b7a8 2026-05-07 qa-audit: remove goldleafwallpaper from deferred (rebrand complete)
  64. d853c34 2026-05-07 qa-audit: correct exclusion classification — 3 LIVE GoDaddy sites, not parked
  65. 3b83ef9 2026-05-07 qa-audit: add 4 more parked domains to exclusions
  66. 4b87a7c 2026-05-07 qa-watchdog: harden after codex-3way PROSECUTOR review
  67. abca9ae 2026-05-07 Fleet thumbnail grid generator
  68. 5148b13 2026-05-07 Daily fleet-QA launchd watchdog
  69. 351eed0 2026-05-07 Fleet QA audit tool + sister-site classification
  70. fb4d558 2026-05-06 Brand drafts for 4 prod-only sites (no local Mac scaffold yet)
  71. dbc5657 2026-05-06 Fleet rebrand applied — 47/47 sites distinct, 0 DW touchpoints
  72. 6e0a27d 2026-05-06 silkwallpaper.sort=newest (persisted by sort selector)
  73. 43a8ed6 2026-05-06 Generate distinct brand identity drafts for all 46 DW microsites
  74. abb9357 2026-05-06 Hero patcher: upscale to largest Shopify variant + re-patch helper
  75. 4b4c957 2026-05-06 Fleet patchers: hero hydration + sort dropdown for all DW microsites
  76. 3a08f09 2026-05-06 fix: assign collections to 1980swallpaper + embroideredwallpaper (were empty)
  77. 5541df4 2026-05-06 Algorithmic per-niche light-mode accent + tinted bg-soft
  78. 11c264e 2026-05-06 initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)

Authors

Agents used

  • none detected

Skills used

  • /products4
  • /index3
  • /regression2
  • /npm1
  • /npx1
  • /homebrew1
  • /scripts1
  • /set-fb-pixel1
  • /deploy-kamatera1
  • /vendor1
  • /post-write1
  • /validate-fleet-headers1
  • /generate-editorial1
  • /restyle-editorial1
  • /vocabulary1
  • /sourcing1
  • /care1
  • /trade1
  • /seo-doorway-audit1
  • /data1
  • /log-event1
  • /rejected1
  • /no-change1
  • /skip1
  • /staging1
  • /canary1
  • /div1
  • /parking1
  • /whitespace-safe1
  • /catch1

Creative ideas + design notes

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

84cf413 · 2026-05-20 · feat: meta-pixel fleet pre-stage + flipper
Pre-staged inert Meta Pixel snippet across 72 customer-facing sites.
Loader IIFE is brace-guarded so fbevents.js is NOT fetched until the
placeholder is flipped — addresses the auto-mode classifier concern
that even gated init still phones home.

Morning task for Steve: paste your Pixel ID and run
  bash ~/Projects/_dw-batch/scripts/set-fb-pixel.sh <YOUR_PIXEL_ID>

That flips the placeholder + adds the noscript fallback across all 72
sites in one pass. Locally idempotent. Steve runs ./deploy-kamatera.sh
or fleet rsync to ship.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7b4d978 · 2026-05-20 · regen-aesthetic-pg: PG-direct fix for 20 sister sites with dead aesthetic facet
Sites had ~80% aesthetic='all' because site.config.json rails used
hyphenated jargon (type-ii, peel-stick, pvc-free, crewel) that
classifyAesthetic's whole-word match never found in real product tags
(textured, contemporary, geometric, etc).

This script derives rails from actual microsite_products.tags frequency,
rewrites site.config.json (with .bak), and re-runs classifyAesthetic to
populate the aesthetic column row-by-row. Single transaction per site.

Applied 2026-05-20 — 19/20 sites went from ~80% "all" to 0-13% "all",
healthy 4-7 buckets each. hollywoodwallcoverings skipped (homogeneous
tag vocab needs custom handling).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3638ba1 · 2026-05-19 · add reconcile-rails.js — propose top-N actual high-frequency tag tokens as a site's rails
One-off helper for the 43-site aesthetic-all bug. For a single slug, reads
data/products.json, computes per-row deduped tag-token frequencies, filters
by ≥5% coverage threshold + a stoplist of structural/vendor noise, dedupes
near-identical stems, and proposes a top-6 rails list. Dry-run by default;
--apply writes site.config.json with a .bak backup. Sample one site at a
time, never fan out across the fleet without review.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25d039b · 2026-05-19 · fix: widen-thin-sites.js now classifies aesthetic via classifyAesthetic(tags, rails) instead of hardcoded "all"
Previously every row in data/products.json was emitted with aesthetic:'all',
so the JSON fallback path produced single-bucket facets across the 43
thin sites. Now loads each slug's site.config.json.rails and passes it
to the shared classifier, preserving fallback to 'all' when rails are
missing or malformed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
41943a1 · 2026-05-13 · fleet patcher hardening: idempotency guards + post-tick validator
Codifies the panel-consensus fix (Option 1 + Option 3) for the 46-site
duplicate-<header> regression that hit 2026-05-13.

apply-template-v2.js: skip sites whose existing public/index.html already
contains class="ns-header" (would have clobbered the modern pattern back
to the bare template). Override with FORCE_OVERWRITE=1 if intentional.

apply-contact-module.js: extend the existing data-dwm-contact guard to
ALSO skip ns-header sites (those have a Contact entry in their ns-nav
already; injecting another + a second .theme-toggle into the existing
ns-header was the root cause of the regression).

validate-fleet-headers.js (new): post-tick validator that asserts no
bare-<header>-with-dwmOpen regression signature, presence of canonical
ns-header, absence of fake brand names (per the 46-site mapping), and
.ns-modal display:none default. Currently 46/46 pass. Wire into any
patcher's CI/post-write step via:
  execSync('node _dw-batch/validate-fleet-headers.js', {stdio:'inherit'})
Non-zero exit blocks bad pushes.
0609a7a · 2026-05-10 · editorial: per-vertical generator (Ollama qwen3:14b) + retrowalls.com 5-page seed
Adds scripts/generate-editorial.js: 5 pages per Atelier brand (history, vocabulary, sourcing, care, trade) via local Ollama with sister-site vocabulary blocklist, written to <site>/public/<slug>.html and served by Express extensions:['html'].
Adds scripts/restyle-editorial.js: re-wrap pages without re-calling Ollama when pageHTML() changes.

Addresses CONSENSUS-BACKLOG P2 'Distinct editorial content per vertical' — defeats Google's structural-fingerprint detection by giving each Atelier 5 unique long-form pages.

retrowalls.com seed deployed: history/vocabulary/sourcing/care/trade — 200 live.
dc9b16d · 2026-05-10 · fleet-ga: pull traffic sources + action events + last-3 visit geo per site
Adds three new datasets to fleet-ga.json (consumed by fleet-grid.html GA panel):
- sources_28d: top 5 traffic sources by sessions (channel + source + medium)
- events_28d: all event names + bucketed action categories (memo / sample / modal / quote / contact / cart / click)
- recent_visits: 3 most-recent country+city visits (last 7d, ordered by dateHourMinute desc)

Also: fetcher now self-injects the JSON into fleet-grid.html (replaces the
<script id="ga-data"> block in place) so the viewer is always in sync.
7b94a40 · 2026-05-08 · P2 SEO audit + 8-site brand-name disambiguation
Per the 3-stage Claude+Codex review consensus: 47-Atelier rebrand defeats
LEXICAL doorway detection but Google's STRUCTURAL detection still clusters
sites by template fingerprint, shared brand names in JSON-LD, shared NAP.

Built scripts/seo-doorway-audit.js — fetches every fleet site and scores
on: cross-link density, template-hash clusters, shared GA tag groups,
shared LD-name groups, shared phones, editorial brevity.

Initial audit findings:
- 38 sites in ONE template fingerprint cluster (biggest doorway signal)
- 5 brand-name groups shared across multiple sites (now fixed)
- 1 phone (888-373-4564) shared across 47 sites
- 0 cross-fleet links (good — no PBN signal)
- 0 shared GA tags (good — per-site G-IDs)

Renamed 8 sites to make brand names unique:
  1970swallpaper      Studio Castel    → Studio Bevilacqua
  raffiawalls         Corteza          → Corteza Vita
  fabricwallpaper     Studio Rosa      → Studio Tessile
  1900swallpaper      Studio Caravaggio→ Studio Modigliani
  hotelwallcoverings  Heritage Atelier → Heritage Suite
  restaurantwallpaper Heritage Atelier → Heritage Table
  metallicwallpaper   Atelier Aurum    → Atelier Foglia
  stringwallpaper     Loma Studio      → Filo Studio

Live verified: shared LD-name groups dropped 5 → 0.

Remaining structural signals (deferred):
- Template cluster of 38 sites (needs per-site CSS class shuffling, big refactor)
- Shared phone 888-373-4564 (business decision — DW office number)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2320cd4 · 2026-05-08 · consensus: P1 unified autonomy ledger DONE
Built ~/.claude/data/log-event.sh + autonomy-ledger.jsonl + ledger-tail.sh viewer.
Wired into qa-watchdog (clean/regression), idea-loop (tick-done +
accepted/rejected counts), novasuede-watcher (snapshot/no-change/skip).

Reverse-channel implementation can now read from the ledger.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2ae8b52 · 2026-05-07 · Consensus backlog from Claude+Codex review (2026-05-07 evening)
3-stage review (Claude headless → Mac2 qwen3:14b stand-in for codex → synth):
- Both reviewers agreed 47-Atelier rebrand defeats LEXICAL but not STRUCTURAL
  Google doorway detection — content audit needed
- Codex pushed back on Claude's 'leak-shaped architecture' framing of brandScrub
- Codex caught 2 silent-failure bugs Claude missed (watcher rollback,
  Browserbase session-disconnect handling)
- Claude flagged structural gaps Codex missed (no test/staging/canary,
  no reverse channel for watchdog emails, Cache-Control fleet cost)

Backlog ranks by leverage × safety. P0 (immediate) done in same tick:
  ✓ novasuede-watcher.sh rollback on rsync mid-fail
  ✓ run-full.js Browserbase session retry + --resume flag

Yolo loop pulls from this list each tick.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1a07814 · 2026-05-07 · Autonomy stack snapshot — 2026-05-07 evening
Captures end-state of the multi-loop yolo session:
- 47/47 fleet at 100% QA
- 5 active loops (yolo, idea-loop, fleet-QA watchdog, novasuede watcher,
  codex-3way debate on-demand)
- Tooling proven: Browserbase + codex-3way mixed backend + idempotent
  propagator + CF Email Protection awareness
- 3 idea-loop ideas accepted, 2 deferred (GoDaddy access needed),
  1 declined (breaks naming convention)
- Follow-ups for Steve: OpenAI quota, designersalesreps go-ahead,
  GoDaddy-business decisions

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3e51856 · 2026-05-07 · apply-brand-fleet: broaden DW-footer scrubber + force brand-name in footer-brand
The narrow regex /A specialty archive within the Designer Wallcoverings family/
missed the new pattern '{site} is a specialty X archive within the Designer
Wallcoverings family. Real samples ship free.' that was re-introduced today
by graphic-loop. Switched to permissive regex matching ANY footer-text
containing 'Designer Wallcoverings family' — replaces with the site's
about_short.

Also added: force <div class="footer-brand">{brand_name}</div> so the
footer brand-line never lags behind the rebrand (was holding vertical
name like 'Cork Wallcovering' instead of 'Atelier Saddle').

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d853c34 · 2026-05-07 · qa-audit: correct exclusion classification — 3 LIVE GoDaddy sites, not parked
Earlier classification was wrong. Re-probed:
- hospitalitywallcoverings.com → LIVE GoDaddy WebBuilder (2019 hospitality biz)
- wallpapercanada.com → LIVE GoDaddy WebBuilder (25-yr Canadian wallpaper biz)
- wallpaperondemand.com → LIVE (Professional Wallpaper Printing on Demand)
- wallsondemand.com → LIVE (sister-brand of wallpaperondemand, same content)
- recycledwallpaper.com → actually parked (parking-lander stub)

The AWS GlobalAccelerator IPs (15.197.x / 13.248.x) are GoDaddy's
website-builder CDN, NOT Sedo/parking. Misread the signal earlier.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3b83ef9 · 2026-05-07 · qa-audit: add 4 more parked domains to exclusions
DNS verification: wallpaperondemand, wallpapercanada, wallsondemand,
hospitalitywallcoverings all resolve to AWS Global Accelerator IPs
(15.197.x.x / 13.248.x.x), not Steve's Kamatera box (45.61.58.125).
These are GoDaddy/Sedo-parked domains generating ad revenue, not
fleet sites. Same pattern as recycledwallpaper.com.

Fleet now correctly excludes 7 non-fleet domains (5 parked + 2
sister-arch). 44/44 active fleet still scores 100%.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4b87a7c · 2026-05-07 · qa-watchdog: harden after codex-3way PROSECUTOR review
PROSECUTOR found 3 CRITICAL + 4 HIGH + 2 MEDIUM in original.

Fixes (CRITICAL):
- Shell + Python injection via $BODY in triple-quoted python -c arg
  → pass BODY/SUBJECT through env vars to python stdin instead
- Hardcoded George password DWSecure2024!
  → env-overridable via GEORGE_ADMIN_USER + GEORGE_ADMIN_PASS

Fixes (HIGH):
- Unsafe `ls -t qa-reports/*.json | head -1`
  → `find ... | sort -r | head -1` (glob/whitespace-safe)
- Unhandled empty / malformed JSON report
  → wrap node parse in try/catch with safe defaults
- HTML injection in email body via raw $SUMMARY/$LATEST/$LOG_DIR
  → html.escape via python before heredoc
- Silent audit gap when curl fails (set -e killed history-log)
  → swap set -euo pipefail → set -uo pipefail; curl rc captured

Fixes (other):
- Wrong George payload field: html → body (per /api/send schema)

Tested: clean run rc=0, regression run produces escaped HTML email
that George accepts (rc=0, threadId returned).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
abca9ae · 2026-05-07 · Fleet thumbnail grid generator
scripts/fleet-thumbnails.js: 4-way parallel Playwright capture of every
fleet domain at 1280x800. Reads from latest qa-report. 1h freshness cache.

scripts/build-grid.js: builds fleet-grid.html — single-page viewer with
brand name, domain, template, status badge per tile. Click → opens live site.

Captured 50/50 in 52s. Grid HTML saved at fleet-grid.html (gitignored:
~75MB of PNG thumbnails would bloat the repo).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5148b13 · 2026-05-07 · Daily fleet-QA launchd watchdog
qa-watchdog.sh runs qa-audit.js daily at 9:30am via
com.steve.dw-fleet-qa.plist. Only emails Steve via George
when active-fleet score drops below 100% — silent on clean runs.

Tested: rc=0, no email, history.log written.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
351eed0 · 2026-05-07 · Fleet QA audit tool + sister-site classification
- qa-audit.js: 6-feature read-only fleet checker, 100% score
- 3-tier classification (active/excluded/deferred) so non-fleet sites don't show as failures
- SISTER-SITES-CLASSIFICATION.md documents architectural reality

Fleet status: 44/44 (100%) post-rebrand.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fb4d558 · 2026-05-06 · Brand drafts for 4 prod-only sites (no local Mac scaffold yet)
These 4 sites run on Kamatera at /root/Projects/Designer-Wallcoverings/DW-Websites/
but don't have a Mac mirror. Drafts are queued for the rebrand patcher; the
sites themselves need either a one-time `scp -r` pull from Kamatera to Mac
OR direct in-place rewrite on Kamatera before the fleet deploy will rebrand
them.

Mappings:
- glassbeadedwallpaper → Maison Lustre (Dior — refined gray + gold accents)
- flockedwallpaper     → Casa Cremisi (Valentino — saturated red, classical)
- grassclothwallpaper  → Casa Madrid (Loewe — soft cream, slow craft)
- goldleafwallpaper    → Atelier Aurum (Dior — couture gold leaf)

Each draft has _needs_local_scaffold: true so future tooling skips them
unless explicitly opting in.
dbc5657 · 2026-05-06 · Fleet rebrand applied — 47/47 sites distinct, 0 DW touchpoints
Generic patcher applies each per-site brand draft to public/index.html:
  - title + meta-description + theme-color from brand
  - JSON-LD: Organization {name: brand_name}, drops parentOrganization
  - Google Fonts <link> rewritten per template (headFont)
  - :root + html[data-theme] palettes regenerated from draft.palette
  - Heading-font override CSS injected after body{} (via DW-FASHION-TEMPLATE-OVERRIDE marker)
  - Old UPPERCASE brand (e.g. CORK WALLCOVERING) globally replaced w/ brand_name
  - Footer 'Designer Wallcoverings family' copy → about_short
  - Footer 'DesignerWallcoverings.com Authorized Trade Channel' → About link
  - DW Universe constellation widget + family-vertical footer text removed
  - retrowalls.com/universe link stripped from footer-bottom

Walks brand-drafts/ filenames so it covers nginx-redirect-target sites too
(apartment / blockprinted / screenprinted / selfadhesive) which aren't in
curation-rules.json. Idempotent via title-includes check.

47 sites confirmed: zero 'Designer Wallcoverings' / 'DW Universe' / 'family
vertical' mentions remain. Each site has a distinct brand_name + tagline +
template palette + headline font.

Mac dev only; Kamatera prod still serves the pre-rebrand template until
explicit deploy.
43a8ed6 · 2026-05-06 · Generate distinct brand identity drafts for all 46 DW microsites
Each draft is a self-contained brand: made-up name (no DW reference except in
About Us), tagline tuned to the chosen fashion-house template's voice, palette,
fonts, signature, voice tone-guide, and short+full About copy.

Mapping pulls from the dw-fashion-templates skill — corkwallcovering=Hermès,
silkwallpaper=Saint Laurent, linenwallpaper=Loewe, 1980s=Balenciaga,
handcraftedwallpaper=Bottega, etc. Mix is deliberate so adjacent verticals
don't share an aesthetic.

Brand names pulled deterministically (sha1 of slug → pool index) so the same
slug always gets the same name, but manual edits to .brand_name stick across
re-runs (the auto-pick is stored in ._auto_brand for diffing).

Output: ~/Projects/_dw-batch/brand-drafts/<slug>.json — 46 files. These are
review-able drafts; nothing applied to live sites yet. Next tick: pick 1-2
sites and apply the brand to the live frontend (CSS palette + copy + name)
to validate the system.
abb9357 · 2026-05-06 · Hero patcher: upscale to largest Shopify variant + re-patch helper
Adds Shopify CDN size-suffix stripping (_NxN.jpg → .jpg) to the injected
hydrateHero() so the full-page hero gets the master image, not a 480x480
thumbnail. 45 sites re-patched locally with the new logic; cork already
deployed to Kamatera.
4b4c957 · 2026-05-06 · Fleet patchers: hero hydration + sort dropdown for all DW microsites
patch-hero-fleet.js — id=heroBg + hydrateHero() that pulls products[0].image_url
from /api/products at runtime so dw-collections-viewer hero pin actually
shows on the live site. Clean find/replace on 'cinema-bg' anchor; idempotent;
.bak per file.

patch-sort-fleet.js — adds sortProducts() to server.js + Sort <select> to
public/index.html for any DW site with an /api/products handler. Implements
DW STANDARD: Newest/Color/Style/SKU/Title/Price.

Both run with --dry to preview. Apply with no args. Hero patch already
applied to all 45 sites this session.
5541df4 · 2026-05-06 · Algorithmic per-niche light-mode accent + tinted bg-soft
Dark-mode accent already diverges per niche (10 distinct hues). Light-mode
was identical across all 50 sites — toggling collapsed the differentiation.

readPalette() now derives light_accent (HSL: same hue, S~0.5, L=0.28) and
light_bg_soft (same hue, S=0.18, L=0.82) from each site's meta.accent. AA
contrast on cream preserved. Verified 12 distinct light-accent hexes live
across saloon/museum/1800s/fabric/1900s/1970s/handcrafted/restoration.

File tree

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

Other build journals

← Domain Recon  ·  all 4 projects  ·  Fleet Audit →

Export

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

rendered in 0ms