← Both skills · wildhorn-static-ads · 2-make/first-batch.md
Step by step for a new brand, once BRAND-KIT.md is filled (and, for a brand with no research yet, once
1-understand/new-brand-worksheet.md is signed off). The product images, brand.json field by field and what is
Wildhorn-only are in BRAND-KIT.md. The full pipeline behind each step: 2-make/PIPELINE.md.
1-understand/ does the research and the reading: product sheet, mechanism map, competitor ads, avatar,
top-5 angles + headline bank, template intake + concept families, and one hand-off brief per template (1-understand/new-brand-worksheet.md §9).
Run it first, with its two sign-off gates (angles/avatar; first concept family of briefs). Don't duplicate it here.2-make/ turns briefs into specs, generates, QCs and builds the review pages; 3-improve/ runs the review loop and keeps the rulebook.why, dna, scene, inventory) using
1-understand/template-reading.md as the checklist.ssh vps-claude
mkdir -p /root/workspace/<brand>-remix/{batch/templates,batch/prompts,out,feedback,pages}
cd /root/workspace/<brand>-remix
cp /root/claude-vault/skills/static-ads/brand.json brand.json
export SAC_WORKDIR=$PWD SKILL=/root/claude-vault/skills/static-ads
Everything a batch produces stays in this folder; never write into another brand's workspace or into /srv directly.
Rewrite the shared strings at the top of the first spec file (2-make/spec-format.md): OLD (avatar look), the ingredient constant (ORGANS for
Wildhorn), the capsule constant, HORN (icon-only sentence), STD (generic KEEP lines). These carry the latest wording of C2/A11/D8 into every ad.
1-understand/new-brand-worksheet.md §8) provides the winning templates. Accept every template (R1); sort into concept families (R2).$SAC_BATCH/templates/, named so that sorted order = ad order (MM-DD_cNNNN_Source.ext). The extension must be the real format (D10).python3 $SKILL/scripts/brief2spec.py $SAC_BATCH/s1specs.py <kit>/briefs/*.json (or write specs by hand).visual rewritten as one scene, fallback recipe for sexual/skin ads.python3 $SKILL/scripts/lint.py $SAC_BATCH/s1specs.py → LINT OK.for n in $(seq 1 10); do python3 $SKILL/scripts/srun.py $SAC_BATCH/s1specs.py $n; done (or xargs -P 5).python3 $SKILL/scripts/build_sam.py → wire $SAC_PAGES to a <brand>-review.machineroom.app handle once → send the link.seedream_comp for those templates at spec time.1-understand/ sign-off gate 1 passed (angles + avatar) and gate 2 for the first concept family of briefs.BRAND-KIT.md and brand.json filled (no [MISSING] left); python3 -c "import json;json.load(open('brand.json'))" OK; lint.py runs without a JSON error.product_photo opens, label readable at full resolution; product_cutout has a clean alpha edge (render one composite on white and on black to check halos).product_lock names every visible packaging element; lock_extra carries the icon-only sentence; icon_description matches the real icon.prices_allowed, offer, proof match the live offer exactly (reconfirm the price with the founder — Wildhorn's was locked at $49.95 only after asking).banned includes competitor names, jargon, compliance bans; angle_keyword set for the default angle; visual_checks cover the ingredient look.STD).batch/templates/, sorted order = ad order, real extensions; aspect ratio and production method noted per template.SAC_PAGES served on its own *.machineroom.app handle (noindex, clean URLs) — or the founder knows where to look.calls.jsonl, validated.json, sell_override.json start empty for the batch; rounds.json only if needed.