Ship log · iter #15
Iteration 15 ship log
2026-05-10 · continued autonomous /loop, post-midnight
Date: 2026-05-10 (continued autonomous /loop, post-midnight)
What shipped
New scripts on ubuntu@40.160.2.121
| File | Purpose | Cron |
aggregate-views.py | Reads events.jsonl, filters internal IPs (40.160.2., 127., 10., 172.16-31, 192.168.) and HeadlessChrome / bot UAs and test slugs. Aggregates per-slug counts (last 24h, 7d, all-time). Writes /srv/sites/factory/view-counts.json (public) + /srv/sites/factory/admin/view-counts.json (admin with top_7d). | */10 |
regen-adopt-pages.py | 178 /factory/adopt/<slug>/ pages. Companion to /factory/unlock/<slug>/. Explains $99-$199 adopt scope: dossier + code starter + brand kit + copy library + outreach pack. Email-capture form posts tier="adopt" to /api/intent. | 50 hourly |
patch-catalog-trending.py | Patches catalog to read view-counts.json and add "trending" badge to products with last_7d >= 5 external views. Marker WD_FACTORY_PRICING_BLOCK_v1. | one-time |
patch-inbox-views.py | Patches operator inbox to surface "Top viewed (last 7 days)" table reading from admin view-counts.json. | one-time |
Live URLs
- 178 new https://wishdeal.com/factory/adopt/
<slug>/ pages (companion to unlock) - https://wishdeal.com/factory/view-counts.json - LIVE public view-count data (currently empty - filtered all internal traffic)
- https://wishdeal.com/factory/admin/view-counts.json - LIVE admin view-count data with top_7d sorted list
- Catalog now displays "Trending" badge on products with 5+ external views in last 7 days
- Operator inbox now has "Top viewed products (last 7 days)" section
View-tracking pipeline
Events come in via /api/event from page-loaded JS tracker (with bot filter + 10-min throttle per browser per slug).
The aggregator filters:
- Server IP (40.160.2.121) - HeadlessChrome screenshot job
- Loopback / private IP ranges
- Bot user agents (HeadlessChrome, bot, crawl, spider, preview, fetch, curl, python)
- Test slugs (start with "test")
Result: of 178 events recorded since iter 14, 0 were external (all internal screenshot/test traffic). When Wes pushes traffic to the catalog, real views accumulate and:
- "Trending" badges appear on catalog cards (5+ views/week threshold)
- Top-viewed table shows in operator inbox
- Friday digest can highlight the most-viewed of the week
Hero polish
In flight: top 151-200 batch. 148/200 done.
What's now better
- Adopt-tier has its own landing page - was just a button on unlock pages; now
/factory/adopt/<slug>/ explains exactly what's in the $99-$199 tier with 6-cell what's-included grid and $99 vs $199 comparison. - The view-tracking pipeline is closed end-to-end. Page load → /api/event → events.jsonl → aggregate every 10 min → view-counts.json → catalog "Trending" badge + operator inbox top-viewed.
- Internal traffic is filtered so Wes sees real buyer signal, not snap-products.sh's HeadlessChrome.
- Operator inbox now shows top-viewed products alongside intent captures + feedback - one screen for "what's working."
What still needs work
- Stripe wiring still pending Wes's keys. Adopt-tier email-capture works; checkout doesn't.
- Hero polish 151-200 in flight.
- Real external traffic to validate the trending badges.
Next 5 recommended autonomous tasks
- Hero polish 151-200 finish.
- Stripe wiring when keys arrive.
- Site-wide catalog refinement based on real traffic (when it arrives).
- Affiliate link generator - if a network contact unlocks a dossier from Wes's curated URL, track + credit.
- Long-tail SEO content - blog posts about each category linking to the catalog.
Files changed inventory
- New: 1 aggregator + 1 page generator + 2 patchers
- New: 178
/srv/sites/factory/adopt/<slug>/index.html - New:
/srv/sites/factory/view-counts.json (public) - New:
/srv/sites/factory/admin/view-counts.json (admin) - Modified:
regen-catalog-v2.py (trending badge logic; backup .bak.before-trending) - Modified:
regen-operator-inbox.py (top-viewed section; backup .bak.before-views) - Modified: crontab (2 new entries)
Cumulative iter1-iter15 numbers
- 50+ buyer-facing or admin pages live
- 6 Node API routes (intent, dossier, mint-token, feedback, stripe-webhook, event)
- 3 Wes-side CLIs + Friday newsletter + launch announcement + view aggregator
- All 179 products with full buyer-path artifacts
- 159/179 with brand identity
- 148/179 with polished hero copy (top 100 + top 101-148 in flight)
- 50/179 with /vs/ comparison pages
- 178/179 with /adopt/ companion pages
- 172 OG images + 1 catalog OG card
- Repair queue: 96% avg complete
- 75 broken internal links
- ~93 active cron entries
- 6 real intent captures + 2 feedback + 178 view events (all internal so far)