# Wishdeal Factory buyer-path - iteration 44 ship log

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

## What shipped

5 items. Closed a real UX gap: 32 products had broken /pricing/ pages that fell through to Caddy's homepage fallback.

### Bug caught + fixed: 32 products served homepage instead of pricing

Discovered that `/factory/builds/<slug>/pricing/` returned 200 OK for 32 products even though the page didn't exist - Caddy's `try_files` fallback was silently serving the homepage. So a buyer clicking "Pricing" on `/builds/activation-ai/` got the Wishdeal Factory homepage with the wrong title and no pricing info. Confusing and misleading.

**Fixed**: built `regen-fallback-pricing.py` which generates a real /pricing/ page for any product missing one:
- Product-specific header (name + tagline + Adoptability + Year-1 take-home)
- The 4-tier marketplace pricing block (Browse free / Unlock $5 / Adopt $99-199 / Operator partnership $2,500+)
- Honest disclosure: "this page reflects the standard 4-tier pricing; product-specific pricing study lives inside the $5 dossier"
- Direct CTAs: Unlock dossier $5 + See marketplace pricing + Back to product
- 30-day money-back guarantee linked in Terms

### 32 pricing pages written

Generator ran across all 207 products with `/index.html`. Of those, 174 already had custom-branded pricing pages (the original builder produces them); the 32 newest products got the fallback page.

Coverage now: **208 of 207 products** (1 extra is a stale dir, harmless).

### Sitemap +32 URLs → 1648 total

`regen-sitemap-v2.py` already enumerates `/pricing/` subpath; just needed regen to pick up the 32 new pages.

### Cron + idempotency

Added `5 */2 * * *` cron entry. Generator is idempotent (`skipped 174 already-existed`). New products that ship will get a fallback pricing page within 2 hours, until the original builder produces a custom one.

### Em-dash sweep verified

Universal sweep ran: 12 dashes stripped from 3 files. Factory-wide count: 0. The 32 new pricing pages all clean (the generator wraps output with `_no_dash()`).

### Health check unchanged

60/60 passing at 16ms avg.

## Files changed inventory

### New
- `/home/ubuntu/factory/director/regen-fallback-pricing.py` (fallback pricing generator, idempotent)

### Re-rendered
- 32 new `/srv/sites/factory/builds/<slug>/pricing/index.html` files
- `/srv/sites/factory/sitemap.xml` (1648 URLs)

### New cron
- `5 */2 * * *` regen-fallback-pricing (every 2 hours)

## Why this matters

This was an invisible UX bug: status code 200, but wrong content. The kind of issue that would never surface in a routine link audit (the link "works") but would actively confuse buyers (they click Pricing, see Mission Control homepage).

For 32 products that's a meaningful broken impression. Now closed.

Plus the fallback page has its own value: it tells the buyer about the marketplace pricing model honestly while pointing to the $5 unlock for product-specific pricing detail.

## Status snapshot

- 207 products in catalog
- 208 pricing pages (208 of 207 = 100%+ coverage)
- 203 /how-it-works/ pages
- 207 unlock pages with money-back guarantee + objection handler
- 60/60 health endpoints passing
- Sitemap: 1648 URLs
- 0 em-dashes factory-wide

## What still needs work

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

## Next 5 recommended autonomous tasks

1. **Same-bug-class audit**: check other potential 200-OK-but-wrong-content surfaces. /how-it-works/, /vs/, /case-studies/, /faq/, /about/ for products missing those pages.
2. **Hero-polish second pass** - Claude CLI on bottom-50 Adoptability products.
3. **Catalog card hover preview** - hover shows first line of dossier teaser.
4. **More audience pages** - "for-no-code-builders", "for-services-firms-in-EU".
5. **Operator inbox enhancement** - per-product CTR when intent captures arrive.

## Cumulative iter 1-44

The factory has closed another silent-bug class: silent-200-wrong-content URLs. Every product now has:
- Working /builds/<slug>/ landing
- Working /pricing/ page (custom or fallback)
- Working /how-it-works/ page (203 of them)
- Working /unlock/ page with money-back + objection handler + how-it-works link
- Working /adopt/ page

Plus the marketplace shell: catalog, FAQ, changelog, graduated, adoptability methodology, audience landings.

0 em-dashes anywhere across 2600+ HTML files, durably enforced. 60 health endpoints. ~106 cron entries. Director ticking.

Remaining work is exclusively Wes-side: Stripe + traffic push.
