# Wishdeal Factory buyer-path - iteration 25 ship log

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

## What shipped

This iteration was high-leverage: caught and fixed 4 cross-cutting bugs affecting hundreds of pages, plus shipped per-audience outreach copy + a /random/ exploration page.

### Bugs fixed (impact: hundreds of pages)

| Bug | Pages affected | Fix |
|---|---|---|
| Tagline double-period (`"Your books, done by morning.. Below..."`) | 151 unlock pages | Added `_strip_trailing_period()` helper + `tagline_clean` local in regen-unlock-pages.py |
| Unlock-page nav missing /for/, /faq/, /changelog/ | 185 unlock pages | Updated nav anchor in generator |
| Unlock-page footer missing FAQ + Changelog links | 185 unlock pages | Updated footer anchor in generator |
| Em/en dashes from upstream `fermi_summary`/`gtm_motion` text | 185 unlock pages | Render-time `.replace("—", " - ")` after html.escape |

All 4 fixed at the **generator source** level — every future regen of the unlock pages keeps the fixes. Plus running the regen now propagated to all 185 existing pages.

### New: per-audience outreach copy

Each `/factory/for/<audience>/` page (6 audiences) now includes a "Share with your network" section near the bottom with:
- A LinkedIn post (~280 chars), tailored to that audience
- An email body (~150 words), tailored to that audience
- Subject line for the email
- Copy-to-clipboard buttons on both
- Plain-text disclosure: "Paste-ready copy if you want to share this catalog with peers in this audience. Nothing auto-sends."

Audiences with copy:
- agencies: white-label/retainer angle
- solo-founders: 30-90 day MVP angle
- sales-teams: not-yet-crowded niche angle
- b2b-saas-operators: adjacent-product angle
- consultants: productization angle
- vertical-saas-operators: better-economics-than-horizontal angle

This makes the audience pages directly useful for Wes's outreach push, not just SEO landings. When he's ready to push traffic to a specific audience, he opens the page, clicks Copy, and pastes into LinkedIn or Gmail.

### New: /factory/random/

Tiny but real exploration page. Loads `/factory/adoptability.json`, picks a random product, redirects to that product's landing page. Adds a "Surprise me" pill to the catalog header for quick exploration. `noindex` so it doesn't pollute the sitemap.

### Em-dash audit

Final audit on this-iteration pages: zero em-dashes shipped. Includes the previously-discovered upstream content (fermi summaries) which is now stripped at render time.

## Files changed inventory

### Modified (durable, source-level changes)
- `/home/ubuntu/factory/director/regen-unlock-pages.py` — 4 patches (helper, tagline_clean, nav, footer, dash-strip)
- `/home/ubuntu/factory/director/regen-audience-pages.py` — 6 audience entries + outreach render block

### Modified (one-off content edits)
- `/srv/sites/factory/catalog/index.html` — added "Surprise me" pill

### Re-rendered
- 185 `/factory/unlock/<slug>/index.html` (all bug fixes propagated)
- 6 `/factory/for/<audience>/index.html` (new outreach blocks)
- `/srv/sites/factory/for/index.html` (audience index)

### New
- `/srv/sites/factory/random/index.html`

All `.bak` backups preserved.

## Why this matters

Three of these are direct conversion-rate improvements:
1. Removing the "morning.." double-period on 151 unlock pages eliminated an obvious AI-tell artifact buyers would notice on the most-trafficked page in the funnel.
2. Per-audience outreach copy means Wes can push traffic to 6 different audiences without writing copy each time — paste, send, watch.
3. Em/en dash strip on 185 unlock pages — same reason as the double-period.

The /random/ page is more cosmetic but adds a fun exploration affordance.

## Status snapshot

- 185 products in catalog (up 2 since iter 24)
- 60+ buyer-facing pages
- Sitemap: 1259 URLs
- ~100 cron entries
- Director watchdog alive
- Em-dashes shipped this session: 0

## What still needs work

Same Wes-side as iter 24:
1. Stripe wiring (30 min)
2. Email-send for auto-fulfill
3. First real traffic push

The factory's surface quality is significantly tighter than it was 60 minutes ago.

## Next 5 recommended autonomous tasks

1. **Per-product objection handler** — embedded inline on `/unlock/<slug>/` before the CTA. Top 3 objections from the dossier with 1-line responses. Increases conversion at the moment of decision.
2. **Hero-polish second pass** — rerun Claude CLI on the 50 lowest-Adoptability landing pages to lift their copy quality (the highest-Adoptability ones already polished).
3. **Factory health page robustness** — current health check is 34 endpoints; add a sample of `/unlock/<slug>/`, `/adopt/<slug>/`, `/builds/<slug>/` pages to catch regressions like the double-period bug earlier.
4. **More audience pages** — "AI ideas under $5k to launch", "AI ideas you can launch in 30 days", "AI for ecommerce store operators".
5. **Per-product `outreach.html`** — reads existing outreach packs (where available) and renders a paste-ready page. Currently outreach copy exists per-product but isn't surfaced as a page.

## Cumulative iter 1-25

60+ buyer-facing pages, 185 products, hundreds of regenerated sub-pages, all em-dashes/typos that I introduced or surfaced are now zero. Next iteration can keep finding cross-cutting bugs or move into the conversion-handler layer.
