This skill should be used when the user asks to "generate ad concepts", "make ads for [product]", "create ad prompts", "ad concepts from funnel", or provides a funnel/landing page and wants ready-to-paste image generation prompts with copy.
Generate end-to-end ad concepts from a funnel or landing page. Output: ready-to-paste image generation prompts in an HTML file with copy buttons.
CRITICAL CONCEPT: Each reference image IS a template. The swipe file contains specific ads with specific layouts — circular insets, POV angles, masthead positions, text card placements. You are not writing "native advertorial style" prompts. You are modeling the EXACT structure of each reference image, then swapping in the client's copy and product.
references/copy-methodology.md completely — contains critical nuance on why copy failsCRITICAL: Do not write ANY copy until references/copy-methodology.md has been read. The copy methodology contains the full nuanced back-and-forth on what makes copy fail vs succeed — summaries are not sufficient.
Read the funnel/landing page HTML or URL provided.
Before generating any prompts, locate or request product reference images:
Search for existing product images in the client folder:
*product*.{png,jpg,jpeg,webp}*reference*.{png,jpg,jpeg,webp}assets/ or images/ subdirectoriesIf no product images found, ask the user:
"I need 1-3 product reference images (clean shots on white/transparent background work best). These will be composited into ads that show the product. Where can I find them, or can you provide them?"
Save product image paths for use in Step 4. Store as:
product_references:
- path: /path/to/product-front.png
description: "front view, white background"
- path: /path/to/product-angle.png
description: "3/4 angle, lifestyle context"
Why this matters: Without reference images, the image generator invents a generic product. With reference images, it composites the ACTUAL product into the scene.
Search for *consumer-mapping*.md or *hell-heaven*.md in the client folder.
If exists: Load it, proceed to Step 3.
If missing: Create it using the question sequence in references/consumer-mapping-questions.md. Save to [client-folder]/[product]-consumer-mapping.md for reuse.
Consumer mapping is critical for transformation products (supplements, courses, services) where the ad copy needs to speak to pain points and outcomes.
You can skip consumer mapping for:
How to decide: Ask "Does the consumer need to be convinced this solves a problem, or do they just need to see it and want it?"
When skipping, still extract:
Document this lightweight context in 3-5 bullets rather than full Hell/Heaven mapping.
CRITICAL: You are selecting SPECIFIC IMAGES to model, not format categories.
swipe-file/ad-formats.json (relative to this skill folder)id and filename) that fit this consumerWrong approach: "I'll use 3 native-advertorial formats" → writes generic native ad concepts Right approach: "I'll model bqhj.jpeg, bqjq.jpeg, bqsv.jpeg" → reads each schema, adapts exact layout
Selection criteria:
format_type values for diversityvibe.would_work_forprimary_mechanic (social proof, authority, transformation)Before using any schema ID, verify it exists:
# Check if a specific ID exists
cat swipe-file/ad-formats.json | jq '.[] | select(.id == "002") | .id'
# Should output: "002" — if empty, that ID doesn't exist
# List all valid IDs
cat swipe-file/ad-formats.json | jq -r '.[].id' | sort
If a schema ID doesn't exist:
jq '.[] | select(.format_type == "ugc-honest-review")'Common mistake: Assuming IDs are sequential (001, 002, 003...). They're not — always verify.
STOP. Before writing any copy, confirm references/copy-methodology.md has been read this session.
When generating more than 5 prompts, use parallel subagents. Proven pattern: 10 agents × 3 prompts = 30 total.
# For 30 prompts, split 30 schema IDs into 10 groups of 3
cd /path/to/concept-engine
cat swipe-file/ad-formats.json | jq '[.[] | select(.id == "002" or .id == "007" or .id == "008")]' > /tmp/agent1-schemas.json
cat swipe-file/ad-formats.json | jq '[.[] | select(.id == "016" or .id == "023" or .id == "032")]' > /tmp/agent2-schemas.json
# ... repeat for all 10 groups
Each agent gets:
/tmp/agent1-schemas.json)Generate 3 ad prompts for [PRODUCT NAME].
**READ THESE FILES FIRST:**
1. /path/to/consumer-mapping.md — Hell/Heaven Island copy
2. /tmp/agentN-schemas.json — Your 3 schemas to model
**PRODUCT:**
[Brief product description]
**OUTPUT FORMAT — CRITICAL:**
Output each prompt as STRUCTURED JSON with nested objects.
NOT flat text descriptions. NOT paragraphs.
Example structure:
{
"reference_ad_id": "002",
"format_type": "ugc-honest-review",
"composition": { "layout": "...", "visual_hierarchy": "..." },
"subject": { "description": "...", "face": { ... } },
"product": { "type": "...", "position": { ... } },
"text_overlay": { "content": "...", "style": { ... } },
"color_story": { "primary": "...", "accent": "..." },
"constraints": { "must_keep": [...], "avoid": [...] },
"negative_prompt": [...]
}
For EACH schema:
1. Read its full structure
2. Preserve exact layout/composition
3. Swap in product + consumer copy
4. Output as JSON
Common subagent failure: Producing text like "Bird's eye flatlay showing..." instead of JSON. Prevent by showing the JSON example and saying "NOT text descriptions."
CRITICAL: Do not compile HTML until all outputs are validated.
After subagents complete, verify each output:
# For each agent output, test if it's valid JSON
cat /tmp/agent1-output.json | jq '.' > /dev/null 2>&1 && echo "✓ Valid" || echo "✗ Invalid JSON"
Validation checklist (run for each output):
jq '.' must succeed without errorsreference_ad_id, format_type, composition, constraintsIf validation fails:
Quick validation script:
for f in /tmp/agent*-output.json; do
echo -n "$f: "
if jq -e '.[0].reference_ad_id' "$f" > /dev/null 2>&1; then
echo "✓ Valid (has reference_ad_id)"
else
echo "✗ INVALID — check output format"
fi
done
ENFORCEMENT GATE: For EACH prompt, you MUST:
One reference image = one prompt. Do not write "variations" that deviate from the reference structure. If you want 3 prompts, select 3 different reference images.
What you're adapting:
What you're preserving:
Full methodology with examples in references/copy-methodology.md. Quick reference:
| Requirement | Bad Example | Good Example |
|---|---|---|
| Name problem explicitly | "what he struggles with" | "finishing in under 2 minutes" |
| Specific transformation | "she notices" | "lasted so long I asked if he took something" |
| Include mechanism | (none) | "trains the muscle that controls it" |
| No assumptions | mid-conversation copy | standalone, works for first-time viewer |
| Sound real | "crying writing this" | "I'm still in shock" |
Two approaches depending on product type:
1. Wearables (shirts, jewelry, hats) — No special handling. Describe in product object:
"product": {
"type": "Grunt Style Size Matters black crew neck t-shirt",
"details": { "color": "black", "graphic": "SIZE MATTERS text with bullet caliber comparison (.50 CAL to .22 LR)" }
}
2. Compositing products (bottles, devices, boxes) — Use product_visibility + inline product_instruction.
Set prominence:
"product_visibility": "none" | "background" | "prominent" | "hero"
Embed instruction where the product appears:
"circular_inset_images": {
"image_1": {
"subject": "doctor demonstrating FlexPro device",
"product_instruction": "USE ATTACHED PRODUCT IMAGE - show actual device in doctor's hands",
"action": "holding device, displaying it to camera"
}
}
Or for product-in-use:
"product_in_use": {
"item": "FlexPro device",
"product_instruction": "USE ATTACHED PRODUCT IMAGE - device held naturally as if mid-session",
"positioning": "center of POV frame, held in right hand"
}
Why this works: Natural language is clearer for image generators than technical fields. Battle-tested with good results.
"layout_constraints": "all elements must fit fully within frame with no cutoff or truncation, leave 20px padding from all edges"
Negative prompt must include: "elements cut off, text truncated, text extending beyond frame edges"
Match swipe-file/schema-examples-gold-standard.md:
Create [client-folder]/ad-concepts-[date]/concepts.html
Before writing any HTML, run these checks:
# 1. Verify image folder exists and get sample filename
ls /.claude/skills/concept-engine/swipe-file/images/ | head -3
# 2. Confirm path format
# CORRECT: /.claude/skills/concept-engine/swipe-file/images/SCR-20260313-bhwx.jpeg
# WRONG: /reference-images/, ../../../, relative paths
Copy the structure from references/output-template-example.html exactly. This template contains:
execCommand method that works everywhere)What to copy from template:
<style> block<script> block (DO NOT MODIFY — this is the working copy function)What to replace:
[Product Name] → actual product name[Date] → generation date| Rule | Why |
|---|---|
Image paths start with / | Root-relative paths work in file browser |
Use /.claude/skills/concept-engine/swipe-file/images/ | This is the actual folder location |
JSON goes directly in <div class="prompt-text"> | No HTML escaping — raw JSON |
Copy exact <script> block from template | Uses execCommand + textarea fallback that works everywhere |
| Each prompt-text div has unique ID | prompt-1, prompt-2, etc. for copy function |
| Mistake | Fix |
|---|---|
Using navigator.clipboard API | Use execCommand('copy') with textarea |
HTML-escaping JSON (") | Write raw JSON, no escaping |
Wrong image folder (/reference-images/) | Verify with ls first |
Relative paths (../../../) | Always root-relative starting with / |
| Writing HTML from memory | Copy from references/output-template-example.html |
Provide file browser URL: http://100.109.172.85:8080/[path]
references/copy-methodology.md — Full copy requirements with examplesreferences/consumer-mapping-questions.md — 7-question sequence for Hell/Heaven Islandreferences/product-reference-images.md — How to handle product images for compositingreferences/html-template.md — HTML template for outputexamples/good-prompt.json — Example of properly structured prompt with product referencereferences/example-consumer-mapping.md in this skill folderswipe-file/schema-examples-gold-standard.mdswipe-file/ad-formats.jsonexamples/good-prompt.json in this skill folder