Date: 2026-05-09 (continued autonomous /loop)
ubuntu@40.160.2.121| File | Purpose | Cron |
|---|---|---|
regen-pricing-page.py | /factory/pricing/ - single explainer for all 4 tiers, comparison table, pricing FAQ, refund policy. | 40 hourly |
regen-captures-admin.py | /factory/admin/captures/ - noindex Wes-only dashboard. Latest 200 captures, copy-email buttons, per-product demand counts, status pills (contacted/sent/not-fit) saved in localStorage. | */5 |
migrate-dossiers-private.py | One-time + idempotent. Moves full.md from public to private dir. | 45 hourly (catches new dossiers) |
dossier-route.js + patch-api-add-dossier.py | Adds /api/dossier/<slug>?t=<token> and /api/mint-token (admin-key gated) routes to factory-api. HMAC-SHA256 token validation. Auto-generated 48-byte secret at /home/ubuntu/factory/director/.dossier-secret (chmod 600). | one-time patch |
mint-dossier-link.sh | CLI helper for Wes. ./mint-dossier-link.sh <slug> [days] outputs a copy-paste-ready email with the dossier link. | manual |
patch-dossier-gen-private.py | One-time. Patches dossier-gen.py to write full.md to private dir going forward; public dir gets a "this is gated" stub. | one-time |
<slug>?t=<token> - LIVE gated dossier endpoint. Without token: 403 access denied. With valid HMAC token: returns markdown (or HTML if &format=html)./factory/catalog/ or /factory//factory/unlock/<slug>//home/ubuntu/factory/inbox/intent-capture.jsonl/factory/admin/captures/, decides to send. Runs mint-dossier-link.sh <slug> to get a 365-day link. Copies the emit-ready email block. Sends from his Gmail./api/mint-token with admin key, mint the URL, and email it via SendGrid/Postmark/etc. Same mint-dossier-link.sh script keeps working as a manual override.The honest gap: Wes still has to manually email. The infrastructure to automate is in place; the email-send wiring is the last mile.
b64url(slug:expires) . b64url(hmac_sha256(secret, slug:expires)[0:16])/home/ubuntu/factory/dossiers-private/<slug>/full.md (chmod default; not in Caddy root)/srv/sites/factory/dossiers/<slug>/full.md is now a small markdown that says "this is gated, unlock at /factory/unlock/<slug>/"/srv/sites/factory/dossiers/<slug>/teaser.md unchangeddossier-gen.py was patched so going forward, both files get written to the right places automatically.
/api/mint-token and emits the email. Zero additional code needed in factory-api after that.| URL | Iter | Purpose |
|---|---|---|
/factory/catalog/ | 1 | Browse 170+ ideas, filter, sort, shortlist |
/factory/unlock/<slug>/ | 1 | $5 unlock + adopt CTA + email-capture |
/factory/operator-partnership/ | 1 | Done-with-you tier (Phase A/B/C) |
/factory/honest/ | 1 | What buyers should expect |
/factory/repair-queue/ | 1 | Admin: completeness audit |
/factory/outreach-launcher/ | 2 | Copy-paste outreach with status tracking |
/factory/compare/ | 2 | Side-by-side shortlist comparison |
/factory/fresh/ | 3 | Just-shipped tray |
/factory/builds/<slug>/faq/ | 3 | 170 FAQ pages |
/factory/pricing/ | 4 | Pricing explainer |
/factory/admin/captures/ | 4 | Wes-only intent dashboard |
/factory/api/dossier/<slug>?t=... | 4 | Gated dossier endpoint |
mint-dossier-link.sh + Gmail. Eventually: SendGrid or Postmark, triggered by Stripe webhook./factory/admin/feedback/. The factory's first real signal-loop closure./srv/sites/factory/pricing/index.html/srv/sites/factory/admin/captures/index.html/home/ubuntu/factory/dossiers-private/ (171 dirs with full.md)/home/ubuntu/factory/director/.dossier-secret (chmod 600)/home/ubuntu/factory/api/server.js (added handleDossier + handleMintToken; backup .bak.before-dossier)/home/ubuntu/factory/director/dossier-gen.py (writes private; backup .bak.before-private)/srv/sites/factory/dossiers/<slug>/full.md (now a "this is gated" stub)