# Wishdeal Factory buyer-path - iteration 6 ship log

**Date:** 2026-05-09 (continued autonomous /loop)

## What shipped

### New scripts on `ubuntu@40.160.2.121`

| File | Purpose | Cron |
|---|---|---|
| `regen-operator-inbox.py` | `/factory/admin/inbox/` - unified timeline of intent + feedback + Stripe webhooks + dossier fulfillments. Auto-refreshes every 60s. Per-day rollup chart. Copy-email + mint-command shortcuts. | `* * * * *` |
| `regen-categories.py` | `/factory/categories/` index + 18 per-category cluster pages (`/sales-motion/`, `/finance/`, `/legal/`, etc.). Each shows blurb, count, top-Adoptability product, full card grid. | `*/30` |
| `regen-daily-digest.py` | `/srv/sites/factory/admin/daily-digest.md` + HTML. Yesterday's intents + feedback + fresh products + repair queue delta + cost. Action items section. | `0 7` (7am daily) |
| `patch-compare-shareable.py` | One-time patch on regen-compare-page.py. Compare page now: reads `?slugs=a,b,c` URL param to hydrate localStorage shortlist; "Share shortlist" button copies a URL with current shortlist. | one-time |

### Live URLs

- https://wishdeal.com/factory/admin/inbox/ - LIVE unified ops timeline (refreshes every minute)
- https://wishdeal.com/factory/categories/ - LIVE category index (18 categories)
- https://wishdeal.com/factory/categories/sales-motion/ - example cluster page
- https://wishdeal.com/factory/admin/daily-digest/ - LIVE morning summary (regenerates 7am daily)
- https://wishdeal.com/factory/compare/?slugs=bookkeeper-ai,dispatch-ai - now hydrates shortlist from URL

### Background tasks (still completing as I close iter 6)

- **Hero polish next 10** running (top 11-20). 13 of 20 JSON files done so far. Apply cron picks them up every 5 min.
- **Brand applicator on 30** finished: 19 of 30 applied successfully (others lacked brand brief or `</head>` tag in template).

### Cumulative buyer-facing pages (iter 1-6)

| URL | Iter | Purpose |
|---|---|---|
| `/factory/catalog/` | 1 | Browse all ideas, filter, sort |
| `/factory/unlock/<slug>/` | 1 | Per-product $5 dossier unlock + email capture |
| `/factory/operator-partnership/` | 1 | Done-with-you tier scope |
| `/factory/honest/` | 1 | Honest expectations |
| `/factory/repair-queue/` | 1 | Admin: completeness audit |
| `/factory/outreach-launcher/` | 2 | Copy-paste outreach with status tracking |
| `/factory/compare/` | 2 | Side-by-side comparison + **shareable URL** (iter 6) |
| `/factory/fresh/` | 3 | Just-shipped tray |
| `/factory/builds/<slug>/faq/` | 3 | 170 FAQ pages |
| `/factory/pricing/` | 4 | 4-tier explainer + comparison |
| `/factory/admin/captures/` | 4 | Intent captures admin |
| `/factory/api/dossier/<slug>?t=...` | 4 | HMAC-gated dossier endpoint |
| `/factory/feedback/<slug>/` | 5 | 172 feedback forms |
| `/factory/api/feedback` | 5 | Feedback POST endpoint |
| `/factory/api/stripe-webhook` | 5 | Stripe webhook receiver |
| `/factory/admin/inbox/` | 6 | **Unified ops timeline** |
| `/factory/categories/` | 6 | **Category cluster pages** (18 of them) |
| `/factory/admin/daily-digest/` | 6 | **Morning summary for Wes** |

That's **35 distinct buyer-facing or admin pages** created across 6 loop iterations.

## Operator inbox features

- Auto-refresh every 60s (meta-refresh)
- 5 summary cells: intent count, feedback count, Stripe webhooks, fulfillments, last-7-days bar chart
- Timeline of latest 300 events with: relative time, kind pill (color-coded by tier/sentiment), slug link, detail (email/note/sentiment/usefulness), copy-email button, "mint+email" hint button
- Auto-filters test entries (visual gray-out)
- Status tracking via localStorage in `/admin/captures/` (separate page) - that data persists across refreshes
- Repair queue summary in header
- Studio numbers in header (product count, cost, tick number)

## Daily digest features

