Trending Dw
Search the build
-
ae386f42026-07-15 chore: v0.3.0 (session close) — lint+refactor review clean, no fixes needed -
45d6a462026-07-15 UX: tiered default sort — real product images lead, our-lane designs next, pending last -
2374e122026-07-15 UX: dedupe our-lane fallback heroes (full-bleed once per design, repeats render as tinted inset) + attach first 16 real images -
8f3f89d2026-07-15 auto-save: 2026-07-15T11:36:14 (118 files) — data/real-images/ledger.json public/assets/real/01fed1ec969baa25.webp public/assets/real/06354f219cec20b7.webp public/assets/real/0ab7a0b22c9877fb.webp public/assets/real/1fcb172898433b84.webp -
8ddd3d12026-07-15 auto-save: 2026-07-15T11:06:03 (3 files) — data/real-images/candidates/ data/real-images/ledger.json public/assets/real/ -
b3b4e492026-07-15 server+frontend: realImage support (signal default sort, meta coverage, Shopify staging guard) + UX overhaul (error/retry states, skeletons, provenance pill, OURS inset, date+time chip, alt text, 36-card first paint, detail modal w/ THEIRS-OURS) -
c44ad992026-07-15 real-image pipeline scaffold: plan/download/qc/attach scripts + fingerprint-keyed ledger (internal-only marketplace images) -
0968c222026-07-08 chore: v0.2.0 (session close) — 247-item multi-platform expansion + tz-pin + image localization (lint/refactor: clean) -
eb732642026-07-07 chore: v0.1.3 (session close) -
39b1dba2026-07-07 gapgen: cost guard — refuse paid Replicate by default (Steve: use local models); Replicate now opt-in via GEN_BACKEND=replicate -
8e9ac732026-07-07 chore: lint guards (colorGate NaN, --rolls, json.loads) + refactor (dead imports) + version bump (session close) -
86ce32b2026-07-07 trending: reship 10 vetted+deduped gap tiles (settlement-gated + QC'd) per Steve approval; drop 7 redundant -
0ed523e2026-07-07 trending: roll back 17 gap tiles per DTD verdict B — went live before formal settlement gate was run; reship only vetted+deduped survivors after gating -
8e5b7362026-07-07 trending: attach 17 AI-original texture tiles to gap lanes (seam-clean, settlement-safe) + Texture-Effect color cap 3->5 -
7991ccc2026-07-07 auto-save: 2026-07-07T09:59:53 (1 files) — scripts/__pycache__/ -
52f5a8b2026-07-07 gapgen: add file-based heal-tile.py (near-miss seam rescue, reuses wallco heal algo, no DB) -
bedb55d2026-07-07 gapgen: data-driven style-keyed briefs from live gap items (kill ID-drift landmine) + --dry-run -
c96132f2026-07-07 trending: fix infinite-scroll stall (fill while sentinel visible) + default sort to imaged-first -
7ee3b0f2026-07-07 trending: expand seed to ~50 bestsellers/trending PER PLATFORM (247 items, 5 platforms) -
eec6dc52026-07-07 chore: lint, refactor, v0.1.1 (session close) -
00c19c02026-07-06 trending: self-host all card images locally (scripts/localize-images.js) -
c9753c22026-07-06 trending: pin staleness to Steve's TZ (America/Los_Angeles) so prod (UTC) and Mac2 agree -
74b3db62026-07-06 trending: LIVE refresh — 49 current 2026 bestsellers via Exa scout + local-date staleDays fix -
6ab84ef2026-07-06 trending: build live-refresh wiring — scout→bestsellers mapper (DTD verdict A) -
955e9e42026-07-06 trending: fix contrarian-caught issues (onerror injection, header overflow, cron honesty) -
4fe938f2026-07-06 trending: 10-min health+opportunity tick + launchd cron (DTD verdict A) -
ab31ac02026-07-06 trending: data-freshness badge + per-card spotted timestamp + gap-image pending affordance + favicon -
baeb0bd2026-07-03 trending: wire 3 generated GAP originals (TR-013/014/050 texture+abstract) into cards; 37/50 now real our-own images; 13 remain (ComfyUI-down seam-gate wall) -
bf548c92026-07-03 gap-lane generator: 3 seam-PASS settlement-OK tiles (TR-013/014/050) + gate driver -
bd1056c2026-07-03 trending: scripts/push-to-shopify.js — creates DW products from DWPV queue as DRAFT (safe: refuses w/o creds, never auto-publishes); ready for token -
732d40d2026-07-03 trending: 'Put on Shopify' button — stages our-own designs as DW products with sequential DWPV SKUs (one SKU per unique design, idempotent); queue viewer w/ staged date+time; queue file deploy-protected -
de3b2ec2026-07-03 deploy: trending-dw live with real our-own images; INSTALL_CMD=true for zero-dep server -
3c735972026-07-03 trending: 'our lane' caption on our-own images (honesty label) -
eeb5aaa2026-07-03 trending: real our-own images on every covered card (WPB originals + self-hosted in-house webp); restore it.image overlay + /api/matchup lost in mac3 migration; GAP lanes flagged for gen -
307d7e62026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew) -
45f6d982026-07-02 deploy: live at https://trending.designerwallcoverings.com (public, CF-proxied, LE SSL); prod port 9954 (9951 taken on Kamatera) -
14d87e42026-07-02 features: multi-select facets + filter chips, Gap-score badges vs pattern-vault catalog, gaps-first sort, Lanes rollup view, price->DW-tier mapper, ?view= param, staged weekly refresh job (fix: restore dropped closing tags) -
9098c9e2026-07-02 widen data: +Society6/Redbubble/Creative Market/Patternbank rows (50 items, 8 marketplaces, 27 styles) from AW26-27 + POD bestseller research -
a0b04372026-07-02 trending-dw: bestseller-intelligence dashboard (Amazon facets + new-grid + sort/density/infinite-scroll), seeded from 2026-07-02 trend research
Authors
- Steve38
- steve1
Agents used
- code-reviewer1
Skills used
- /assets6
- /real5
- /real-images3
- /ledger2
- /trending2
- /candidates1
- /retry1
- /download1
- /attach1
- /refactor1
- /color1
- /hex1
- /trend-directions1
- /big-box1
- /company1
- /marketplace1
- /pre-existing1
- /localize-images1
- /wpb1
- /scout-feed1
- /tweed1
- /block-print1
- /scout-to-bestsellers1
- /offline1
- /tick1
- /com1
- /tick-ledger1
- /tick-state1
- /meta1
- /favicon1
Creative ideas + design notes
bedb55d · 2026-07-07 · gapgen: data-driven style-keyed briefs from live gap items (kill ID-drift landmine) + --dry-run
Root cause of the 2026-07-07 misfire: briefs were hardcoded to TR-### ids, but the feed rebuild reassigns ids, so all 16 briefs mis-targeted trends that had moved. Now briefs are built from the live item's style/color/hex at run time and non-gap ids are refused, so brief↔trend drift can't happen. --dry-run validates targeting for $0 before any Replicate spend.
7ee3b0f · 2026-07-07 · trending: expand seed to ~50 bestsellers/trending PER PLATFORM (247 items, 5 platforms)
Steve: 'add 50 from each platform.' Multi-platform Exa sweep (free-tier MCP, $0) → build-scout-feed.2026-07-07.js → 247 real named bestsellers/trend-directions across: Etsy 50 · Spoonflower 49 · Patternbank 50 · Google/Retail 48 · Amazon/Big-box 50 Sources: Wallpaperdirect/Morris bestsellers (Pimpernel #1, Acanthus, Golden Lily...), Wall Blush 1291-list (Copper Garden, Jagger, Bloom Wild 4.8*/640k), Tempaper trending + designer collabs, Amazon/big-box tested winners (Rifle Paper Co, RoomMates, NuWallpaper, York, Wallshoppe), Etsy top shops (Livettes/MUSE/TimelessDecorations), Spoonflower top-sellers + The Home Edit + artist bestsellers, Patternbank AW26-27/SS26/SS27/Resort/ catwalk trend directions. 123 matched to our-own images, 124 gaps on the pending affordance. signalRank is editorial ordering within each platform (not a claimed exact sales rank).
eec6dc5 · 2026-07-07 · chore: lint, refactor, v0.1.1 (session close)
Lint (code-reviewer): esc() applied to 3 unescaped href URLs (card tier link + 2 matchup modal links); null-guards on titleAZ/company/marketplace localeCompare sort comparators (crash-safety if a legacy record lacks the field); removed dead 'Object.assign;' no-op in qs(). Refactor (javascript-pro): MS_PER_DAY constant; staleDays IIFE → plain if-block; localize-images Map get-or-create de-cryptified; collapsed dead duplicate 'ok' branches in loadMeta tier. No behavior changes — verified: node --check clean, mapper self-test PASS, page renders, console clean, source links intact. Known/pre-existing (not this session): hardcoded admin:DW2024! default is the fleet-wide 401-gate convention (env-overridable via BASIC_AUTH) — surfaced, not changed.
00c19c0 · 2026-07-06 · trending: self-host all card images locally (scripts/localize-images.js)
'show all images, download locally first' — download the 3 distinct remote wallpapersback.com by-id images into public/assets/wpb/ and rewrite bestsellers.json to serve them same-origin. No more hotlinking (even our own WPB) → faster + resilient if the source host is down. Wired into refresh.sh --scout so future refreshes self-host too. Idempotent, $0 (fetches our own public images). 22 imaged cards now 100% local; 27 gap cards stay on the pending affordance (no our-own design yet — awaits gated generation).
c9753c2 · 2026-07-06 · trending: pin staleness to Steve's TZ (America/Los_Angeles) so prod (UTC) and Mac2 agree
Kamatera runs UTC, so the prior local-time staleDays showed 'as of Jul 6 · 1 day ago' on prod while Mac2 showed 'today'. spottedAt is a bare date with no tz — pin the reference to PT + pure Date.UTC arithmetic on both endpoints. Verified staleDays=0 under PT, UTC, and Tokyo. Fixed in server.js loadMeta + tick.sh.
74b3db6 · 2026-07-06 · trending: LIVE refresh — 49 current 2026 bestsellers via Exa scout + local-date staleDays fix
- Ran the (approved, metered ~$0.05) design-trend-scout Exa sweep: 6 searches across
Etsy/Spoonflower/Patternbank/Google trend forecasts + mural sources. Built a fresh
per-item feed (data/scout-feed.json, builder saved as build-scout-feed.2026-07-06.js)
and mapped it → bestsellers.json now dated TODAY (49 items, was 50 @ 2026-07-02).
New signals: Art-Deco now #1 by sales volume, animal-print-with-a-twist = designers'
top pick, grasscloth+metallic/tweed/block-print texture surge, marble soft-futurism,
chinoiserie crane murals, Midnight Flora, Pantone Cloud Dancer warm-neutral texture.
- FIX: staleDays computed local-date-to-date in both server.js loadMeta and tick.sh —
Date.parse('YYYY-MM-DD') is UTC midnight, so a today-local date read after 00:00 UTC
wrongly showed '1 day ago'. Now correctly shows 'today'.
- The board is genuinely live-fresh; the honesty gap is closed in practice, not just in code.
6ab84ef · 2026-07-06 · trending: build live-refresh wiring — scout→bestsellers mapper (DTD verdict A)
Closes the contrarian's core honesty gap (a 'trending' board whose data can't move) WITHOUT new credentials or unattended spend — Exa is reachable only via the sanctioned design-trend-scout agent, so the buildable-now $0 piece is the deterministic mapper: - scripts/scout-to-bestsellers.js: pure/offline mapper. Accepts the scout's per-item feed OR its lane-level trend-board.json, validates required fields, stamps TODAY's spottedAt, emits the exact board shape. --self-test proves it end-to-end with zero network. Unknown colors get a deterministic (non-random) muted-hex fallback so every card renders. - refresh.sh: rewritten into explicit paths — '--scout <feed>' (LIVE, $0 map+attach+reload) vs '--seed' (static dev re-bake); no-arg prints guidance and does NOTHING (can't silently re-bake stale data). refresh.sh NEVER runs the metered Exa pull — that stays a separate gated step. - tick.sh refresh memo: updated — wiring is now BUILT; only the metered design-trend-scout pull remains gated (then $0 map, then deploy). DTD panel 3/3 verdict A. The metered scout pull + deploy stay Steve-gated.
955e9e4 · 2026-07-06 · trending: fix contrarian-caught issues (onerror injection, header overflow, cron honesty)
- CRIT: image-404 fallback was silently broken — the pending block was injected via an inline onerror="..." string, but pending's own class="..." double-quotes terminated the attribute early (only single quotes were escaped). Moved the handler to a JS closure over `pending` (addEventListener) — zero escaping, unbreakable. Verified: forcing a 404 now renders the fallback. - header.top: added flex-wrap + gap row + tag min-width:0 — the nowrap freshness badge caused horizontal scroll on <~1100px viewports (sticky header made it persist). Verified no h-scroll at 1000px. - tick.sh: idempotency guard scoped to -maxdepth 1 (active queue only) so a resolved-but- unfixed refresh memo RE-SURFACES instead of going permanently silent; refresh memo now HONESTLY states refresh.sh re-bakes identical seed data and the real fix is building the live-Exa wiring (code-only/$0) + running the metered pull (the gated spend).
4fe938f · 2026-07-06 · trending: 10-min health+opportunity tick + launchd cron (DTD verdict A)
- scripts/tick.sh: deterministic $0 watcher — probes live uptime, measures data staleness, detects ComfyUI; drafts a GATED refresh memo when stale>threshold (7d) and an image-gap opportunity memo when ComfyUI returns. Idempotent (find-based guard). NEVER auto-deploys, NEVER auto-spends (metered Exa refresh stays Steve-gated). - ops/com.steve.trending-dw-tick.plist: StartInterval 600 (every 10 min), RunAtLoad. - resolves node absolutely (launchd minimal-PATH fix) + hardened PATH. - ledger at data/tick-ledger.jsonl (gitignored); state in data/tick-state/.
ab31ac0 · 2026-07-06 · trending: data-freshness badge + per-card spotted timestamp + gap-image pending affordance + favicon
- /api/meta endpoint surfaces generatedAt/asOf/staleDays/imageGap (freshness is the product for a trending board) - header badge: 'as of <date> · N days ago · N signals · N img-gap', amber>3d / red>7d staleness tiers - per-card '🕓 spotted <date>' chip (admin-card created-date standing rule) - 13 image-gap cards now show an intentional 'our-lane image pending' affordance instead of a bare gradient - inline SVG favicon kills the /favicon.ico 404
File tree
- .deploy.conf
- .gitignore
- README.md
- data/bestsellers.json
- data/our-catalog.json
- data/real-images/candidates/TR-001.json
- data/real-images/candidates/TR-002.json
- data/real-images/candidates/TR-003.json
- data/real-images/candidates/TR-004.json
- data/real-images/candidates/TR-005.json
- data/real-images/candidates/TR-006.json
- data/real-images/candidates/TR-007.json
- data/real-images/candidates/TR-008.json
- data/real-images/candidates/TR-009.json
- data/real-images/candidates/TR-010.json
- data/real-images/candidates/TR-011.json
- data/real-images/candidates/TR-012.json
- data/real-images/candidates/TR-013.json
- data/real-images/candidates/TR-014.json
- data/real-images/candidates/TR-015.json
- data/real-images/candidates/TR-016.json
- data/real-images/candidates/TR-017.json
- data/real-images/candidates/TR-018.json
- data/real-images/candidates/TR-019.json
- data/real-images/candidates/TR-020.json
- data/real-images/candidates/TR-021.json
- data/real-images/candidates/TR-022.json
- data/real-images/candidates/TR-023.json
- data/real-images/candidates/TR-024.json
- data/real-images/candidates/TR-025.json
- data/real-images/candidates/TR-026.json
- data/real-images/candidates/TR-027.json
- data/real-images/candidates/TR-028.json
- data/real-images/candidates/TR-029.json
- data/real-images/candidates/TR-030.json
- data/real-images/candidates/TR-031.json
- data/real-images/candidates/TR-032.json
- data/real-images/candidates/TR-033.json
- data/real-images/candidates/TR-034.json
- data/real-images/candidates/TR-035.json
- data/real-images/candidates/TR-036.json
- data/real-images/candidates/TR-037.json
- data/real-images/candidates/TR-038.json
- data/real-images/candidates/TR-039.json
- data/real-images/candidates/TR-040.json
- data/real-images/candidates/TR-041.json
- data/real-images/candidates/TR-042.json
- data/real-images/candidates/TR-043.json
- data/real-images/candidates/TR-044.json
- data/real-images/candidates/TR-045.json
- data/real-images/candidates/TR-046.json
- data/real-images/candidates/TR-047.json
- data/real-images/candidates/TR-048.json
- data/real-images/candidates/TR-049.json
- data/real-images/candidates/TR-065.json
- data/real-images/candidates/TR-066.json
- data/real-images/candidates/TR-067.json
- data/real-images/candidates/TR-068.json
- data/real-images/candidates/TR-069.json
- data/real-images/candidates/TR-070.json
- data/real-images/candidates/TR-071.json
- data/real-images/candidates/TR-072.json
- data/real-images/candidates/TR-073.json
- data/real-images/candidates/TR-074.json
- data/real-images/candidates/TR-075.json
- data/real-images/candidates/TR-076.json
- data/real-images/candidates/TR-150.json
- data/real-images/candidates/TR-151.json
- data/real-images/candidates/TR-152.json
- data/real-images/candidates/TR-153.json
- data/real-images/candidates/TR-154.json
- data/real-images/candidates/TR-155.json
- data/real-images/candidates/TR-156.json
- data/real-images/candidates/TR-157.json
- data/real-images/candidates/TR-158.json
- data/real-images/candidates/TR-159.json
- data/real-images/candidates/TR-160.json
- data/real-images/candidates/TR-161.json
- data/real-images/candidates/TR-162.json
- data/real-images/candidates/TR-163.json
- data/real-images/candidates/TR-164.json
- data/real-images/candidates/TR-165.json
- data/real-images/candidates/TR-166.json
- data/real-images/candidates/TR-167.json
- data/real-images/candidates/TR-168.json
- data/real-images/candidates/TR-169.json
- data/real-images/candidates/TR-170.json
- data/real-images/candidates/TR-171.json
- data/real-images/candidates/TR-172.json
- data/real-images/candidates/TR-173.json
- data/real-images/candidates/TR-174.json
- data/real-images/candidates/TR-175.json
- data/real-images/candidates/TR-176.json
- data/real-images/candidates/TR-177.json
- data/real-images/candidates/TR-185.json
- data/real-images/candidates/TR-186.json
- data/real-images/candidates/TR-187.json
- data/real-images/candidates/TR-188.json
- data/real-images/candidates/TR-189.json
- data/real-images/candidates/TR-194.json
- data/real-images/candidates/TR-211.json
- data/real-images/candidates/TR-212.json
- data/real-images/candidates/TR-214.json
- data/real-images/candidates/TR-215.json
- data/real-images/candidates/TR-216.json
- data/real-images/candidates/TR-217.json
- data/real-images/candidates/TR-218.json
- data/real-images/candidates/TR-230.json
- data/real-images/candidates/TR-231.json
- data/real-images/ledger.json
- data/real-images/manifest.json
- data/scout-feed.json
- ops/com.steve.trending-dw-refresh.plist
- ops/com.steve.trending-dw-tick.plist
- package.json
- public/assets/gap/TR-004.png
- public/assets/gap/TR-013.png
- public/assets/gap/TR-014.png
- public/assets/gap/TR-017.png
- public/assets/gap/TR-023.png
- public/assets/gap/TR-050.png
- public/assets/gap/TR-071.png
- public/assets/gap/TR-182.png
- public/assets/gap/TR-183.png
- public/assets/gap/TR-191.png
- public/assets/gap/TR-201.png
- public/assets/gap/TR-238.png
- public/assets/gap/TR-240.png
- public/assets/pilot/h_black.webp
- public/assets/pilot/h_blush.webp
- public/assets/pilot/lane1.webp
- public/assets/pilot/lane1b.webp
- public/assets/pilot/lane1c2.webp
- public/assets/pilot/lane2.webp
- public/assets/pilot/lane2b.webp
- public/assets/pilot/lane2c.webp
- public/assets/pilot/lane3b.webp
- public/assets/pilot/lane4.webp
- public/assets/pilot/lane5.webp
- public/assets/pilot/lane6.webp
- public/assets/pilot/m_emerald.webp
- public/assets/pilot/m_plum.webp
- public/assets/real/01ca889d6eb7af65.png
- public/assets/real/01fed1ec969baa25.png
- public/assets/real/027ad3a070448e21.jpg
- public/assets/real/02be936a6c5eb4c9.jpg
- public/assets/real/04152a5bef91827a.jpg
- public/assets/real/06354f219cec20b7.png
- public/assets/real/07283c9736eae19a.jpg
- public/assets/real/0ab7a0b22c9877fb.png
- public/assets/real/0c07236ddf96122f.jpg
- public/assets/real/158f888907834f9e.jpg
- public/assets/real/1b520f98fd656dc6.png
- public/assets/real/1fcb172898433b84.png
- public/assets/real/272cfc8f00dd9d4b.png
- public/assets/real/2a2e3b87075efe46.jpg
- public/assets/real/2b2225ba89b375e8.jpg
- public/assets/real/2c6dde81a92f60d1.png
- public/assets/real/330f7e521a9ed495.png
- public/assets/real/3ddd320d8423d628.jpg
- public/assets/real/3e0fe463c7d438bc.jpg
- public/assets/real/3ec28b7873415bc7.png
- public/assets/real/4129690cd1352750.png
- public/assets/real/427638acec417e9f.png
- public/assets/real/434de6d3ae0117a3.jpg
- public/assets/real/461d70e2c2863431.png
- public/assets/real/469112ed0f40143e.png
- public/assets/real/4a6a4f34c57301bd.png
- public/assets/real/5638ea6cdccef45a.png
- public/assets/real/5713a30ad823813e.jpg
- public/assets/real/627b5e32ec097587.jpg
- public/assets/real/6373abf85d16c441.jpg
- public/assets/real/63817889b833cb7e.png
- public/assets/real/6543cf4ad46ab0d9.png
- public/assets/real/68a8100657a9ddd5.png
- public/assets/real/6ee39dbc570d45d2.png
- public/assets/real/75d516ccacf751ef.jpg
- public/assets/real/76512e93c1d2c6cf.png
- public/assets/real/78c1121be7f943b7.png
- public/assets/real/7eda28b38208d9f2.png
- public/assets/real/843bf9d1292e3f2c.jpg
- public/assets/real/84b85ac096533c4c.png
- public/assets/real/8ac260c9c4fdf615.png
- public/assets/real/8cb6f548778a1f92.jpg
- public/assets/real/929a320faa1ee792.png
- public/assets/real/94d6e549884685a3.jpg
- public/assets/real/951e80bc6fd362ff.png
- public/assets/real/99480187e77c2b0d.jpg
- public/assets/real/9d0d0eb5ad5bb6a4.jpg
- public/assets/real/a2bcda7cde8250f2.jpg
- public/assets/real/a7956ba04f530fd9.jpg
- public/assets/real/a8af0db4f6ef427c.jpg
- public/assets/real/ae1e26775eeccb7d.png
- public/assets/real/af3b4dbde07b8505.jpg
- public/assets/real/af8b3c20ff008e91.png
- public/assets/real/b0f5b9183747fc3e.png
- public/assets/real/b21164bc3813fbdb.jpg
- public/assets/real/b3818e9a9baa078f.png
- public/assets/real/b7a9cd1467d0e97c.jpg
- public/assets/real/b7e60c0a34ed1144.png
- public/assets/real/b7e9bcab518245af.jpg
- public/assets/real/b8de07f4fac9e68c.png
- public/assets/real/baaec803e93a4212.jpg
- public/assets/real/bc263a7bcd9ab2d7.jpg
- public/assets/real/c0f9456906fc21c2.png
- public/assets/real/c1608aaa84294d72.jpg
- public/assets/real/c63e68b01715efd4.png
- public/assets/real/c7ed7c11bae10431.png
- public/assets/real/c87e268467fa93f8.png
- public/assets/real/c936eb590c093388.png
- public/assets/real/cdb37426bf51b786.png
- public/assets/real/ce3f2fc1cde14615.png
- public/assets/real/d066d461ff6c2eb3.png
- public/assets/real/d1b48ba902aec415.jpg
- public/assets/real/de79c816aba58aed.jpg
- public/assets/real/dfb138fece148019.png
- public/assets/real/e01b292ddd4d5ab7.png
- public/assets/real/e6e1c1c409ab469f.jpg
- public/assets/real/e8351fec81a4a574.jpg
- public/assets/real/e95446e2889253e7.jpg
- public/assets/real/eada6424bc14e48e.png
- public/assets/real/eca58fe40addd80c.jpg
- public/assets/real/ef4dc765b1ea6850.png
- public/assets/real/f2fd8b44cd969a7e.jpg
- public/assets/real/f4343b2478615104.jpg
- public/assets/real/f5a2cdcb39d1d378.png
- public/assets/real/fff7613d27edc11a.png
- public/assets/real/katezaremba-wiggle-harlequin-flower.png
- public/assets/real/mersea-cozy-cottage-floral.png
- public/assets/real/timeless-boho-ethnic-354.png
- public/assets/real/timeless-mandala-535.png
- public/assets/real/timeless-mexican-embroidery-birds-blush-288.png
- public/assets/real/timeless-persian-ikat-543.png
- public/assets/real/timeless-provence-violet-lavender-262.png
- public/assets/wpb/138.png
- public/assets/wpb/40171.png
- public/assets/wpb/57669.png
- public/assets/wpb/57678.png
- public/assets/wpb/57705.png
- public/index.html
- scripts/__pycache__/heal-tile.cpython-314.pyc
- scripts/attach-images.js
- scripts/attach-real-images.js
- scripts/build-scout-feed.2026-07-06.js
- scripts/build-scout-feed.2026-07-07.js
- scripts/download-real-images.js
- scripts/gapgen.js
- scripts/heal-tile.py
- scripts/localize-images.js
- scripts/make_tileable.py
- scripts/plan-real-images.js
- scripts/push-to-shopify.js
- scripts/qc-real-images.js
- scripts/real-lib.js
- scripts/refresh.sh
- scripts/scout-to-bestsellers.js
- scripts/seed.js
- scripts/tick.sh
- server.js