Date: 2026-05-10 (continued autonomous /loop)
5 substantial items. Catalog UX upgrade: visible freshness signals + recency sort.
The catalog had no visible signal showing which products were recently shipped. A buyer returning to the page couldn't tell which ideas were new this week vs which had been there for days.
Shipped: a NEW badge that appears on the 42 catalog cards for products first-shipped in the last 48 hours. Threshold is configurable.
Recency derived from the OLDEST file mtime across stable per-product files:
financials.jsonelevator.mp3agent-spec.mdoutreach-ready.mdscreenshot.pngThese files are rarely re-touched by injectors, so their oldest mtime approximates "first shipped" better than index.html (which is touched hourly by injectors).
Threshold chosen: 48 hours. At 24h we had ~23 products marked NEW (12% of catalog). At 48h we have 42 (21%). 21% is enough to feel fresh, not so many it dilutes the signal.
Added to the catalog's sort dropdown alongside Adoptability, Year-1 take-home, Year-1 ARR, and A-Z.
Implementation:
data-shipped="<unix-ts>" attribute computed from _first_shipped_ts(slug) helperdata-shipped valuesregen-catalog-v2.py) so the change survives regenerationsNew _first_shipped_ts(slug) helper inside catalog generator. Reusable for future features (e.g. dedicated /factory/fresh/ improvements or a "this week" cluster).
.badge-new CSS class: muted gold (#fff3b8 background, #9a6f00 text, subtle border). Distinct from existing badge colors. Doesn't compete with the Adoptability score in visual hierarchy.
0 em-dashes shipped on catalog or any iter-35 file.
/home/ubuntu/factory/director/regen-catalog-v2.py_first_shipped_ts(slug) and _is_new(slug) helpersdata-shipped attribute to card.badge-new CSS class<span class="badge badge-new">NEW</span> when _is_new(slug) returns True/srv/sites/factory/catalog/index.html (195 cards, 42 with NEW badges, new sort option, data-shipped on all cards)All .bak backups preserved.
Returning visitors are a high-conversion-intent audience. Someone who's visited the catalog 3 times and seen no new content thinks the studio is dormant. A visible NEW badge on cards shipped this week signals "active, alive, worth bookmarking."
The Recently-shipped sort option lets ops-type buyers find the freshest ideas first (they tend to assume new = differentiated, even if false).
These are small UX wins individually but compounding for retention.
Same Wes-side as before:
The Wishdeal Factory is now a tight marketplace with active freshness signals, ~1500 sub-pages with consistent nav, 192 products with full buyer-path artifacts, 10 audience landing pages, per-product trust signals + objection handlers + previews + graduated proof page, 59 of 59 health endpoints green, link audit at 10 broken (all admin/log surface). 0 em-dashes shipped across 35 iterations.
The product reads as a real marketplace, not a template generator. Remaining work is Wes-side: Stripe + traffic push.