When this fires at 7am, Wes's morning starts with:
- TL;DR with 6 numbers (intents, feedback, fulfillments, Stripe events, fresh products, completeness)
- Per-intent listing (timestamp, slug, tier, email, note)
- Per-product intent counts (top 10)
- Feedback listings with sentiment/usefulness/excerpts
- Fresh-products list (last 24h)
- Studio numbers (product count, cost, tick)
- Action items section (calls out unanswered intents + negative feedback)

Both markdown (sharable) and HTML versions emit. The HTML page has a nav bar linking to inbox/captures/digest/repair/home.

## Categories cluster pages

- 18 categories live: sales-motion, finance, legal, healthcare, agency, hospitality, trades, hr-recruiting, ecommerce, education, field-service, customer-success, devops-saas, developer-tools, content, real-estate, general-saas, nonprofit, compliance
- Each has a blurb describing the buyer profile + a count + a top-Adoptability call-out
- Per-category page renders all products in that category as cards, sorted by Adoptability descending
- SEO-friendly canonical URLs and meta descriptions
- Index page ranks categories by product count

## Shareable shortlist (compare page)

- New "Share shortlist" button next to "Clear shortlist"
- Click → copies `https://wishdeal.com/factory/compare/?slugs=a,b,c` (with current shortlist)
- When loaded with `?slugs=...`, page reads URL param + merges into localStorage
- Lets a buyer email "here are 5 I'm considering" to a colleague who can open the link and see the same comparison

## What's now better for buyers

1. **Wes opens one URL** (`/factory/admin/inbox/`) and sees every ops event - no more digging through JSONLs.
2. **Daily digest at 7am** lands in the same admin tree; Wes can save it to email + paste to Slack.
3. **Buyers can navigate by category**, not just search/filter - lower-friction discovery for buyers who know "I want a sales-motion idea."
4. **Shortlists are shareable** - low-effort viral mechanic. Buyer A sends URL to buyer B; B opens with shortlist pre-filled.
5. **The whole admin surface (inbox + captures + repair-queue + daily-digest)** is unified under `/factory/admin/*` - cleaner mental model for Wes.

## What still needs work

- **Stripe wiring** - infrastructure 100% ready; needs Wes's API keys.
- **Email-send integration** - SendGrid or Postmark.
- **Hero polish next batch** - top 11-20 in progress; top 21-30 next iter.
- **Vanilla product mop-up** - 11 still wear studio defaults (their templates don't have `</head>` for our injection; need a different injection point).
- **Per-product reading time + word count** would be a nice catalog enhancement.

## Next 5 recommended autonomous tasks

1. **Stripe wiring** when Wes provides keys.
2. **Continue hero polish on next 10** (`hero-polish-cli.py 30`).
3. **Vanilla mop-up** with a different injection strategy (just replace the existing brand-related CSS vars in-place rather than appending).
4. **Sub-page generator** - 106 products lack pricing sub-pages, similar gap in case-studies. Same template-from-existing-data pattern.
5. **First-real-traffic audit** - once Wes shares the catalog URL with anyone, intent captures will spike. Make sure the operator inbox handles 100+ events well.

## Files changed inventory

- New: 4 Python generators
- New: `/srv/sites/factory/admin/inbox/index.html`
- New: `/srv/sites/factory/categories/index.html` + 18 per-category pages
- New: `/srv/sites/factory/admin/daily-digest.md` + `daily-digest/index.html`
- Modified: `/home/ubuntu/factory/director/regen-compare-page.py` (share button + URL hydration; backup `.bak.before-share`)
- Modified: 19 product pages (brand override CSS injected via background brand-applicator)
- New: more hero polish JSONs (3 of 10 top 11-20 so far; cron applies)
- Modified: crontab (3 new entries; total factory entries ~71)

## Cumulative iter1-iter6 inventory

- **34 generator/helper scripts** in `/home/ubuntu/factory/director/`
- **5 Node API routes** (intent, dossier, mint-token, feedback, stripe-webhook)
- **~71 active cron entries**
- **35 buyer-facing or admin pages** live
- **172 products with full buyer-path artifacts** (landing, pricing band, hero insight, FAQ, dossier teaser, gated full dossier, outreach pack, email drip, feedback form, brand identity for 159 of them, polished hero for top 13)
- **Repair queue 96% complete, 89/172 fully complete**
- **4 real intent captures + 2 feedback entries** in production data
