Ship log · iter #3

Iteration 3 ship log

2026-05-09 · continued autonomous /loop

On this pageWhat shipped Repair queue jump (single-iteration impact) Palette audit findings What's now better for buyers What still needs work Next 5 recommended autonomous tasks Files changed inventory Cumulative iter1 + iter2 + iter3 inventory

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

What shipped

New scripts on ubuntu@40.160.2.121

FilePurposeCron
faq-template-gen.pyPer-product FAQ at /builds/<slug>/faq/index.html. 9-12 Q/A pairs from skeptic memo + brand brief + financials.key_risks. <details>-based accordion UI with per-product palette.33,3
regen-fresh-page.py/factory/fresh/ shows 12 most-recently-modified products plus a 30-row update tail. "Studio is shipping live" pulse.*/5
palette-audit.pyWalks every product, detects studio-default styling (Fraunces+Inter+forest+gold). Writes /srv/sites/factory/palette-audit.json worklist.*/15
repair-watchdog.shReads repair-queue.json; if avg completeness drops below 92%, triggers repair-pass.sh 15 automatically. Self-healing without Director loop touch.3,33
intent-capture-route.js + patch-api-add-intent.pyAdds /api/intent route to the live factory-api server (port 3060). POST {slug, tier, email, note} → JSONL at /home/ubuntu/factory/inbox/intent-capture.jsonl. Patcher backs up server.js, edits idempotently, runs systemctl restart factory-api.one-time

Live URLs

Unlock pages got real-form

Replaced "Coming soon" modal on every unlock page with an actual email-capture form. Submits to /factory/api/intent, saves to JSONL with timestamp, slug, tier (unlock/adopt), email, optional note, referrer URL, and IP. The form shows a success state in-place; localStorage records that this slug+tier was captured (so the user doesn't see the prompt again on subsequent visits).

This means right now, today, any buyer who clicks "Unlock dossier $5" on any product page can save their email and we have a real-time intent signal without Stripe being wired. As the captures accumulate, Wes can see which products have actual demand pull.

Repair queue jump (single-iteration impact)

MetricIter 2 endIter 3 end
Avg completeness91%96%
Fully complete26 / 17087 / 170
FAQ missing1060
Outreach missing00
Email drip missing00
Skeptic memo missing7979 (Director still owns)

The repair queue is now nearly closed. The remaining gap is skeptic memos, which the Director's existing loop generates as part of its O action.

Palette audit findings

Out of 170 products:

That's a much better picture than iteration 1's working assumption. The per-product brand-application sweep is mostly done; only 21 products need a refresh, and they're worklisted in /srv/sites/factory/palette-audit.json for the Director to consume.

What's now better for buyers

  1. The buyer-path completeness loop is closing. Every product has landing + pricing + FAQ + financial + email drip + outreach + risk memo + dossier teaser + adopt CTA. 87 of 170 are 13/13.
  2. Real intent capture replaces fake "coming soon" placeholder. Buyers can express interest right now; we get a real-time signal of which ideas have pull.
  3. "Just shipped" page keeps the catalog feeling alive. The studio shows daily output without the buyer having to dig.
  4. FAQs answer the right buyer questions (refund policy, what's actually in the dossier, what makes this different from a marketplace template, pricing tiers, what's NOT in the $5 unlock). All in the product's own brand voice via per-product palette.
  5. The repair-watchdog auto-triggers fixes when completeness drops, without touching the running Director loop. The buyer-path stays close to 95%+ over time.

What still needs work

  1. Stripe checkout creation + env wiring. Create $5 dossier and $99 adopt products in Stripe. Add FACTORY_STRIPE_UNLOCK_URL and FACTORY_STRIPE_ADOPT_URL to factory-api's environment, restart. Add a webhook receiver at /api/stripe-webhook that POSTs to a queue file and emails the dossier link.
  2. Dossier gating. HMAC-signed token URLs for full.md. Reject unsigned requests at the API or via Caddy directives.
  3. Claude-CLI hero copy sharpen on top 10 by Adoptability. Read brand brief, financials.fermi_summary, skeptic memo. Generate a sharpened hero h1 + lede that names the buyer in the first 8 words. Save .bak before write.
  4. Brand-application worker. Read palette-audit.json. For each "vanilla" product, regenerate its index.html using the per-product brand brief palette via the archetype template substitution.
  5. Outreach prospect generator (template-quality). Right now the template outreach packs say "fill in [SPECIFIC_DETAIL]." A generator could derive 10 placeholder-but-realistic ICP-shaped prospect rows from the brand brief alone (no real LinkedIn scraping), then mark "swap in real prospects from your network."

Files changed inventory

Cumulative iter1 + iter2 + iter3 inventory

← PreviousIter #2 Next →Iter #4