Trending Dw

repo: ~/Projects/trending-dw · 39 commits · 0 in last 24h, 0 in last 7d ·

Search the build

39 commits indexed

  1. ae386f4 2026-07-15 chore: v0.3.0 (session close) — lint+refactor review clean, no fixes needed
  2. 45d6a46 2026-07-15 UX: tiered default sort — real product images lead, our-lane designs next, pending last
  3. 2374e12 2026-07-15 UX: dedupe our-lane fallback heroes (full-bleed once per design, repeats render as tinted inset) + attach first 16 real images
  4. 8f3f89d 2026-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
  5. 8ddd3d1 2026-07-15 auto-save: 2026-07-15T11:06:03 (3 files) — data/real-images/candidates/ data/real-images/ledger.json public/assets/real/
  6. b3b4e49 2026-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)
  7. c44ad99 2026-07-15 real-image pipeline scaffold: plan/download/qc/attach scripts + fingerprint-keyed ledger (internal-only marketplace images)
  8. 0968c22 2026-07-08 chore: v0.2.0 (session close) — 247-item multi-platform expansion + tz-pin + image localization (lint/refactor: clean)
  9. eb73264 2026-07-07 chore: v0.1.3 (session close)
  10. 39b1dba 2026-07-07 gapgen: cost guard — refuse paid Replicate by default (Steve: use local models); Replicate now opt-in via GEN_BACKEND=replicate
  11. 8e9ac73 2026-07-07 chore: lint guards (colorGate NaN, --rolls, json.loads) + refactor (dead imports) + version bump (session close)
  12. 86ce32b 2026-07-07 trending: reship 10 vetted+deduped gap tiles (settlement-gated + QC'd) per Steve approval; drop 7 redundant
  13. 0ed523e 2026-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
  14. 8e5b736 2026-07-07 trending: attach 17 AI-original texture tiles to gap lanes (seam-clean, settlement-safe) + Texture-Effect color cap 3->5
  15. 7991ccc 2026-07-07 auto-save: 2026-07-07T09:59:53 (1 files) — scripts/__pycache__/
  16. 52f5a8b 2026-07-07 gapgen: add file-based heal-tile.py (near-miss seam rescue, reuses wallco heal algo, no DB)
  17. bedb55d 2026-07-07 gapgen: data-driven style-keyed briefs from live gap items (kill ID-drift landmine) + --dry-run
  18. c96132f 2026-07-07 trending: fix infinite-scroll stall (fill while sentinel visible) + default sort to imaged-first
  19. 7ee3b0f 2026-07-07 trending: expand seed to ~50 bestsellers/trending PER PLATFORM (247 items, 5 platforms)
  20. eec6dc5 2026-07-07 chore: lint, refactor, v0.1.1 (session close)
  21. 00c19c0 2026-07-06 trending: self-host all card images locally (scripts/localize-images.js)
  22. c9753c2 2026-07-06 trending: pin staleness to Steve's TZ (America/Los_Angeles) so prod (UTC) and Mac2 agree
  23. 74b3db6 2026-07-06 trending: LIVE refresh — 49 current 2026 bestsellers via Exa scout + local-date staleDays fix
  24. 6ab84ef 2026-07-06 trending: build live-refresh wiring — scout→bestsellers mapper (DTD verdict A)
  25. 955e9e4 2026-07-06 trending: fix contrarian-caught issues (onerror injection, header overflow, cron honesty)
  26. 4fe938f 2026-07-06 trending: 10-min health+opportunity tick + launchd cron (DTD verdict A)
  27. ab31ac0 2026-07-06 trending: data-freshness badge + per-card spotted timestamp + gap-image pending affordance + favicon
  28. baeb0bd 2026-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)
  29. bf548c9 2026-07-03 gap-lane generator: 3 seam-PASS settlement-OK tiles (TR-013/014/050) + gate driver
  30. bd1056c 2026-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
  31. 732d40d 2026-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
  32. de3b2ec 2026-07-03 deploy: trending-dw live with real our-own images; INSTALL_CMD=true for zero-dep server
  33. 3c73597 2026-07-03 trending: 'our lane' caption on our-own images (honesty label)
  34. eeb5aaa 2026-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
  35. 307d7e6 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  36. 45f6d98 2026-07-02 deploy: live at https://trending.designerwallcoverings.com (public, CF-proxied, LE SSL); prod port 9954 (9951 taken on Kamatera)
  37. 14d87e4 2026-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)
  38. 9098c9e 2026-07-02 widen data: +Society6/Redbubble/Creative Market/Patternbank rows (50 items, 8 marketplaces, 27 styles) from AW26-27 + POD bestseller research
  39. a0b0437 2026-07-02 trending-dw: bestseller-intelligence dashboard (Amazon facets + new-grid + sort/density/infinite-scroll), seeded from 2026-07-02 trend research

Authors

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

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

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

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

Other build journals

← Trademarks Copyright  ·  all 4 projects  ·  Twil Golive 2026 07 →

Export

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

rendered in 1ms