Developer Prompt: SAM AI Funnels - Phase 5 (Remaining Snippets)
Developer Prompt: SAM AI Funnels - Phase 5 (Remaining Snippets)
Date: 2025-12-31
Phase: 5 of 7
Scope: Complete remaining 31 snippets to reach full 46-snippet library
Prerequisite: Phase 4 complete
CONTEXT
Phases 1-4 created the foundation, 15 core snippets, form integration, and funnel templates. Now we complete the full snippet library by adding the remaining 31 snippets.
GOAL
Add all remaining snippets to complete the 46-snippet library as defined in the requirements.
REMAINING SNIPPETS (31 Total)
Hero Sections (1 remaining)
| Snippet | Description |
|---|---|
hero_video |
Video hero with background video, overlay text, CTA |
Problem & Story (2 remaining)
| Snippet | Description |
|---|---|
story_bridge |
Founder/origin story section |
before_after |
Two-column before/after comparison |
Solution & Benefits (3 remaining)
| Snippet | Description |
|---|---|
solution_reveal |
Introduce the solution/offer |
features_grid |
Feature cards in grid layout |
how_it_works |
Numbered step-by-step process |
Social Proof (5 remaining)
| Snippet | Description |
|---|---|
testimonial_grid |
Multiple testimonials in grid |
testimonial_video |
Video testimonial with name/context |
trust_badges |
Logo grid for certifications/partners |
case_study_preview |
Mini case study card |
stats_bar |
Impressive numbers bar |
Offers & Pricing (2 remaining)
| Snippet | Description |
|---|---|
bonus_stack |
Additional bonuses section |
pricing_table |
Multi-tier pricing comparison |
CTAs & Forms (2 remaining)
| Snippet | Description |
|---|---|
cta_button_block |
Standalone large CTA button |
ps_section |
P.S. urgency section |
Quiz Elements (5 - all new)
| Snippet | Description |
|---|---|
quiz_intro |
Quiz hook + start button |
quiz_question |
Single question with answer options |
quiz_progress |
Progress bar/step indicator |
quiz_gate |
Email capture before results |
quiz_results |
Personalized outcome display |
Urgency & Trust (2 remaining)
| Snippet | Description |
|---|---|
urgency_bar |
Scarcity message banner |
risk_reversal |
Address "what if" objections |
Utility (3 remaining)
| Snippet | Description |
|---|---|
divider_styled |
Styled visual separator |
image_text_split |
Side-by-side image + text |
bullet_list |
Styled bullet list |
IMPLEMENTATION PATTERN
Follow the same pattern established in Phase 2:
1. XML Template (per snippet)
<!-- views/snippets/s_[snippet_name].xml -->
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="s_[snippet_name]" name="[Display Name]">
<section class="s_[snippet_name] py-5"
data-snippet="sam_ai_funnels.s_[snippet_name]"
data-name="[Display Name]">
<!-- HTML content -->
</section>
</template>
</odoo>
2. Register in options.xml
<t t-snippet="sam_ai_funnels.s_[snippet_name]"
string="[Display Name]"
group="funnels">
<keywords>[relevant, search, terms]</keywords>
</t>
3. Customize Options in options.xml
<div data-selector=".s_[snippet_name]">
<!-- we-input, we-select, we-colorpicker, etc. -->
</div>
4. SCSS File
/* static/src/snippets/s_[snippet_name]/000.scss */
.s_[snippet_name] {
/* styles */
}
5. JS File (if interactive)
/* static/src/snippets/s_[snippet_name]/000.js */
/** @odoo-module **/
import publicWidget from "@web/legacy/js/public/public_widget";
// Widget code
SNIPPET SPECIFICATIONS
hero_video
<section class="s_hero_video py-0 position-relative overflow-hidden"
data-snippet="sam_ai_funnels.s_hero_video"
data-name="Video Hero"
data-autoplay="true"
data-loop="true">
<video class="s_video_bg position-absolute w-100 h-100" style="object-fit: cover;" autoplay muted loop playsinline>
<source src="" type="video/mp4"/>
</video>
<div class="s_overlay position-absolute w-100 h-100" style="background: rgba(0,0,0,0.5);"></div>
<div class="container position-relative py-5">
<div class="row justify-content-center text-center text-white">
<div class="col-lg-8 py-5">
<h1 class="display-4 fw-bold mb-3">Your Video Hero Headline</h1>
<p class="lead mb-4">Compelling subheadline over background video</p>
<a href="#" class="btn btn-primary btn-lg">Get Started</a>
</div>
</div>
</div>
</section>
story_bridge
<section class="s_story_bridge py-5">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-4 mb-4 mb-lg-0">
<img src="/web/image/website.s_banner_default_image" class="img-fluid rounded" alt="Author"/>
</div>
<div class="col-lg-8">
<h2 class="h4 mb-3">My Story</h2>
<p class="lead">I used to be just like you...</p>
<p>Tell your origin story here. Connect emotionally with your audience.</p>
<p class="fst-italic">— Your Name, Founder</p>
</div>
</div>
</div>
</section>
before_after
<section class="s_before_after py-5">
<div class="container">
<h2 class="text-center mb-5">The Transformation</h2>
<div class="row">
<div class="col-md-6 mb-4 mb-md-0">
<div class="card border-danger h-100">
<div class="card-header bg-danger text-white">
<strong>Before</strong>
</div>
<div class="card-body">
<ul class="list-unstyled">
<li class="mb-2">❌ Pain point 1</li>
<li class="mb-2">❌ Pain point 2</li>
<li class="mb-2">❌ Pain point 3</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card border-success h-100">
<div class="card-header bg-success text-white">
<strong>After</strong>
</div>
<div class="card-body">
<ul class="list-unstyled">
<li class="mb-2">✅ Benefit 1</li>
<li class="mb-2">✅ Benefit 2</li>
<li class="mb-2">✅ Benefit 3</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
quiz_intro
<section class="s_quiz_intro py-5 text-center">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<h1 class="display-5 fw-bold mb-3">Discover Your [X] Type</h1>
<p class="lead mb-4">Take this quick 2-minute quiz to get personalized recommendations</p>
<p class="text-muted mb-4"><i class="fa fa-clock-o"></i> Takes about 2 minutes</p>
<button class="btn btn-primary btn-lg s_quiz_start">Start Quiz</button>
<p class="small text-muted mt-3">Join 50,000+ who've taken this quiz</p>
</div>
</div>
</div>
</section>
quiz_question
<section class="s_quiz_question py-5" data-question-id="1">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<h2 class="h3 mb-4 text-center">Question 1 of 5</h2>
<p class="lead text-center mb-4">What is your biggest challenge right now?</p>
<div class="s_answers d-grid gap-3">
<button class="btn btn-outline-primary btn-lg text-start s_answer" data-value="a">
Option A: I struggle with time management
</button>
<button class="btn btn-outline-primary btn-lg text-start s_answer" data-value="b">
Option B: I need more clients
</button>
<button class="btn btn-outline-primary btn-lg text-start s_answer" data-value="c">
Option C: I'm overwhelmed with choices
</button>
<button class="btn btn-outline-primary btn-lg text-start s_answer" data-value="d">
Option D: I lack clarity on my goals
</button>
</div>
</div>
</div>
</div>
</section>
quiz_progress
<section class="s_quiz_progress py-3">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="d-flex justify-content-between mb-2">
<span class="small text-muted">Progress</span>
<span class="small text-muted s_progress_text">Step 1 of 5</span>
</div>
<div class="progress" style="height: 8px;">
<div class="progress-bar s_progress_bar" style="width: 20%;"></div>
</div>
</div>
</div>
</div>
</section>
quiz_gate
<section class="s_quiz_gate py-5 text-center">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<h2 class="h3 mb-3">Your Results Are Ready!</h2>
<p class="text-muted mb-4">Enter your email to see your personalized results</p>
<form class="s_quiz_gate_form">
<input type="text" name="name" class="form-control form-control-lg mb-3" placeholder="Your Name"/>
<input type="email" name="email" class="form-control form-control-lg mb-3" placeholder="Your Email" required/>
<button type="submit" class="btn btn-primary btn-lg w-100">See My Results</button>
</form>
<p class="small text-muted mt-3">We respect your privacy. Unsubscribe anytime.</p>
</div>
</div>
</div>
</section>
quiz_results
<section class="s_quiz_results py-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<p class="text-muted mb-2">Based on your answers...</p>
<h1 class="display-5 fw-bold mb-4">You are a <span class="text-primary">[Result Type]</span></h1>
<div class="card mb-4">
<div class="card-body">
<p class="lead">What this means for you:</p>
<p>Personalized description based on quiz results...</p>
</div>
</div>
<h3 class="h5 mb-3">Your Personalized Recommendation:</h3>
<a href="#" class="btn btn-primary btn-lg">See Your Solution</a>
</div>
</div>
</div>
</section>
stats_bar
<section class="s_stats_bar py-4 bg-light">
<div class="container">
<div class="row text-center">
<div class="col-md-3 col-6 mb-3 mb-md-0">
<div class="display-5 fw-bold text-primary">500+</div>
<p class="text-muted mb-0">Happy Customers</p>
</div>
<div class="col-md-3 col-6 mb-3 mb-md-0">
<div class="display-5 fw-bold text-primary">99%</div>
<p class="text-muted mb-0">Satisfaction Rate</p>
</div>
<div class="col-md-3 col-6">
<div class="display-5 fw-bold text-primary">24/7</div>
<p class="text-muted mb-0">Support Available</p>
</div>
<div class="col-md-3 col-6">
<div class="display-5 fw-bold text-primary">10+</div>
<p class="text-muted mb-0">Years Experience</p>
</div>
</div>
</div>
</section>
pricing_table
<section class="s_pricing_table py-5">
<div class="container">
<h2 class="text-center mb-5">Choose Your Plan</h2>
<div class="row justify-content-center">
<div class="col-lg-4 col-md-6 mb-4">
<div class="card h-100">
<div class="card-header text-center py-3">
<h3 class="h5 mb-0">Basic</h3>
</div>
<div class="card-body text-center">
<div class="display-4 fw-bold mb-3">$29</div>
<p class="text-muted">/month</p>
<ul class="list-unstyled mb-4">
<li class="mb-2">✓ Feature 1</li>
<li class="mb-2">✓ Feature 2</li>
<li class="mb-2 text-muted">✗ Feature 3</li>
</ul>
<a href="#" class="btn btn-outline-primary w-100">Get Started</a>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 mb-4">
<div class="card h-100 border-primary">
<div class="card-header text-center py-3 bg-primary text-white">
<h3 class="h5 mb-0">Pro <span class="badge bg-warning">Popular</span></h3>
</div>
<div class="card-body text-center">
<div class="display-4 fw-bold mb-3">$79</div>
<p class="text-muted">/month</p>
<ul class="list-unstyled mb-4">
<li class="mb-2">✓ Feature 1</li>
<li class="mb-2">✓ Feature 2</li>
<li class="mb-2">✓ Feature 3</li>
</ul>
<a href="#" class="btn btn-primary w-100">Get Started</a>
</div>
</div>
</div>
</div>
</div>
</section>
(Similar patterns for remaining snippets - use requirements document for field specifications)
UPDATE MANIFEST
Add all new snippet files to __manifest__.py:
'data': [
# ... existing files ...
# New snippets
'views/snippets/s_hero_video.xml',
'views/snippets/s_story_bridge.xml',
'views/snippets/s_before_after.xml',
'views/snippets/s_solution_reveal.xml',
'views/snippets/s_features_grid.xml',
'views/snippets/s_how_it_works.xml',
'views/snippets/s_testimonial_grid.xml',
'views/snippets/s_testimonial_video.xml',
'views/snippets/s_trust_badges.xml',
'views/snippets/s_case_study_preview.xml',
'views/snippets/s_stats_bar.xml',
'views/snippets/s_bonus_stack.xml',
'views/snippets/s_pricing_table.xml',
'views/snippets/s_cta_button_block.xml',
'views/snippets/s_ps_section.xml',
'views/snippets/s_quiz_intro.xml',
'views/snippets/s_quiz_question.xml',
'views/snippets/s_quiz_progress.xml',
'views/snippets/s_quiz_gate.xml',
'views/snippets/s_quiz_results.xml',
'views/snippets/s_urgency_bar.xml',
'views/snippets/s_risk_reversal.xml',
'views/snippets/s_divider_styled.xml',
'views/snippets/s_image_text_split.xml',
'views/snippets/s_bullet_list.xml',
],
'assets': {
'web.assets_frontend': [
# ... existing assets ...
# New SCSS
'sam_ai_funnels/static/src/snippets/s_hero_video/000.scss',
'sam_ai_funnels/static/src/snippets/s_story_bridge/000.scss',
# ... all new snippet SCSS files ...
# Quiz JS (interactive)
'sam_ai_funnels/static/src/snippets/s_quiz_intro/000.js',
'sam_ai_funnels/static/src/snippets/s_quiz_question/000.js',
'sam_ai_funnels/static/src/snippets/s_quiz_gate/000.js',
],
},
VALIDATION CHECKLIST
- [ ] All 31 new snippets appear in FUNNELS tab
- [ ] Snippets draggable to page
- [ ] Customize options work for each
- [ ] Quiz snippets have JS interaction
- [ ] Responsive on mobile
- [ ] Total snippet count = 46
FILES TO CREATE
XML (25 files):
1-25. views/snippets/s_[snippet_name].xml for each remaining snippet
SCSS (25 files):
26-50. static/src/snippets/s_[snippet_name]/000.scss
JS (4 files - quiz interactive):
51. static/src/snippets/s_quiz_intro/000.js
52. static/src/snippets/s_quiz_question/000.js
53. static/src/snippets/s_quiz_progress/000.js
54. static/src/snippets/s_quiz_gate/000.js
Update:
55. views/snippets/options.xml (register all + customize options)
56. __manifest__.py
END OF PHASE 5 DEVELOPER PROMPT