Date: 2026-05-09 (continued autonomous /loop)
ubuntu@40.160.2.121| File | Purpose | Cron |
|---|---|---|
hero-polish-cli.py | Calls Claude CLI on top N by Adoptability. Generates eyebrow + h1 + lede JSON to /home/ubuntu/factory/director/hero-polish/<slug>.json. Runs once manually then on-demand. | manual |
apply-polished-heroes.py | Reads JSON output, injects polished hero block above existing hero on each product page. Idempotent marker WD_HERO_POLISH_v1. | */5 |
regen-feedback-page.py | /factory/feedback/<slug>/ - per-product feedback form. Sentiment, 1-5 usefulness, free-text message, optional email. | 50 hourly |
feedback-route.js + patch-api-add-feedback-stripe.py | Adds /api/feedback (POST capture, GET admin-gated read) and /api/stripe-webhook (placeholder validating signatures when STRIPE_WEBHOOK_SECRET is set, logs unsigned for inspection). | one-time |
regen-sitemap-v2.py | Replacement sitemap that includes catalog, pricing, fresh, compare, outreach-launcher, operator-partnership, honest, plus per-product index, pricing, faq, case-studies, about, for, vs, security, plus unlock pages. | 55 hourly |
brand-applicator.py | Reads palette-audit.json. For each "vanilla" product (top N by Adoptability), injects per-product brand override CSS (palette + typography from brand brief). Idempotent marker WD_BRAND_OVERRIDE_v1. | every 4 hr |
<slug>/ - 172 feedback pages live. Submits to /api/feedback./home/ubuntu/factory/inbox/feedback.jsonl. GET requires admin key.stripe-webhook.jsonl. When STRIPE_WEBHOOK_SECRET env var is set, validates signatures and on checkout.session.completed mints dossier token + queues fulfillment record.| Product | Polished h1 |
|---|---|
| bookkeeper-ai | "Bookkeepers, end the close report crunch" |
| dispatch-ai | "Dispatch managers, send the right load first time" |
| nurture-ai | "Sales teams, stop chasing follow-ups in a Google Sheet" |
| roofing-ai | "Estimators, clear bid backlogs before they cost you deals" |
(6 more landing as Claude CLI completes the queue. Apply-polished-heroes cron picks them up every 5 min.)
| Slug | Accent | Fonts |
|---|---|---|
| webinar-ai | #4361ee | Space Grotesk + DM Sans |
| account-based-sales-ai | #6366f1 | Sora + Manrope |
| competitor-tracker | #f97316 | Space Grotesk + Inter |
| capacity-planner-ai | #d95f3b | Sora + DM Sans |
| helpdesk-ai | #3b6ef8 | Space Grotesk + Inter |
| procurement-ai | #2d6be4 | Sora + Inter |
| unit-economics-ai | #a8d92e | Space Grotesk + Inter |
| referral-ai | #c4f135 | Space Grotesk + DM Sans |
| afterhours | #a87a32 | Plus Jakarta Sans + Inter |
| api-monetization-ai | #6d28d9 | Space Grotesk + Inter |
11 vanilla products remain; the cron will re-run the applicator every 4 hours to pick up new brand briefs.
Regenerated with 723 URLs (up from ~150 in the older sitemap). Includes pricing, fresh, compare, outreach-launcher, operator-partnership, honest, all 172 product pages with their sub-pages, and 172 unlock pages. Excluded: admin/, api/, repair-queue/.
When Wes wires Stripe:
STRIPE_WEBHOOK_SECRET env var on factory-api serviceFACTORY_FROM_EMAIL env varmintAndSend block (TODO comment in code)https://wishdeal.com/factory/api/stripe-webhook as the webhook endpoint in Stripe dashboardThe receiver already:
t.payload)checkout.session.completedmintDossierToken()dossier-fulfillment.jsonlThe only thing missing is the email-send call. That's a 5-line addition once Wes picks SendGrid/Postmark.
/factory/, /factory/catalog/, /factory/fresh//factory/compare/ (shortlist via localStorage)intent-capture.jsonl → Wes runs mint-dossier-link.sh <slug> and emails URL/factory/api/dossier/<slug>?t=<token> (markdown or HTML)/factory/feedback/<slug>/ → JSONL at feedback.jsonl/factory/admin/captures/ to also show /api/feedback data. Per-product unified view: who captured intent, who left feedback, sentiment trend.hero-polish-cli.py 20 to push polish to top 20./factory/admin/inbox/ that shows: intent captures + feedback + Stripe webhook events + dossier-fulfillment events, all on one timeline. Becomes Wes's daily morning page./factory/admin/captures/ that opens mailto: with the email pre-filled and the dossier link pre-filled (mints token via JS calling /api/mint-token with admin-key)./srv/sites/factory/feedback/<slug>/index.html/home/ubuntu/factory/director/hero-polish/<slug>.json (4 so far, 10 expected)/home/ubuntu/factory/dossiers-private/... (already existed but auto-fulfillment ledger added)/home/ubuntu/factory/api/server.js (added 2 routes; backup .bak.before-feedback-stripe)/srv/sites/factory/sitemap.xml (723 URLs vs ~150)31 buyer-facing pages and admin tools live. 2 active intent captures + 2 feedback entries in production data. Repair queue at 96% complete, 87/172 fully complete. All 172 products have brand briefs, financials, FAQ, dossier teaser, dossier full (gated), pricing band, hero insight, outreach pack, email drip, feedback form.
Real buyer can today:
The buyer path is fully in place. The remaining work is Stripe + email automation + content quality lifts.