@growthub/cli 0.3.42 → 0.3.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/README.md +87 -220
  2. package/assets/shared-templates/ad-formats/INDEX.md +94 -0
  3. package/assets/shared-templates/ad-formats/bedroom-minimic-talk.md +197 -0
  4. package/assets/shared-templates/ad-formats/frame-analysis.md +209 -0
  5. package/assets/shared-templates/ad-formats/process-specialist-medical.md +105 -0
  6. package/assets/shared-templates/ad-formats/villain-animation.md +183 -0
  7. package/assets/shared-templates/manifest.json +23 -0
  8. package/assets/shared-templates/scene-modules/INDEX.md +151 -0
  9. package/assets/shared-templates/scene-modules/body/before-after-flatlay.md +143 -0
  10. package/assets/shared-templates/scene-modules/body/minimic-problem.md +109 -0
  11. package/assets/shared-templates/scene-modules/body/product-demo-glow.md +123 -0
  12. package/assets/shared-templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
  13. package/assets/shared-templates/scene-modules/body/villain-agitation.md +156 -0
  14. package/assets/shared-templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
  15. package/assets/shared-templates/scene-modules/cta/guarantee-close.md +143 -0
  16. package/assets/shared-templates/scene-modules/hooks/dollar-amount.md +105 -0
  17. package/assets/shared-templates/scene-modules/hooks/meme-overlay.md +104 -0
  18. package/assets/shared-templates/scene-modules/hooks/pov-confession.md +92 -0
  19. package/assets/shared-templates/scene-modules/hooks/tiktok-comment.md +116 -0
  20. package/assets/shared-templates/scene-modules/hooks/villain-hook.md +134 -0
  21. package/dist/index.js +2606 -600
  22. package/package.json +1 -1
  23. package/dist/index.js.map +0 -7
