← back to Designer Wallcoverings
pending-approval/tile-images-fix-2026-08-07/README.md
82 lines
# GATED: Fix ~42% dead tile images across 4 DW storefront category Pages
**Drafted:** 2026-08-07 · **Owner:** vp-dw-commerce · **Status:** AWAITING STEVE'S GO
**Surface:** Online Store → Pages `body_html` (NOT a theme push). Customer-facing, live store.
## Problem (verified live, HEAD→GET confirmed, $0)
Four top-nav category Pages render tile grids whose image URLs are **hardcoded
`cdn.shopify.com` snapshots baked into the page body**. A large batch of the underlying
collection images / brand-logo Files were re-uploaded ~Feb 2026 (dead URLs cluster at
`?v=17719…` / `?v=17744…`), which changed their CDN paths — so the hardcoded copies now 404.
The page never re-reads the live image, so it can't self-heal.
| Page | Tile imgs | Broken (404) | % dead |
|---|---|---|---|
| /pages/shop-by-material | 24 | 9 | 38% |
| /pages/brands | 152 | 68 | 45% |
| /pages/collections | 177 | 68 | 38% |
| /pages/designer-wallpaper-styles | 90 | 40 | 44% |
| **TOTAL** | **443** | **185** | **~42%** |
Full per-tile data: `audit-full.json`. Replacement map: `replacement-swaps.json`.
## Fix status
- **166 / 185** broken tiles have a **verified-live (HTTP 200) replacement image** already
sourced (each collection's own current product image). Ready to swap. See
`replacement-swaps.json` → `swaps[<page>][]` = `{label, href, old, new}`.
- **19 / 185** could NOT be auto-fixed and need Steve's call — see below.
### The 19 that need a decision (`replacement-swaps.json` → `unresolved[]`)
**A. DEAD LINKS (collection 404/301 — tile is broken twice: no image AND click → 404):**
- Hygge & West `/collections/hygge-west-wallcoverings` (404)
- Mind the Gap `/collections/mind-the-gap-1` (404)
- NLXL `/collections/nlxl` (404)
- Phillip Jeffries `/collections/phillip-jeffries-wallcoverings` (404)
- Mid Century Modern `/collections/mid-century-modern-1` (404) — on BOTH collections + styles
- Stripe `/collections/stripe-collection-1` (404)
- Tropical `/collections/tropical-prints` (404) — on BOTH collections + styles
- Leaf `/collections/leaf-pattern-wallpaper` (404)
- Glass Beads `/collections/glass-beaded-walls` (301 redirect)
→ These need the LINK repointed to the correct live handle, not just a new image.
**B. EMPTY but live collections (exist, 0 products → no image to pull):**
- Boråstapeter `/collections/borastapeter`
- Versa Designed Surfaces `/collections/versa-designed-surfaces-wallcoverings`
→ Need a manually-assigned collection/tile image, or hide the tile.
**C. Vendor landing pages (no product grid to source from):**
- Ananbo, Clarence House, Farrow & Ball, Morris and Company (all `/pages/...`)
→ Need a brand logo or curated image.
## Separate issue — MISLABELS (label ≠ where the tile links; not 404s)
Clear-wrong (recommend repoint): Mica→shiny-mylar-mirror & Mica→art-deco-metallics-1,
Lincrusta→japonisme-wallpaper, Jute→madagascar-cloth, Linen→faux-silk.
Acceptable curatorial redirects (leave): Regency/Georgian→damask-traditional,
Rococo→baroque, Suzani→ikat, Tribal→bohemian, Arabesque→ogee, Blue Green→turquoise.
## How to apply (NO token-scope change needed)
Neither DW token has `read_content`/`write_content`, so automation can't read/write `/pages`.
Workflow: **per page** — Admin → Online Store → Pages → open page → `<>` (Edit code) →
copy the raw HTML → paste it to Claude → Claude applies the 166 swaps + injects the
error-guard → paste the finished HTML back → Save. One copy + one paste per page.
## Permanent cure (recommended follow-up, separate approval)
These grids re-rot on every image churn because they hardcode URLs. Converting the tile
grid to a theme section/template that loops the collection list and renders live
`collection.image` (with the first-product-image fallback) makes them un-rottable.
Bigger change (Pages don't render Liquid — needs a theme template). Not in this pass.
## Also included
`error-guard.html` — capture-phase `<style>`+`<script>` block: any FUTURE dead tile image
fades to a labeled CSS gradient instead of a broken-image icon. Safe to paste on all 4 pages
regardless of the URL swaps.
**$ cost:** $0 (local + read-only public products.json + paced CDN HEAD/GET probes). No metered API.