@@ -0,0 +1,123 @@
1
+ # Scene Module: Product Demo — Glow / Active Effect
2
+ > ID: `product-demo-glow`
3
+ > Type: body (Scene 4)
4
+ > Compatible Formats: `bedroom-minimic-talk`
5
+ > Timecode: 13–18s (in 23s format)
6
+ > Status: ✅ PROVEN — Solawave BOGO (Scene 4)
7
+
8
+ ---
9
+
10
+ ## WHAT IT DOES
11
+
12
+ Close-up of the product in active use — the mechanism is visible (red light, UV-C glow, steam, vibration). This is the scene where the product EARNS its claim. No words needed to explain what's happening — the visual does the work. Three micro-clips edited back-to-back at 1.5–2 second intervals: different use areas, same active state.
13
+
14
+ **Why it works:** For any product with a visible active state (light, motion, color, texture change), this scene is the single highest-converting moment in the ad. The viewer imagines it on their own skin/home. The "glow" is aspirational without being a claim — it's just the product working. Skin looks luminous because of the light, not because of a claim.
15
+
16
+ **Use this module when:** The product has a visually distinct active state. If the product has no visible effect (e.g. a cream), swap to a texture/application demo instead.
17
+
18
+ ---
19
+
20
+ ## VISUAL DIRECTION
21
+
22
+ ```
23
+ Format: 3 micro-clips in sequence, cut every 1.5–2 seconds.
24
+ Each clip: extreme close-up of product in use on a different area.
25
+
26
+ Clip 1: [USE_AREA_1] — e.g. under-eye, under-snout, near outlet
27
+ Clip 2: [USE_AREA_2] — e.g. cheekbone/jaw, flank area, second outlet
28
+ Clip 3: [USE_AREA_3] — e.g. forehead, neck, third outlet / wide establishing
29
+
30
+ Active state: [ACTIVE_STATE] warm and cinematic. Product's signature visual element.
31
+ Skin/surface: Dewy, healthy texture. No exaggeration — natural luminosity.
32
+ Camera: Extreme close-up. Product fills 40–60% of frame.
33
+ Lighting: Warm ambient. [ACTIVE_STATE] light adds practical illumination.
34
+ ```
35
+
36
+ **Active state guide by product type:**
37
+ - Red light therapy (Solawave): warm red/amber glow. Skin reflects it. Cinematic.
38
+ - UV-C (Clarifion ODRx): soft blue/violet glow. Device face visible.
39
+ - Microcurrent: subtle shimmer on skin. Focus on smoothing motion.
40
+ - Vibration/massage: motion blur suggestion. Muscle relaxation visual.
41
+ - Pheromone plug-in: soft warm light emanating from outlet. Cat/pet calming nearby.
42
+ - Serum/topical: texture close-up. Application swipe. Absorption into skin.
43
+
44
+ ---
45
+
46
+ ## ON-SCREEN TEXT
47
+
48
+ ```
49
+ Beat 1 (with Clip 1–2):
50
+ "[MECHANISM_SHORT]" — e.g. "microcurrent + red light"
51
+ White caption, key words bold.
52
+
53
+ Beat 2 (with Clip 3):
54
+ "[TIME_CLAIM]. That's it." — e.g. "5 minutes. That's it."
55
+ Bold, centered. White on slight dark scrim.
56
+ ```
57
+
58
+ ---
59
+
60
+ ## ACTOR DIALOGUE (VO over demo clips)
61
+
62
+ ```
63
+ Pattern: [mechanism in plain language] + [key benefit] + [time/ease anchor]
64
+
65
+ Full template:
66
+ "[MECHANISM_1] + [MECHANISM_2] — [BENEFIT]. You use it for [TIME]. Done."
67
+
68
+ Examples:
69
+ "Microcurrent + red light — exactly what I needed. 5 minutes. Done."
70
+ "UV-C light breaks down the odor molecules. You plug it in. Done."
71
+ "Pheromone tech — calms the territorial behavior at the source. Plug it in."
72
+
73
+ Delivery: Clean, direct, no fluff. She's describing the mechanism the way you'd text it.
74
+ Speed: slightly faster than Scenes 2–3 — this is the momentum scene.
75
+ ```
76
+
77
+ ---
78
+
79
+ ## TRANSITION OUT
80
+
81
+ ```
82
+ Cut to split-screen: bare/before skin LEFT — product in use RIGHT. (Scene 5: Before/After)
83
+ The word "done" or end of sentence is the verbal cut cue.
84
+ ```
85
+
86
+ ---
87
+
88
+ ## BRAND-KIT PLACEHOLDERS
89
+
90
+ | Placeholder | Source | Example |
91
+ |-------------|--------|---------|
92
+ | `[ACTIVE_STATE]` | Brief content | "red light glowing" / "UV-C on" |
93
+ | `[USE_AREA_1/2/3]` | Brief content | "under-eye / cheekbone / forehead" |
94
+ | `[MECHANISM_SHORT]` | `brand-kit.md → approved_phrases` | "microcurrent + red light" |
95
+ | `[BENEFIT]` | `brand-kit.md → core_message` | "reduces fine lines" / "calms marking behavior" |
96
+ | `[TIME_CLAIM]` | Brief content | "5 minutes" / "plug it in once" |
97
+
98
+ ---
99
+
100
+ ## JS STUB (sceneBlock row content)
101
+
102
+ ```js
103
+ // Drop into sceneBlock() rows array for Scene 4
104
+ ["Visual Direction", "3 micro-clips: [USE_AREA_1], [USE_AREA_2], [USE_AREA_3]. Cut every 1.5–2s. [ACTIVE_STATE] warm and cinematic throughout. Extreme close-up — product fills 40–60% of frame. Dewy, healthy skin/surface texture."],
105
+ ["Actor Line", "'[MECHANISM_SHORT] — [BENEFIT]. You use it for [TIME_CLAIM]. Done.'"],
106
+ ["On-Screen Text", "'[MECHANISM_SHORT]' → '[TIME_CLAIM]. That\\'s it.' — bold, centered."],
107
+ ["Purpose", "Show the product WORKING. [ACTIVE_STATE] is [BRAND]'s visual superpower. Make viewer want that effect on their own [skin/home/pet]."],
108
+ ["Transition", "Cut to split-screen: bare [skin/before] LEFT — [PRODUCT_NAME] in use RIGHT."],
109
+ ```
110
+
111
+ ---
112
+
113
+ ## AI GENERATION PROMPT STUB
114
+
115
+ ```
116
+ CLIP 1: Extreme close-up of [PRODUCT_NAME] gliding along [USE_AREA_1]. [ACTIVE_STATE] warm and cinematic. [SKIN/SURFACE] texture: dewy, healthy, natural. 9:16. 1.5 seconds.
117
+
118
+ CLIP 2: Same setup, [USE_AREA_2]. [ACTIVE_STATE] faces camera slightly. 9:16. 1.5 seconds.
119
+
120
+ CLIP 3: [USE_AREA_3] or slight pullback showing product in context. Creator's face partially in frame. [ACTIVE_STATE] illuminates the area naturally. 9:16. 2 seconds.
121
+
122
+ Edit: hard cuts between clips. No transitions. Creator's VO continues over all three.
123
+ ```
@@ -0,0 +1,119 @@
1
+ # Scene Module: TikTok Skeptic Pivot
2
+ > ID: `tiktok-skeptic-pivot`
3
+ > Type: body (Scene 3)
4
+ > Compatible Formats: `bedroom-minimic-talk`
5
+ > Timecode: 8–13s (in 23s format)
6
+ > Status: ✅ PROVEN — Solawave BOGO (Scene 3)
7
+
8
+ ---
9
+
10
+ ## WHAT IT DOES
11
+
12
+ A TikTok comment bubble ("Is this legit tho?") appears overlaid on screen. The creator reads it, recognizes it as her own former question, and uses it as the bridge to introduce the product. The comment externalises the viewer's skepticism — she answers it, not defensively, but as someone who did the research.
13
+
14
+ **Why it works:** This is the highest-leverage scene in the format. By the time Scene 3 starts, the viewer is curious but skeptical. The comment names their doubt in their own voice before they consciously form the objection. The creator's response ("I asked that too — here's what I found") converts resistance into open curiosity. Product introduced here lands 3× harder than if introduced in Scene 2.
15
+
16
+ ---
17
+
18
+ ## VISUAL DIRECTION
19
+
20
+ ```
21
+ Frame: Creator close-up. Same warm bedroom setting.
22
+ Comment: TikTok-style comment bubble overlaid — dark rounded rectangle, white text.
23
+ Username: @[generic relatable handle — e.g. @sarahtrying2024]
24
+ Comment text: "Is this legit tho?" or variation (see below)
25
+ Positioned: lower-center or left-of-center. Does NOT cover creator's face.
26
+ Beat: Creator glances DOWN at comment (0.5s) → slight smile / raised eyebrow (0.5s)
27
+ → looks UP at camera (1s) → lifts [PRODUCT_NAME] into frame ([ACTIVE_STATE] visible).
28
+ Duration: 4–5 seconds total.
29
+ ```
30
+
31
+ **Comment text variations:**
32
+ ```
33
+ "Is this legit tho?" ← default (proven)
34
+ "wait does this actually work"
35
+ "is this legit or just another [CAT] scam?"
36
+ "tried so many of these. do they actually work?"
37
+ "my derm said these don't do anything lol"
38
+ ```
39
+
40
+ ---
41
+
42
+ ## ON-SCREEN TEXT
43
+
44
+ ```
45
+ Step 1: TikTok comment bubble visible for 1.5–2 seconds.
46
+ Step 2: Comment fades. Creator's response caption appears:
47
+ "[RESPONSE_LINE]"
48
+ e.g. "that's literally what I asked."
49
+ e.g. "i went down the rabbit hole for you."
50
+
51
+ Step 3: Product mechanism caption:
52
+ "[MECHANISM]. at home."
53
+ e.g. "red light therapy. at home."
54
+ Key word ([MECHANISM]) bolded/highlighted.
55
+ ```
56
+
57
+ ---
58
+
59
+ ## ACTOR DIALOGUE
60
+
61
+ ```
62
+ Pattern: [validates the comment] + [earned credibility — she did the research] + [mechanism reveal]
63
+
64
+ Full template:
65
+ "That's literally what I said. So I looked it up.
66
+ [MECHANISM] — [WHAT_IT_DOES] — in [PRODUCT_FORM] you use at home."
67
+
68
+ Short template:
69
+ "Same question. I looked it up. [MECHANISM]. At home. For [PRICE_ANCHOR]."
70
+
71
+ Delivery: Slight amused recognition at the comment. Then direct, clear, confident.
72
+ She's answering a question she had herself — not defending a brand.
73
+ Speed: crisp but not rushed. ~30 words in 4–5 seconds.
74
+ ```
75
+
76
+ ---
77
+
78
+ ## TRANSITION OUT
79
+
80
+ ```
81
+ Immediate cut to product in active state ([ACTIVE_STATE] in motion) — Scene 4 Demo.
82
+ The word "home" or the mechanism name is the verbal cue to cut.
83
+ Do NOT linger. The momentum built here needs an immediate visual payoff.
84
+ ```
85
+
86
+ ---
87
+
88
+ ## BRAND-KIT PLACEHOLDERS
89
+
90
+ | Placeholder | Source | Example |
91
+ |-------------|--------|---------|
92
+ | `[MECHANISM]` | `brand-kit.md → approved_phrases` | "red light therapy" / "UV-C light" / "pheromone tech" |
93
+ | `[WHAT_IT_DOES]` | Brief content | "reduces fine lines" / "eliminates odor at the source" |
94
+ | `[PRODUCT_FORM]` | Brief content | "a wand" / "a plug-in device" / "a patch" |
95
+ | `[PRICE_ANCHOR]` | Brief / brand-kit | "under $200" / "$49" / "less than one derm visit" |
96
+ | `[ACTIVE_STATE]` | Brief content | "red light glowing" / "UV-C on" / "pheromone releasing" |
97
+ | `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave" |
98
+
99
+ ---
100
+
101
+ ## JS STUB (sceneBlock row content)
102
+
103
+ ```js
104
+ // Drop into sceneBlock() rows array for Scene 3
105
+ ["Visual Direction", "TikTok comment bubble overlaid: 'Is this legit tho?' — actor glances down, slight smile, looks up at camera. Lifts [PRODUCT_NAME] into frame — [ACTIVE_STATE] visible."],
106
+ ["Actor Line", "'That\\'s literally what I said. So I looked it up. [MECHANISM] — [WHAT_IT_DOES] — in [PRODUCT_FORM] you use at home.'"],
107
+ ["On-Screen Text", "Comment bubble: 'Is this legit tho?' → clears → response: 'that\\'s literally what I asked.' → '[MECHANISM]. at home.' (key word bolded)."],
108
+ ["Mirrors (muse)", "'Is this legit?' mirrors muse's 'if you even [care]' — both address viewer skepticism, breaking 4th wall.\n\n'[MECHANISM]. at home.' mirrors muse's 'is the only' — the revelation moment."],
109
+ ["Purpose", "Intercept #1 objection before it forms. [ACTIVE_STATE] = immediate visual proof product does something."],
110
+ ["Transition", "Cut to [PRODUCT_NAME] in use — [ACTIVE_STATE] in motion."],
111
+ ```
112
+
113
+ ---
114
+
115
+ ## AI GENERATION PROMPT STUB
116
+
117
+ ```
118
+ Photoreal female creator, [AI_ACTOR_AGE], natural look. Bedroom desk. Silver mini-mic visible. TikTok comment bubble overlaid: 'Is this legit tho?' (@[generic_username], dark rounded rectangle, white text). She glances DOWN at comment, raises eyebrow in recognition, looks UP at camera with slight knowing smile. Then lifts [PRODUCT_NAME] into frame — [ACTIVE_STATE] facing camera. Warm bedroom lighting. Handheld feel. 9:16. 5 seconds.
119
+ ```
@@ -0,0 +1,156 @@
1
+ # Scene Module: Villain Agitation Stack
2
+ > ID: `villain-agitation`
3
+ > Type: body (Scenes 2–5)
4
+ > Compatible Formats: `villain-animation`
5
+ > Timecode: ~12s per scene (in 98s format); stack 4× for full agitation arc
6
+ > Status: ✅ PROVEN — Clarifion ODRx brief (Scenes 2–5)
7
+
8
+ ---
9
+
10
+ ## WHAT IT DOES
11
+
12
+ Each agitation scene introduces a different failed solution as an animated villain character. The viewer has tried this product too — and it failed them. Four stacked scenes build frustration to a crescendo before the hero product arrives. Each scene must feature a DIFFERENT villain and a DIFFERENT angle on the failure (cost, effort, danger, futility).
13
+
14
+ **Why it works:** The agitation stack is the emotional engine of this format. One failed solution is forgivable. Four failed solutions, each with its own villain character, builds a case that the problem is systemic — not the viewer's fault. By Scene 5, the viewer is primed to accept anything that actually works. The villain character format externalises the blame onto the product, not the person.
15
+
16
+ **Critical rule:** Stack exactly 4 agitation scenes (Scenes 2–5). Never fewer. The emotional build requires the full stack to work.
17
+
18
+ ---
19
+
20
+ ## SCENE STRUCTURE (one agitation = one villain)
21
+
22
+ ```
23
+ Per-scene structure:
24
+ Setting: Same problem environment as Scene 1, slightly different angle/focus.
25
+ Villain: Different villain character than previous scene.
26
+ Focus: A different dimension of failure: COST / EFFORT / RISK / FUTILITY.
27
+ Text: Karaoke word-by-word, 1–4 words per beat.
28
+ VO: Direct address — "You've tried X. And Y. Because Z. But [problem] is still there."
29
+ End beat: Villain triumphant OR problem persisting — reinforces futility.
30
+ ```
31
+
32
+ **4-Agitation Arc (proven order):**
33
+ | # | Villain Type | Failure Dimension | Karaoke Focus |
34
+ |---|---|---|---|
35
+ | Agitation 1 | Most common solution in category | COST ("You've spent $X") | Dollar amount wasted |
36
+ | Agitation 2 | Secondary common solution | EFFORT ("You've tried everything in X") | Number of attempts |
37
+ | Agitation 3 | Natural/DIY alternatives | FUTILITY ("Natural options that still failed") | Still happening |
38
+ | Agitation 4 | Most extreme/medical solution | RISK ("Even the risky option didn't help") | Side effects / extremity |
39
+
40
+ ---
41
+
42
+ ## VISUAL DIRECTION (per agitation scene)
43
+
44
+ ```
45
+ Villain: New character — different product category from previous scenes.
46
+ Same animation style: expressive face, small arms, frustrated/smug emotion.
47
+ Specific to the failed product: litter bag, pill bottle, spray can, serum tube, etc.
48
+
49
+ Setting: Same core environment. Small variation in angle or focus area.
50
+ Lighting: still dark/cool/chaotic — no warmth enters until Scene 6.
51
+
52
+ Animals/characters: Present in every scene. Still unhappy/frustrated.
53
+ Emotional state mirrors the ongoing problem, not resolution.
54
+
55
+ Beat: Scene ends with villain still "winning" — problem unresolved.
56
+ This is CRITICAL — do not let agitation scenes accidentally imply progress.
57
+ ```
58
+
59
+ ---
60
+
61
+ ## ON-SCREEN TEXT (karaoke)
62
+
63
+ ```
64
+ Format: 1–4 words per beat, 0.5–1 second each. Key word in [BRAND_ACCENT_COLOR].
65
+
66
+ Agitation 1 — COST:
67
+ "YOU'VE SPENT" → "$[AMOUNT]" → "IN EVERY" → "[ROOM/AREA]"
68
+ "RIGHT NEXT TO" → "[ANIMAL/PERSON]" → "YOU ARE JUST" → "[FAILURE_OUTCOME]"
69
+
70
+ Agitation 2 — EFFORT:
71
+ "YOU'VE TRIED" → "[PRODUCT_CATEGORY]" → "AND YOUR [ANIMAL/PERSON]" → "[PROBLEM_PERSISTS]"
72
+ "[SPECIFIC_PROBLEM]" → "SYSTEM" → "[STILL]" → "HAPPENING"
73
+
74
+ Agitation 3 — FUTILITY (natural/DIY):
75
+ "YOU'VE TRIED" → "[NATURAL_SOLUTION_1]" → "AND [SOLUTION_2]" → "AND [SOLUTION_3]"
76
+ "PROBLEM IS" → "[STILL]" → "EXACTLY WHERE" → "[THEY/IT] [LEFT/IS]"
77
+
78
+ Agitation 4 — RISK/EXTREME:
79
+ "[EXTREME_OPTION]" → "SURE [SIDE_EFFECT]" → "WON'T [POSITIVE_THING]" → "WON'T [ANOTHER_POSITIVE]"
80
+ "YOU GOT" → "[NEGATIVE_OUTCOME]" → "YOU'RE [VERB]-ING" → "THEM"
81
+ ```
82
+
83
+ ---
84
+
85
+ ## ACTOR/VO DIALOGUE (per scene)
86
+
87
+ ```
88
+ Pattern: [acknowledges the solution tried] + [why it seemed reasonable] + [why it still failed]
89
+
90
+ Agitation 1 template:
91
+ "You've spent [AMOUNT] on [PRODUCT_CATEGORY]. Put [PRODUCT] in every [LOCATION].
92
+ Right next to [ANIMAL/PERSON]. You are just [FAILURE_OUTCOME]."
93
+
94
+ Agitation 2 template:
95
+ "You've tried [PRODUCT_TYPE_1]. And [PRODUCT_TYPE_2]. And [PRODUCT_TYPE_3].
96
+ [PROBLEM] is [still exactly where it was / happening every day]."
97
+
98
+ Agitation 3 template:
99
+ "You've tried [NATURAL_1] and [NATURAL_2] and [NATURAL_3].
100
+ The problem doesn't care. [VILLAIN] is still [LAUGHING / THERE / WINNING]."
101
+
102
+ Agitation 4 template:
103
+ "Sure — [EXTREME_OPTION] works. But [SIDE_EFFECT_1] and [SIDE_EFFECT_2].
104
+ [NEGATIVE_FRAMING]. You're [VERB]-ing [THEM/IT]."
105
+
106
+ Delivery: Tone escalates across the 4 scenes — empathetic (S2) → exasperated (S3) → incredulous (S4) → almost absurd (S5).
107
+ ```
108
+
109
+ ---
110
+
111
+ ## BRAND-KIT PLACEHOLDERS
112
+
113
+ | Placeholder | Source | Example (ODRx) |
114
+ |-------------|--------|----------------|
115
+ | `[VILLAIN_N_TYPE]` | Brief content | "animated litter bag" / "pill bottle" / "enzyme cleaner" |
116
+ | `[PRODUCT_CATEGORY]` | Brief content | "litter boxes" / "serums" / "supplements" |
117
+ | `[AMOUNT]` | Brief content | "$300" / "$500" |
118
+ | `[NATURAL_SOLUTION_N]` | Brief content | "vinegar" / "baking soda" / "enzyme spray" |
119
+ | `[EXTREME_OPTION]` | Brief content | "Floxetine" / "prescription topicals" / "laser" |
120
+ | `[BRAND_ACCENT_COLOR]` | `brand-kit.md → colors.secondary` | "2C7FF8" |
121
+
122
+ ---
123
+
124
+ ## ADAPTATION RULES
125
+
126
+ - **Agitation 1** always = the most common/expected solution (highest viewer recognition)
127
+ - **Agitation 4** always = the most extreme option (creates emotional peak before the flip)
128
+ - Never use real competitor brand names — use generic category labels
129
+ - Each villain must be visually distinct from all others — different shape, color, personality
130
+ - Dollar amounts should reflect real category spend — research before writing
131
+ - Never let any agitation scene accidentally solve the problem or imply partial improvement
132
+
133
+ ---
134
+
135
+ ## JS STUB (sceneBlock — replicate 4× with different values)
136
+
137
+ ```js
138
+ // Agitation 1
139
+ sceneBlock("SCENE 2 — AGITATION 1", "17–29s | Consistent across all variations", [
140
+ ["Visual Direction", "[VILLAIN_1_TYPE] character INSIDE / ON [FAILED_PRODUCT_1]. [ANIMAL/CHARACTER] still frustrated. Dark chaotic setting. Same environment as Scene 1."],
141
+ ["On-Screen Text", "Karaoke: 'YOU\\'VE SPENT' → '$[AMOUNT]' → '[FAILURE_CONTEXT]' — key word in [ACCENT_COLOR]."],
142
+ ["VO", "'You\\'ve spent [AMOUNT] on [PRODUCT_CATEGORY]. [FAILURE_DETAIL]. You are just [FAILURE_OUTCOME].'"],
143
+ ["Purpose", "Quantify the cost of the problem. Dollar amount makes the pain visceral. Villain inside the product = problem is IN the product, not the viewer."],
144
+ ])
145
+
146
+ // Replicate for Agitation 2, 3, 4 — change villain, product, failure dimension
147
+ ```
148
+
149
+ ---
150
+
151
+ ## AI GENERATION PROMPT STUB
152
+
153
+ ```
154
+ AGITATION [N]:
155
+ 3D animated [PROBLEM_ENVIRONMENT]. New villain: [VILLAIN_N_TYPE] with expressive cartoon face ([EMOTION]) and small arms. Positioned in/near [FAILED_PRODUCT_N]. [ANIMAL/CHARACTER] nearby, still unhappy. Dark cool chaotic lighting — identical to previous agitation scenes. Villain ends scene still triumphant / problem unresolved. Karaoke text overlaid. 9:16. 12 seconds.
156
+ ```
@@ -0,0 +1,144 @@
1
+ # Scene Module: BOGO + Meme Bookend Close
2
+ > ID: `bogo-meme-bookend`
3
+ > Type: cta (Scene 6 / final scene)
4
+ > Compatible Formats: `bedroom-minimic-talk`
5
+ > Timecode: 21–23s (in 23s format)
6
+ > Status: ✅ PROVEN — Solawave BOGO (Scene 6)
7
+
8
+ ---
9
+
10
+ ## WHAT IT DOES
11
+
12
+ The ad closes with two elements in rapid sequence: (1) the meme bookend — same character from Scene 1, now in an approving/satisfied state — and (2) a clean offer overlay with the BOGO/discount and landing page. The meme bookend is the emotional payoff: the journey from tired/frustrated to approved/satisfied, visualised in the same character.
13
+
14
+ **Why it works:** The meme bookend creates a narrative closure that feels earned, not manufactured. The viewer subconsciously tracks the character from Scene 1 (problem state) to Scene 6 (resolved state) — it's a micro-story arc in 2 seconds. The offer overlay follows immediately so the emotional high converts to action before the feeling fades. "link in bio" is the lowest-friction CTA on TikTok/Reels.
15
+
16
+ ---
17
+
18
+ ## VISUAL DIRECTION
19
+
20
+ ```
21
+ Opening (0.5–1s): Optional meme bookend
22
+ Same meme character from Scene 1, now in APPROVING / SATISFIED state.
23
+ e.g. D.W. Arthur meme — smiling version / "we did it" version
24
+ Overlaid on creator as in Scene 1 — creator's face visible above.
25
+ Duration: 0.5–1 second max. Blink-and-you-see-it.
26
+
27
+ Main CTA (1–1.5s): Creator on camera
28
+ Actor back on camera, energized. Mini-mic in one hand.
29
+ [PRODUCT_NAME] raised toward camera — [ACTIVE_STATE] facing lens.
30
+ Expression: warm, direct, genuine "you should do this" energy.
31
+ NOT a scripted-looking smile — real confidence.
32
+
33
+ Outro (0.5s): Offer graphic overlay
34
+ Clean graphic appears over or after creator:
35
+ Large: "[OFFER_TEXT]" — bold, brand primary or white on dark
36
+ Medium: "[LANDING_PAGE]"
37
+ Small: "Shop Now →" or "Link in bio →"
38
+ Optional strip: "Limited time | Results may vary"
39
+ ```
40
+
41
+ ---
42
+
43
+ ## ON-SCREEN TEXT
44
+
45
+ ```
46
+ OFFER_TEXT options (bold, large, centered):
47
+ "BUY 1 GET 1 FREE"
48
+ "[X]% OFF — TODAY ONLY"
49
+ "FREE [GIFT/TRIAL] WITH ORDER"
50
+ "LIMITED TIME OFFER"
51
+
52
+ LANDING_PAGE:
53
+ "[BRAND_SLUG].co" or full URL — white, smaller than offer text.
54
+
55
+ CTA BUTTON TEXT:
56
+ "Shop Now →"
57
+ "Link in bio →"
58
+ "Grab yours →"
59
+
60
+ COMPLIANCE STRIP (bottom, very small):
61
+ "Limited time offer | Results may vary"
62
+ Only include if making outcome claims elsewhere in the ad.
63
+ ```
64
+
65
+ ---
66
+
67
+ ## ACTOR DIALOGUE
68
+
69
+ ```
70
+ Pattern: [offer text spoken directly] + [lowest-friction action]
71
+
72
+ Templates:
73
+ "[OFFER_TEXT] right now — link in bio."
74
+ "It's [OFFER_TEXT] right now. Link in bio, go."
75
+ "[OFFER_TEXT] at [LANDING_PAGE] — I'll link it."
76
+ "[OFFER_TEXT]. Link below."
77
+
78
+ Delivery: Direct, energetic, brief. Max 8 words. No explanation of the offer.
79
+ The viewer already knows what Solawave is — just close.
80
+ The meme bookend (if used) covers the one second before this line.
81
+ ```
82
+
83
+ ---
84
+
85
+ ## OFFER TYPES THIS MODULE SUPPORTS
86
+
87
+ | Offer | CTA Text | Urgency Signal |
88
+ |-------|----------|----------------|
89
+ | Buy 1 Get 1 Free | "BUY 1 GET 1 FREE" | Default urgency inherent |
90
+ | % Discount | "[X]% OFF — TODAY ONLY" | "TODAY ONLY" adds scarcity |
91
+ | Free gift with order | "FREE [GIFT] WITH YOUR ORDER" | Limited supply implied |
92
+ | Bundle deal | "[BUNDLE NAME] — [PRICE]" | Value framing |
93
+ | Free trial | "TRY FREE — LINK IN BIO" | Risk-free conversion |
94
+
95
+ ---
96
+
97
+ ## MEME BOOKEND SELECTION
98
+
99
+ ```
100
+ Rule: Same meme character as Scene 1, emotional state FLIPPED.
101
+ Problem state in Scene 1 → Resolved/approving state in Scene 6.
102
+
103
+ Pairings:
104
+ Scene 1: D.W. (tired, dark circles) → Scene 6: D.W. (smiling, "old rebecca approves")
105
+ Scene 1: Crying meme → Scene 6: Same character happy/relieved
106
+ Scene 1: "this is fine" dog → Scene 6: Dog in better situation / unbothered
107
+ Scene 1: Sad Keanu → Scene 6: Content Keanu (rare but works)
108
+ Scene 1: "me after $300 on serums" → Scene 6: "me after [PRODUCT_NAME]" same format
109
+
110
+ If no meme was used in Scene 1: skip the bookend. Use creator-only CTA.
111
+ ```
112
+
113
+ ---
114
+
115
+ ## BRAND-KIT PLACEHOLDERS
116
+
117
+ | Placeholder | Source | Example |
118
+ |-------------|--------|---------|
119
+ | `[OFFER_TEXT]` | `brand-kit.md → cta_offer` | "BUY 1 GET 1 FREE" |
120
+ | `[LANDING_PAGE]` | `brand-kit.md → landing_page` | "solawave.co" |
121
+ | `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave wand" |
122
+ | `[ACTIVE_STATE]` | Brief content | "red light glowing" |
123
+ | `[MEME_CHARACTER_RESOLVED]` | Matches Scene 1 meme | "D.W. from Arthur — smiling version" |
124
+
125
+ ---
126
+
127
+ ## JS STUB (sceneBlock row content)
128
+
129
+ ```js
130
+ // Drop into sceneBlock() rows array for Scene 6
131
+ ["Visual Direction", "Optional: [MEME_CHARACTER_RESOLVED] bookend overlaid 0.5–1s (same character as Scene 1, approving state).\n\nActor: mini-mic in hand, [PRODUCT_NAME] raised toward camera ([ACTIVE_STATE]). Warm energized expression.\n\nOutro graphic: '[OFFER_TEXT]' bold + '[LANDING_PAGE]' + 'Shop Now →'. Optional strip: 'Limited time | Results may vary'."],
132
+ ["Actor Line", "'[OFFER_TEXT] right now — link in bio.'"],
133
+ ["On-Screen Text", "'[OFFER_TEXT]' — large bold\n'[LANDING_PAGE]'\n'Shop Now →'\n(Optional: 'Limited time | Results may vary')"],
134
+ ["Mirrors (muse)", "Meme bookend close mirrors muse's 'old rebecca approves' exit. Humor register stays through CTA — doesn't feel like an ad break.\n\nActor holding product up = muse holding products throughout."],
135
+ ["Purpose", "Drive the one action: click the link. [OFFER] is the urgency mechanism. 2 seconds max — viewer already knows. Just close."],
136
+ ```
137
+
138
+ ---
139
+
140
+ ## AI GENERATION PROMPT STUB
141
+
142
+ ```
143
+ Photoreal female creator, [AI_ACTOR_AGE], energized expression. Bedroom setting with slightly brighter warm light than previous scenes. Mini-mic in one hand, [PRODUCT_NAME] raised toward camera in other hand ([ACTIVE_STATE] facing lens). Warm, direct smile — genuine not performative. Optional opening 0.5s: [MEME_CHARACTER_RESOLVED] overlay (approving/satisfied version of Scene 1 meme). Transitions to clean offer graphic overlay: '[OFFER_TEXT]' bold + '[LANDING_PAGE]' + 'Shop Now →'. 9:16. 2 seconds.
144
+ ```