ALwrity AI Copywriter app, aidppc, oath, quest, star, fab, pas, app, acca, 4c, 4r, emotional
This commit is contained in:
226
lib/ai_writers/ai_copywriter/4c_copywriter.py
Normal file
226
lib/ai_writers/ai_copywriter/4c_copywriter.py
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 4C Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the 4C (Clear, Concise, Credible, Compelling) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about 4C copywriting
|
||||||
|
with st.expander("📚 What is 4C Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the 4C Copywriting Framework
|
||||||
|
|
||||||
|
The 4C framework is a powerful copywriting approach that ensures your message is effective and persuasive:
|
||||||
|
|
||||||
|
- **Clear**: Your message is easy to understand, with no ambiguity or confusion
|
||||||
|
- **Concise**: Your copy is brief and to the point, without unnecessary words
|
||||||
|
- **Credible**: Your claims are backed by evidence, testimonials, or authority
|
||||||
|
- **Compelling**: Your message is interesting and persuasive, motivating action
|
||||||
|
|
||||||
|
### Why 4C Copywriting Works
|
||||||
|
|
||||||
|
The 4C framework works because it:
|
||||||
|
|
||||||
|
- Improves readability and comprehension
|
||||||
|
- Respects the reader's time and attention
|
||||||
|
- Builds trust and credibility
|
||||||
|
- Increases the likelihood of conversion
|
||||||
|
- Creates a professional, polished impression
|
||||||
|
- Works across all marketing channels and platforms
|
||||||
|
|
||||||
|
### When to Use 4C Copywriting
|
||||||
|
|
||||||
|
The 4C framework is particularly effective for:
|
||||||
|
|
||||||
|
- Email marketing campaigns
|
||||||
|
- Landing pages and sales pages
|
||||||
|
- Social media posts and ads
|
||||||
|
- Product descriptions
|
||||||
|
- Service offerings
|
||||||
|
- Any marketing content where clarity and persuasion are essential
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your 4C Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity AI Writer",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Content marketers",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
campaign_description = st.text_input('**📝 Campaign Description** (In 3-4 words)',
|
||||||
|
placeholder="e.g., AI writing assistant",
|
||||||
|
help="Describe your campaign briefly.")
|
||||||
|
|
||||||
|
clear_message = st.text_area('**🔍 Clear Message**',
|
||||||
|
placeholder="e.g., Our AI writing assistant helps you create high-quality content in minutes",
|
||||||
|
help="What is the main message you want to convey? Make it easy to understand.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
brand_description = st.text_input('**📋 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing platform",
|
||||||
|
help="Describe what your company does briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., All-in-one AI copywriting platform",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
concise_content = st.text_area('**📏 Concise Content**',
|
||||||
|
placeholder="e.g., Create content 10x faster with our AI assistant",
|
||||||
|
help="How can you express your message in the fewest words possible?")
|
||||||
|
|
||||||
|
credible_elements = st.text_area('**✅ Credible Elements**',
|
||||||
|
placeholder="e.g., Trusted by 10,000+ businesses, 4.8/5 star rating, 30-day money-back guarantee",
|
||||||
|
help="What evidence, testimonials, or authority can you use to build credibility?")
|
||||||
|
|
||||||
|
compelling_hook = st.text_area('**🎣 Compelling Hook**',
|
||||||
|
placeholder="e.g., Stop struggling with writer's block. Our AI assistant helps you create engaging content in minutes.",
|
||||||
|
help="What will grab attention and motivate action?")
|
||||||
|
|
||||||
|
call_to_action = st.text_area('**🚀 Call to Action**',
|
||||||
|
placeholder="e.g., Start creating high-converting content today with our 14-day free trial...",
|
||||||
|
help="Prompt your audience to take action with a strong call to action.")
|
||||||
|
|
||||||
|
landing_page_url = st.text_input('**🌐 Landing Page URL** (Optional)',
|
||||||
|
placeholder="e.g., https://alwrity.com",
|
||||||
|
help="Provide a URL to include in your call to action.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
with col1:
|
||||||
|
platform = st.selectbox(
|
||||||
|
'**📱 Content Platform**',
|
||||||
|
options=['Social media copy', 'Email copy', 'Website copy', 'Ad copy', 'Product copy'],
|
||||||
|
help="Select the platform where your copy will be used."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
language = st.selectbox(
|
||||||
|
'**🌍 Language**',
|
||||||
|
options=['English', 'Hindustani', 'Chinese', 'Hindi', 'Spanish'],
|
||||||
|
help="Select the language for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate 4C Copy**', type="primary"):
|
||||||
|
if not brand_name or not brand_description or not campaign_description or not clear_message or not concise_content or not credible_elements or not compelling_hook:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Campaign Description, Clear Message, Concise Content, Credible Elements, and Compelling Hook)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling 4C copy..."):
|
||||||
|
four_cs_copy = generate_four_cs_copy(
|
||||||
|
brand_name,
|
||||||
|
brand_description,
|
||||||
|
campaign_description,
|
||||||
|
clear_message,
|
||||||
|
concise_content,
|
||||||
|
credible_elements,
|
||||||
|
compelling_hook,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
call_to_action,
|
||||||
|
landing_page_url,
|
||||||
|
platform,
|
||||||
|
language,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if four_cs_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your 4C Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(four_cs_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your 4C Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your 4C Copy Effectively
|
||||||
|
|
||||||
|
1. **Test for clarity**: Ask someone unfamiliar with your product to read your copy and explain what they understand
|
||||||
|
|
||||||
|
2. **Edit ruthlessly**: Review your copy to eliminate unnecessary words and phrases
|
||||||
|
|
||||||
|
3. **Add specific details**: Include concrete numbers, statistics, and examples to enhance credibility
|
||||||
|
|
||||||
|
4. **Create urgency**: Add time-sensitive elements to make your compelling hook even more effective
|
||||||
|
|
||||||
|
5. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
6. **Measure results**: Track conversion metrics to see how your 4C copy performs
|
||||||
|
|
||||||
|
7. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate 4C Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_four_cs_copy(brand_name, brand_description, campaign_description, clear_message,
|
||||||
|
concise_content, credible_elements, compelling_hook, target_audience,
|
||||||
|
unique_selling_point, call_to_action, landing_page_url, platform,
|
||||||
|
language, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the 4C (Clear, Concise, Credible, Compelling) framework.
|
||||||
|
Your expertise is in creating effective, persuasive marketing copy that communicates clearly, builds credibility, and drives action.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {brand_description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
PLATFORM: {platform}
|
||||||
|
LANGUAGE: {language}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the 4C framework with these elements:
|
||||||
|
- **Clear Message**: {clear_message}
|
||||||
|
- **Concise Content**: {concise_content}
|
||||||
|
- **Credible Elements**: {credible_elements}
|
||||||
|
- **Compelling Hook**: {compelling_hook}
|
||||||
|
- **Call to Action**: {call_to_action}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if landing_page_url:
|
||||||
|
prompt += f"\nInclude the landing page URL ({landing_page_url}) in your call to action."
|
||||||
|
|
||||||
|
prompt += """
|
||||||
|
For each campaign:
|
||||||
|
1. Start with a compelling hook that grabs attention
|
||||||
|
2. Present your clear message in a concise way
|
||||||
|
3. Support your claims with credible elements
|
||||||
|
4. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
214
lib/ai_writers/ai_copywriter/4r_copywriter.py
Normal file
214
lib/ai_writers/ai_copywriter/4r_copywriter.py
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 4R Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the 4R (Relevance, Resonance, Response, Results) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about 4R copywriting
|
||||||
|
with st.expander("📚 What is 4R Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the 4R Copywriting Framework
|
||||||
|
|
||||||
|
The 4R framework is a powerful copywriting approach that ensures your message connects with your audience and drives action:
|
||||||
|
|
||||||
|
- **Relevance**: Your message addresses the specific needs, interests, or pain points of your target audience
|
||||||
|
- **Resonance**: Your copy creates an emotional connection with the audience, making them feel understood
|
||||||
|
- **Response**: Your message prompts the audience to take a specific action
|
||||||
|
- **Results**: Your copy clearly communicates the positive outcomes or benefits the audience will experience
|
||||||
|
|
||||||
|
### Why 4R Copywriting Works
|
||||||
|
|
||||||
|
The 4R framework works because it:
|
||||||
|
|
||||||
|
- Ensures your message is targeted to the right audience
|
||||||
|
- Creates emotional connections that build trust and loyalty
|
||||||
|
- Drives specific actions that lead to conversions
|
||||||
|
- Focuses on the outcomes that matter most to your audience
|
||||||
|
- Creates a complete journey from awareness to action
|
||||||
|
- Works across all marketing channels and platforms
|
||||||
|
|
||||||
|
### When to Use 4R Copywriting
|
||||||
|
|
||||||
|
The 4R framework is particularly effective for:
|
||||||
|
|
||||||
|
- Email marketing campaigns
|
||||||
|
- Landing pages and sales pages
|
||||||
|
- Social media posts and ads
|
||||||
|
- Product descriptions
|
||||||
|
- Service offerings
|
||||||
|
- Any marketing content where audience connection and action are essential
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your 4R Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity AI Writer",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Content marketers",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
relevance = st.text_area('**🎯 Relevance**',
|
||||||
|
placeholder="e.g., Struggling with writer's block? Our AI assistant helps you create high-quality content in minutes",
|
||||||
|
help="How does your product/service address the specific needs or pain points of your target audience?")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
brand_description = st.text_input('**📋 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing platform",
|
||||||
|
help="Describe what your company does briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., All-in-one AI copywriting platform",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
resonance = st.text_area('**💖 Resonance**',
|
||||||
|
placeholder="e.g., We understand the frustration of staring at a blank page. Our AI assistant feels like having a professional writer by your side",
|
||||||
|
help="How can you create an emotional connection with your audience? What language or imagery will resonate with them?")
|
||||||
|
|
||||||
|
response = st.text_area('**🚀 Response**',
|
||||||
|
placeholder="e.g., Start creating high-converting content today with our 14-day free trial",
|
||||||
|
help="What specific action do you want your audience to take?")
|
||||||
|
|
||||||
|
results = st.text_area('**✨ Results**',
|
||||||
|
placeholder="e.g., Save 20+ hours per week on content creation, increase conversion rates by 35%, improve SEO rankings",
|
||||||
|
help="What positive outcomes or benefits will your audience experience?")
|
||||||
|
|
||||||
|
landing_page_url = st.text_input('**🌐 Landing Page URL** (Optional)',
|
||||||
|
placeholder="e.g., https://alwrity.com",
|
||||||
|
help="Provide a URL to include in your call to action.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
with col1:
|
||||||
|
platform = st.selectbox(
|
||||||
|
'**📱 Content Platform**',
|
||||||
|
options=['Social media copy', 'Email copy', 'Website copy', 'Ad copy', 'Product copy'],
|
||||||
|
help="Select the platform where your copy will be used."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
language = st.selectbox(
|
||||||
|
'**🌍 Language**',
|
||||||
|
options=['English', 'Hindustani', 'Chinese', 'Hindi', 'Spanish'],
|
||||||
|
help="Select the language for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate 4R Copy**', type="primary"):
|
||||||
|
if not brand_name or not brand_description or not relevance or not resonance or not response or not results:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Relevance, Resonance, Response, and Results)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling 4R copy..."):
|
||||||
|
four_r_copy = generate_four_r_copy(
|
||||||
|
brand_name,
|
||||||
|
brand_description,
|
||||||
|
relevance,
|
||||||
|
resonance,
|
||||||
|
response,
|
||||||
|
results,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
landing_page_url,
|
||||||
|
platform,
|
||||||
|
language,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if four_r_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your 4R Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(four_r_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your 4R Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your 4R Copy Effectively
|
||||||
|
|
||||||
|
1. **Test for relevance**: Ensure your copy speaks directly to your target audience's needs and interests
|
||||||
|
|
||||||
|
2. **Enhance emotional resonance**: Use language and imagery that creates a deeper connection with your audience
|
||||||
|
|
||||||
|
3. **Clarify the response**: Make sure your call to action is clear, specific, and compelling
|
||||||
|
|
||||||
|
4. **Quantify results**: Use specific numbers, statistics, and examples to make your results more tangible
|
||||||
|
|
||||||
|
5. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
6. **Measure performance**: Track conversion metrics to see how your 4R copy performs
|
||||||
|
|
||||||
|
7. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate 4R Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_four_r_copy(brand_name, brand_description, relevance, resonance, response, results,
|
||||||
|
target_audience, unique_selling_point, landing_page_url, platform,
|
||||||
|
language, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the 4R (Relevance, Resonance, Response, Results) framework.
|
||||||
|
Your expertise is in creating compelling marketing copy that connects with audiences on a deep level and drives specific actions.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {brand_description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
PLATFORM: {platform}
|
||||||
|
LANGUAGE: {language}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the 4R framework with these elements:
|
||||||
|
- **Relevance**: {relevance}
|
||||||
|
- **Resonance**: {resonance}
|
||||||
|
- **Response**: {response}
|
||||||
|
- **Results**: {results}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if landing_page_url:
|
||||||
|
prompt += f"\nInclude the landing page URL ({landing_page_url}) in your call to action."
|
||||||
|
|
||||||
|
prompt += """
|
||||||
|
For each campaign:
|
||||||
|
1. Start by establishing relevance to your target audience's needs or pain points
|
||||||
|
2. Create emotional resonance by connecting with your audience's feelings and experiences
|
||||||
|
3. Clearly communicate the specific action you want your audience to take
|
||||||
|
4. End by highlighting the positive results or benefits they will experience
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
97
lib/ai_writers/ai_copywriter/README
Normal file
97
lib/ai_writers/ai_copywriter/README
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# Brainstorming for Copywriting Tools UI and Features (TBD)
|
||||||
|
|
||||||
|
## Showing All Copywriting Tools in a Single UI
|
||||||
|
|
||||||
|
1. **Unified Dashboard Approach**
|
||||||
|
- Create a central dashboard with cards/tiles for each copywriting formula
|
||||||
|
- Use visual icons and brief descriptions to distinguish each formula
|
||||||
|
- Implement a consistent color scheme and design language across all tools
|
||||||
|
|
||||||
|
2. **Categorization System**
|
||||||
|
- Group formulas by purpose (e.g., "Emotional Appeal," "Problem-Solution," "Storytelling")
|
||||||
|
- Allow users to filter by category or search by keyword
|
||||||
|
- Include a "Featured" or "Popular" section for commonly used formulas
|
||||||
|
|
||||||
|
3. **Interactive Selection Interface**
|
||||||
|
- Create a decision tree or guided selection process
|
||||||
|
- Ask users a few key questions to recommend the most appropriate formula
|
||||||
|
- Show a comparison view of multiple formulas side-by-side
|
||||||
|
|
||||||
|
4. **Progressive Disclosure**
|
||||||
|
- Start with a simplified view showing just the formula names and basic descriptions
|
||||||
|
- Allow users to expand each formula for more details and to start using it
|
||||||
|
- Implement a "Recently Used" section for quick access to frequently used formulas
|
||||||
|
|
||||||
|
## Presenting the Right Formula for User Needs
|
||||||
|
|
||||||
|
1. **Guided Selection Wizard**
|
||||||
|
- Create a multi-step wizard that asks about the user's marketing goals
|
||||||
|
- Include questions about target audience, industry, content type, and desired outcome
|
||||||
|
- Provide recommendations based on user responses with explanations
|
||||||
|
|
||||||
|
2. **Formula Comparison Tool**
|
||||||
|
- Create a comparison matrix showing strengths of each formula
|
||||||
|
- Include use cases and examples for each formula
|
||||||
|
- Allow users to see side-by-side comparisons of different formulas
|
||||||
|
|
||||||
|
3. **Educational Content Integration**
|
||||||
|
- Add a "Learn More" section for each formula with detailed explanations
|
||||||
|
- Include case studies showing successful applications of each formula
|
||||||
|
- Provide templates and examples for common use cases
|
||||||
|
|
||||||
|
4. **Contextual Recommendations**
|
||||||
|
- Analyze the user's input and automatically suggest the most appropriate formula
|
||||||
|
- Show a confidence score for each recommendation
|
||||||
|
- Allow users to easily switch between formulas if the recommendation isn't right
|
||||||
|
|
||||||
|
## Using AI to Pre-fill Inputs Based on Brief Requirements
|
||||||
|
|
||||||
|
1. **Smart Input Generation**
|
||||||
|
- Create an initial input field where users can describe their copywriting needs in natural language
|
||||||
|
- Use AI to analyze this input and extract key information (brand, audience, goals, etc.)
|
||||||
|
- Pre-fill the formula-specific fields with AI-generated content
|
||||||
|
- Allow users to edit and refine the pre-filled content
|
||||||
|
|
||||||
|
2. **Contextual Understanding**
|
||||||
|
- Implement industry-specific templates and prompts
|
||||||
|
- Use AI to recognize industry terminology and adapt suggestions accordingly
|
||||||
|
- Provide multiple options for each field based on the user's brief description
|
||||||
|
|
||||||
|
3. **Progressive Refinement**
|
||||||
|
- Start with AI-generated suggestions for all fields
|
||||||
|
- Allow users to focus on refining specific fields while keeping others
|
||||||
|
- Implement a "regenerate" option for individual fields if the AI suggestion isn't suitable
|
||||||
|
|
||||||
|
4. **Learning from User Edits**
|
||||||
|
- Track which AI-generated suggestions users keep vs. modify
|
||||||
|
- Use this data to improve future suggestions
|
||||||
|
- Implement a feedback mechanism for users to rate the quality of AI suggestions
|
||||||
|
|
||||||
|
## AI-Generated Images as a Feature
|
||||||
|
|
||||||
|
1. **Complementary Visual Content**
|
||||||
|
- Generate images that match the tone and message of the copy
|
||||||
|
- Create multiple image options for different platforms (social media, email, website)
|
||||||
|
- Ensure images align with the copywriting formula being used
|
||||||
|
|
||||||
|
2. **Integrated Workflow**
|
||||||
|
- Add an "Generate Matching Images" button after copy is created
|
||||||
|
- Allow users to specify image style, mood, and key elements
|
||||||
|
- Provide options to customize generated images further
|
||||||
|
|
||||||
|
3. **Platform-Specific Optimization**
|
||||||
|
- Automatically size and format images for different platforms
|
||||||
|
- Generate variations optimized for different aspect ratios
|
||||||
|
- Include text overlay options that complement the copy
|
||||||
|
|
||||||
|
4. **Brand Consistency**
|
||||||
|
- Allow users to upload brand assets (logos, colors, fonts)
|
||||||
|
- Generate images that maintain brand identity
|
||||||
|
- Create a visual style guide based on user preferences
|
||||||
|
|
||||||
|
5. **Enhanced Engagement**
|
||||||
|
- A/B test different image options with the same copy
|
||||||
|
- Provide analytics on which image-copy combinations perform best
|
||||||
|
- Suggest image improvements based on performance data
|
||||||
|
|
||||||
|
These enhancements would create a more comprehensive, user-friendly copywriting platform that guides users to the right formula, simplifies the input process, and delivers complete marketing assets ready for deployment.
|
||||||
182
lib/ai_writers/ai_copywriter/acca_copywriter.py
Normal file
182
lib/ai_writers/ai_copywriter/acca_copywriter.py
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🚀 ACCA Copywriting Generator</h2>
|
||||||
|
<p>Create persuasive marketing copy using the proven ACCA (Awareness-Curiosity-Conviction-Action) formula.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about ACCA copywriting
|
||||||
|
with st.expander("📚 What is ACCA Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the ACCA Copywriting Formula
|
||||||
|
|
||||||
|
The ACCA formula is a powerful copywriting framework that guides your audience through a journey from problem recognition to action:
|
||||||
|
|
||||||
|
- **Awareness**: Highlight the problem or pain point your audience faces
|
||||||
|
- **Curiosity**: Agitate the problem by emphasizing its negative impact
|
||||||
|
- **Conviction**: Present your solution and build confidence in it
|
||||||
|
- **Action**: Provide a clear, compelling call to action
|
||||||
|
|
||||||
|
### Why ACCA Copywriting Works
|
||||||
|
|
||||||
|
The ACCA formula works because it:
|
||||||
|
|
||||||
|
- Follows the natural decision-making process of your audience
|
||||||
|
- Creates a logical progression from problem to solution
|
||||||
|
- Builds emotional investment before asking for commitment
|
||||||
|
- Addresses objections before they arise
|
||||||
|
- Ends with a clear next step
|
||||||
|
|
||||||
|
### When to Use ACCA Copywriting
|
||||||
|
|
||||||
|
The ACCA formula is particularly effective for:
|
||||||
|
|
||||||
|
- Product launches
|
||||||
|
- Service promotions
|
||||||
|
- Problem-solving offers
|
||||||
|
- Educational content
|
||||||
|
- Sales pages
|
||||||
|
- Email marketing sequences
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your ACCA Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
awareness = st.text_input('❓ **Awareness (Problem)**',
|
||||||
|
placeholder="e.g., Struggling to manage finances",
|
||||||
|
help="What problem or pain point does your audience face?")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 5-6 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
curiosity = st.text_input('🔥 **Curiosity (Agitation)**',
|
||||||
|
placeholder="e.g., Leads to financial instability and stress",
|
||||||
|
help="Why is this problem serious for your audience? Highlight the negative impact.")
|
||||||
|
|
||||||
|
conviction = st.text_input('💡 **Conviction (Solution)**',
|
||||||
|
placeholder="e.g., Provides easy-to-use budgeting tools with AI insights",
|
||||||
|
help="How does your product/service solve this problem? Explain the benefits.")
|
||||||
|
|
||||||
|
call_to_action = st.text_input('🎯 **Action (Call to Action)**',
|
||||||
|
placeholder="e.g., Start your free trial today",
|
||||||
|
help="What specific action do you want your audience to take?")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate ACCA Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not awareness or not curiosity or not conviction:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Awareness, Curiosity, and Conviction)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting persuasive ACCA copy..."):
|
||||||
|
acca_copy = generate_acca_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
awareness,
|
||||||
|
curiosity,
|
||||||
|
conviction,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
call_to_action,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if acca_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>✨ Your ACCA Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(acca_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy - using a container instead of an expander
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f9f9f9; padding: 15px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #333;'>💡 Tips for Using Your ACCA Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your ACCA Copy Effectively
|
||||||
|
|
||||||
|
1. **Test different versions**: A/B test your copy to see which version resonates most with your audience
|
||||||
|
|
||||||
|
2. **Pair with visuals**: Combine your copy with images that reinforce each stage of the ACCA formula
|
||||||
|
|
||||||
|
3. **Consider the platform**: Adapt your copy based on where it will appear (social media, email, website, etc.)
|
||||||
|
|
||||||
|
4. **Measure results**: Track conversion metrics to see how your ACCA copy performs
|
||||||
|
|
||||||
|
5. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate ACCA Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_acca_copy(brand_name, description, awareness, curiosity, conviction, target_audience,
|
||||||
|
unique_selling_point, call_to_action, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the ACCA (Awareness-Curiosity-Conviction-Action) formula.
|
||||||
|
Your expertise is in creating compelling, persuasive marketing copy that guides audiences through a journey from problem
|
||||||
|
recognition to taking action. Your copy is authentic, specific to the brand, and focused on the target audience's needs."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the ACCA formula with these elements:
|
||||||
|
- **Awareness**: {awareness}
|
||||||
|
- **Curiosity**: {curiosity}
|
||||||
|
- **Conviction**: {conviction}
|
||||||
|
- **Action**: {call_to_action}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Create a compelling headline that captures attention
|
||||||
|
2. Write 2-3 paragraphs that follow the ACCA formula
|
||||||
|
3. End with a strong call to action
|
||||||
|
4. Explain how each element of the ACCA formula is used in the copy
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
168
lib/ai_writers/ai_copywriter/ai_emotional_copywriter.py
Normal file
168
lib/ai_writers/ai_copywriter/ai_emotional_copywriter.py
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎭 Emotional Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that resonates with your audience's emotions and drives action.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about emotional copywriting
|
||||||
|
with st.expander("📚 What is Emotional Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding Emotional Copywriting
|
||||||
|
|
||||||
|
Emotional copywriting is a powerful marketing technique that connects with your audience on a deeper level by:
|
||||||
|
|
||||||
|
- **Triggering specific emotions** (joy, fear, urgency, trust, etc.)
|
||||||
|
- **Creating personal connections** with your audience
|
||||||
|
- **Addressing pain points** and offering solutions
|
||||||
|
- **Building trust and credibility**
|
||||||
|
- **Creating a sense of belonging** or exclusivity
|
||||||
|
|
||||||
|
### Why Emotional Copywriting Works
|
||||||
|
|
||||||
|
Research shows that people make purchasing decisions based on emotions first, then justify with logic. By tapping into the right emotions, you can:
|
||||||
|
|
||||||
|
- Increase engagement and response rates
|
||||||
|
- Build stronger brand loyalty
|
||||||
|
- Drive more conversions
|
||||||
|
- Create memorable brand experiences
|
||||||
|
|
||||||
|
### Common Emotional Triggers
|
||||||
|
|
||||||
|
- **Fear of Missing Out (FOMO)**: Limited time offers, exclusive access
|
||||||
|
- **Trust**: Testimonials, guarantees, social proof
|
||||||
|
- **Joy/Happiness**: Benefits, positive outcomes, aspirational messaging
|
||||||
|
- **Urgency**: Time-sensitive offers, countdown timers
|
||||||
|
- **Belonging**: Community, exclusivity, shared values
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your Emotional Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**Brand/Company Name**',
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**Target Audience**',
|
||||||
|
help="Who is your ideal customer? (e.g., 'busy moms', 'tech-savvy millennials')")
|
||||||
|
|
||||||
|
emotional_trigger = st.selectbox(
|
||||||
|
'**Primary Emotional Trigger**',
|
||||||
|
options=['Trust', 'Fear of Missing Out', 'Joy/Happiness', 'Urgency', 'Belonging', 'Exclusivity'],
|
||||||
|
help="Select the primary emotion you want to evoke in your audience."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**Brand Description** (In 5-6 words)',
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**Unique Selling Point**',
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
call_to_action = st.text_input('**Desired Call to Action**',
|
||||||
|
help="What action do you want your audience to take? (e.g., 'Sign up now', 'Buy today')")
|
||||||
|
|
||||||
|
trust_elements = st.text_area('**Trust Elements**',
|
||||||
|
help="Build trust and credibility by showcasing testimonials, guarantees, or endorsements.",
|
||||||
|
placeholder="Testimonials from satisfied customers...\nOur guarantee that...\nIndustry certifications...")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**Generate Emotional Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not trust_elements:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, and Trust Elements)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting emotionally compelling copy..."):
|
||||||
|
emotional_copy = generate_emotional_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
trust_elements,
|
||||||
|
target_audience,
|
||||||
|
emotional_trigger,
|
||||||
|
unique_selling_point,
|
||||||
|
call_to_action,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if emotional_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your Emotional Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(emotional_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy - using a container instead of an expander
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f9f9f9; padding: 15px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #333;'>💡 Tips for Using Your Emotional Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your Emotional Copy Effectively
|
||||||
|
|
||||||
|
1. **Test different versions**: A/B test your copy to see which emotional triggers resonate most with your audience
|
||||||
|
|
||||||
|
2. **Pair with visuals**: Combine your copy with images that reinforce the emotional message
|
||||||
|
|
||||||
|
3. **Consider the context**: Adapt the copy based on where it will appear (social media, email, website, etc.)
|
||||||
|
|
||||||
|
4. **Measure results**: Track engagement metrics to see how your emotional copy performs
|
||||||
|
|
||||||
|
5. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate Emotional Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_emotional_copy(brand_name, description, trust_elements, target_audience, emotional_trigger,
|
||||||
|
unique_selling_point, call_to_action, tone_style):
|
||||||
|
system_prompt = """You are an expert emotional copywriter with years of experience in creating compelling marketing copy
|
||||||
|
that resonates with audiences on a deep emotional level. Your specialty is crafting copy that triggers specific emotions
|
||||||
|
and drives action while maintaining authenticity and credibility."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different emotional marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
PRIMARY EMOTIONAL TRIGGER: {emotional_trigger}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
DESIRED CALL TO ACTION: {call_to_action}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
TRUST ELEMENTS: {trust_elements}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Create a compelling headline that captures attention
|
||||||
|
2. Write 2-3 paragraphs of body copy that builds emotional connection
|
||||||
|
3. End with a strong call to action
|
||||||
|
4. Explain which emotional triggers you used and why they're effective for this audience
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
211
lib/ai_writers/ai_copywriter/aida_copywriter.py
Normal file
211
lib/ai_writers/ai_copywriter/aida_copywriter.py
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 AIDA Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the AIDA (Attention-Interest-Desire-Action) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about AIDA copywriting
|
||||||
|
with st.expander("📚 What is AIDA Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the AIDA Copywriting Framework
|
||||||
|
|
||||||
|
AIDA is an acronym for Attention-Interest-Desire-Action. It's a classic copywriting framework that guides your audience through a complete journey:
|
||||||
|
|
||||||
|
- **Attention**: Capturing the audience's attention with a compelling headline or hook
|
||||||
|
- **Interest**: Generating interest by highlighting benefits or addressing pain points
|
||||||
|
- **Desire**: Creating desire by showcasing how the product/service solves problems or fulfills needs
|
||||||
|
- **Action**: Prompting the audience to take a specific action with a strong call to action
|
||||||
|
|
||||||
|
### Why AIDA Copywriting Works
|
||||||
|
|
||||||
|
The AIDA framework works because it:
|
||||||
|
|
||||||
|
- Follows the natural decision-making process of consumers
|
||||||
|
- Addresses all key elements needed for conversion
|
||||||
|
- Creates a complete journey from awareness to action
|
||||||
|
- Balances emotional and rational appeals
|
||||||
|
- Focuses on the customer's journey rather than just product features
|
||||||
|
|
||||||
|
### When to Use AIDA Copywriting
|
||||||
|
|
||||||
|
The AIDA framework is particularly effective for:
|
||||||
|
|
||||||
|
- Landing pages and sales pages
|
||||||
|
- Email marketing campaigns
|
||||||
|
- Product descriptions
|
||||||
|
- Direct response advertising
|
||||||
|
- Content that needs to drive specific actions
|
||||||
|
- Marketing materials that need to address objections
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your AIDA Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
attention = st.text_area('**🔔 Attention-Grabbing Hook**',
|
||||||
|
placeholder="e.g., Tired of spending hours writing content that doesn't convert?",
|
||||||
|
help="Create a compelling headline or hook that captures attention.")
|
||||||
|
|
||||||
|
interest = st.text_area('**💡 Generate Interest**',
|
||||||
|
placeholder="e.g., Imagine creating high-quality content in minutes instead of hours...",
|
||||||
|
help="Highlight benefits or address pain points to generate interest.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 5-6 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
desire = st.text_area('**❤️ Create Desire**',
|
||||||
|
placeholder="e.g., Our AI analyzes top-performing content to ensure your copy resonates with your target audience...",
|
||||||
|
help="Showcase how your product/service solves problems or fulfills needs.")
|
||||||
|
|
||||||
|
action = st.text_area('**🚀 Call to Action**',
|
||||||
|
placeholder="e.g., Start creating converting content today with our 14-day free trial...",
|
||||||
|
help="Prompt your audience to take action with a strong call to action.")
|
||||||
|
|
||||||
|
landing_page_url = st.text_input('**🌐 Landing Page URL** (Optional)',
|
||||||
|
placeholder="e.g., https://alwrity.com",
|
||||||
|
help="Provide a URL to include in your call to action.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
with col1:
|
||||||
|
platform = st.selectbox(
|
||||||
|
'**📱 Content Platform**',
|
||||||
|
options=['Social media copy', 'Email copy', 'Website copy', 'Ad copy', 'Product copy'],
|
||||||
|
help="Select the platform where your copy will be used."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
language = st.selectbox(
|
||||||
|
'**🌍 Language**',
|
||||||
|
options=['English', 'Hindustani', 'Chinese', 'Hindi', 'Spanish'],
|
||||||
|
help="Select the language for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate AIDA Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not attention or not interest or not desire or not action:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, and all AIDA elements)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling AIDA copy..."):
|
||||||
|
aida_copy = generate_aida_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
attention,
|
||||||
|
interest,
|
||||||
|
desire,
|
||||||
|
action,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
landing_page_url,
|
||||||
|
platform,
|
||||||
|
language,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if aida_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your AIDA Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(aida_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your AIDA Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your AIDA Copy Effectively
|
||||||
|
|
||||||
|
1. **Follow the sequence**: The AIDA framework creates a natural progression - make sure your copy maintains this flow
|
||||||
|
|
||||||
|
2. **Test different hooks**: A/B test different attention-grabbing headlines to see which resonates most with your audience
|
||||||
|
|
||||||
|
3. **Pair with visuals**: Combine your copy with images that reinforce each stage of the AIDA journey
|
||||||
|
|
||||||
|
4. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
5. **Measure results**: Track conversion metrics to see how your AIDA copy performs
|
||||||
|
|
||||||
|
6. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate AIDA Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_aida_copy(brand_name, description, attention, interest, desire, action,
|
||||||
|
target_audience, unique_selling_point, landing_page_url,
|
||||||
|
platform, language, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the AIDA (Attention-Interest-Desire-Action) framework.
|
||||||
|
Your expertise is in creating compelling, conversion-focused marketing copy that guides readers through a complete journey from awareness to action.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
PLATFORM: {platform}
|
||||||
|
LANGUAGE: {language}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the AIDA framework with these elements:
|
||||||
|
- **Attention**: {attention}
|
||||||
|
- **Interest**: {interest}
|
||||||
|
- **Desire**: {desire}
|
||||||
|
- **Action**: {action}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if landing_page_url:
|
||||||
|
prompt += f"\nInclude the landing page URL ({landing_page_url}) in your call to action."
|
||||||
|
|
||||||
|
prompt += """
|
||||||
|
For each campaign:
|
||||||
|
1. Start with the attention-grabbing hook to capture the audience's attention
|
||||||
|
2. Generate interest by highlighting benefits or addressing pain points
|
||||||
|
3. Create desire by showcasing how the product/service solves problems or fulfills needs
|
||||||
|
4. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
191
lib/ai_writers/ai_copywriter/aidppc_copywriter.py
Normal file
191
lib/ai_writers/ai_copywriter/aidppc_copywriter.py
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 AIDPPC Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the AIDPPC (Attention-Interest-Description-Persuasion-Proof-Close) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about AIDPPC copywriting
|
||||||
|
with st.expander("📚 What is AIDPPC Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the AIDPPC Copywriting Framework
|
||||||
|
|
||||||
|
AIDPPC is an acronym for Attention-Interest-Description-Persuasion-Proof-Close. It's a comprehensive copywriting framework that guides your audience through a complete journey:
|
||||||
|
|
||||||
|
- **Attention**: Capturing the audience's attention with a compelling headline or hook
|
||||||
|
- **Interest**: Generating interest by highlighting benefits or addressing pain points
|
||||||
|
- **Description**: Describing your product or service in detail
|
||||||
|
- **Persuasion**: Presenting compelling arguments or incentives to persuade
|
||||||
|
- **Proof**: Providing social proof, testimonials, or guarantees to build credibility
|
||||||
|
- **Close**: Prompting the audience to take action with a strong call to action
|
||||||
|
|
||||||
|
### Why AIDPPC Copywriting Works
|
||||||
|
|
||||||
|
The AIDPPC framework works because it:
|
||||||
|
|
||||||
|
- Follows the natural decision-making process of consumers
|
||||||
|
- Addresses all key elements needed for conversion
|
||||||
|
- Builds credibility through multiple stages
|
||||||
|
- Creates a complete journey from awareness to action
|
||||||
|
- Balances emotional and rational appeals
|
||||||
|
|
||||||
|
### When to Use AIDPPC Copywriting
|
||||||
|
|
||||||
|
The AIDPPC framework is particularly effective for:
|
||||||
|
|
||||||
|
- Landing pages and sales pages
|
||||||
|
- Email marketing campaigns
|
||||||
|
- Product descriptions
|
||||||
|
- Direct response advertising
|
||||||
|
- Content that needs to drive specific actions
|
||||||
|
- Marketing materials that need to address objections
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your AIDPPC Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
attention = st.text_area('**🔔 Attention-Grabbing Hook**',
|
||||||
|
placeholder="e.g., Tired of spending hours writing content that doesn't convert?",
|
||||||
|
help="Create a compelling headline or hook that captures attention.")
|
||||||
|
|
||||||
|
interest = st.text_area('**💡 Generate Interest**',
|
||||||
|
placeholder="e.g., Imagine creating high-quality content in minutes instead of hours...",
|
||||||
|
help="Highlight benefits or address pain points to generate interest.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
persuasion = st.text_area('**💪 Persuasive Arguments**',
|
||||||
|
placeholder="e.g., Our AI analyzes top-performing content to ensure your copy resonates with your target audience...",
|
||||||
|
help="Present compelling arguments or incentives to persuade your audience.")
|
||||||
|
|
||||||
|
proof = st.text_area('**✅ Social Proof**',
|
||||||
|
placeholder="e.g., Join 10,000+ satisfied customers who have transformed their content strategy...",
|
||||||
|
help="Provide testimonials, statistics, or guarantees to build credibility.")
|
||||||
|
|
||||||
|
close = st.text_area('**🚀 Call to Action**',
|
||||||
|
placeholder="e.g., Start creating converting content today with our 14-day free trial...",
|
||||||
|
help="Prompt your audience to take action with a strong call to action.")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate AIDPPC Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not attention or not interest or not persuasion or not proof or not close:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, and all AIDPPC elements)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling AIDPPC copy..."):
|
||||||
|
aidppc_copy = generate_aidppc_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
attention,
|
||||||
|
interest,
|
||||||
|
persuasion,
|
||||||
|
proof,
|
||||||
|
close,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if aidppc_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your AIDPPC Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(aidppc_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your AIDPPC Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your AIDPPC Copy Effectively
|
||||||
|
|
||||||
|
1. **Follow the sequence**: The AIDPPC framework creates a natural progression - make sure your copy maintains this flow
|
||||||
|
|
||||||
|
2. **Test different hooks**: A/B test different attention-grabbing headlines to see which resonates most with your audience
|
||||||
|
|
||||||
|
3. **Pair with visuals**: Combine your copy with images that reinforce each stage of the AIDPPC journey
|
||||||
|
|
||||||
|
4. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
5. **Measure results**: Track conversion metrics to see how your AIDPPC copy performs
|
||||||
|
|
||||||
|
6. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate AIDPPC Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_aidppc_copy(brand_name, description, attention, interest, persuasion, proof, close,
|
||||||
|
target_audience, unique_selling_point, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the AIDPPC (Attention-Interest-Description-Persuasion-Proof-Close) framework.
|
||||||
|
Your expertise is in creating compelling, conversion-focused marketing copy that guides readers through a complete journey from awareness to action.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the AIDPPC framework with these elements:
|
||||||
|
- **Attention**: {attention}
|
||||||
|
- **Interest**: {interest}
|
||||||
|
- **Persuasion**: {persuasion}
|
||||||
|
- **Proof**: {proof}
|
||||||
|
- **Close**: {close}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Start with the attention-grabbing hook to capture the audience's attention
|
||||||
|
2. Generate interest by highlighting benefits or addressing pain points
|
||||||
|
3. Describe your product or service in detail
|
||||||
|
4. Present persuasive arguments or incentives
|
||||||
|
5. Provide social proof, testimonials, or guarantees
|
||||||
|
6. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
176
lib/ai_writers/ai_copywriter/app_copywriter.py
Normal file
176
lib/ai_writers/ai_copywriter/app_copywriter.py
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🔍 APP Copywriting Generator</h2>
|
||||||
|
<p>Create compelling marketing copy using the proven APP (Agree-Promise-Preview) formula.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about APP copywriting
|
||||||
|
with st.expander("📚 What is APP Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the APP Copywriting Formula
|
||||||
|
|
||||||
|
The APP formula is a powerful copywriting framework that creates a natural connection with your audience:
|
||||||
|
|
||||||
|
- **Agree**: Acknowledge a shared problem or pain point your audience faces
|
||||||
|
- **Promise**: Make a compelling promise or offer a solution to that problem
|
||||||
|
- **Preview**: Provide a preview of how your solution will deliver on that promise
|
||||||
|
|
||||||
|
### Why APP Copywriting Works
|
||||||
|
|
||||||
|
The APP formula works because it:
|
||||||
|
|
||||||
|
- Creates immediate rapport by showing you understand your audience's challenges
|
||||||
|
- Builds trust by acknowledging problems before selling solutions
|
||||||
|
- Reduces resistance by connecting on a human level first
|
||||||
|
- Demonstrates empathy and understanding
|
||||||
|
- Follows a natural conversation flow that feels authentic
|
||||||
|
|
||||||
|
### When to Use APP Copywriting
|
||||||
|
|
||||||
|
The APP formula is particularly effective for:
|
||||||
|
|
||||||
|
- Building trust with new audiences
|
||||||
|
- Introducing new products or services
|
||||||
|
- Addressing common objections
|
||||||
|
- Creating relatable content
|
||||||
|
- Establishing your brand as a solution provider
|
||||||
|
- Email marketing sequences
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your APP Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
agree = st.text_area('**🤝 Agree (Shared Problem)**',
|
||||||
|
placeholder="We all face..., Like you, I've..., Safety, Unprofessionalism..",
|
||||||
|
help="Connect with the audience by acknowledging a shared problem or pain point they face.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
promise = st.text_area('**✨ Promise (Solution)**',
|
||||||
|
placeholder="We guarantee..., Our solution ensures..., You'll never have to worry about...",
|
||||||
|
help="Make a compelling promise or offer a solution to the problem.")
|
||||||
|
|
||||||
|
preview = st.text_area('**🔮 Preview (Proof)**',
|
||||||
|
placeholder="Here's how..., Our customers have experienced..., You'll see results like...",
|
||||||
|
help="Provide a preview of how your solution will deliver on the promise.")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate APP Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not agree or not promise or not preview:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Agree, Promise, and Preview)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling APP copy..."):
|
||||||
|
app_copy = generate_app_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
agree,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
promise,
|
||||||
|
preview,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if app_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>✨ Your APP Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(app_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy - using a container instead of an expander
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f9f9f9; padding: 15px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #333;'>💡 Tips for Using Your APP Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your APP Copy Effectively
|
||||||
|
|
||||||
|
1. **Test different versions**: A/B test your copy to see which version resonates most with your audience
|
||||||
|
|
||||||
|
2. **Pair with visuals**: Combine your copy with images that reinforce each stage of the APP formula
|
||||||
|
|
||||||
|
3. **Consider the platform**: Adapt your copy based on where it will appear (social media, email, website, etc.)
|
||||||
|
|
||||||
|
4. **Measure results**: Track engagement metrics to see how your APP copy performs
|
||||||
|
|
||||||
|
5. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate APP Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_app_copy(brand_name, description, agree, target_audience, unique_selling_point,
|
||||||
|
promise, preview, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the APP (Agree-Promise-Preview) formula.
|
||||||
|
Your expertise is in creating compelling, persuasive marketing copy that builds rapport with audiences by
|
||||||
|
acknowledging their problems, making promises, and providing previews of solutions. Your copy is authentic,
|
||||||
|
specific to the brand, and focused on the target audience's needs."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the APP formula with these elements:
|
||||||
|
- **Agree**: {agree}
|
||||||
|
- **Promise**: {promise}
|
||||||
|
- **Preview**: {preview}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Create a compelling headline that captures attention
|
||||||
|
2. Write 2-3 paragraphs that follow the APP formula
|
||||||
|
3. End with a strong call to action
|
||||||
|
4. Explain how each element of the APP formula is used in the copy
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
236
lib/ai_writers/ai_copywriter/copywriter_dashboard.py
Normal file
236
lib/ai_writers/ai_copywriter/copywriter_dashboard.py
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
import streamlit as st
|
||||||
|
import importlib
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# Add the parent directory to the path to allow importing from lib
|
||||||
|
current_dir = Path(__file__).parent
|
||||||
|
root_dir = current_dir.parent.parent.parent
|
||||||
|
sys.path.append(str(root_dir))
|
||||||
|
|
||||||
|
# Dictionary to store the input section functions
|
||||||
|
input_sections = {}
|
||||||
|
|
||||||
|
# List of copywriter modules to import
|
||||||
|
copywriter_modules = [
|
||||||
|
"ai_emotional_copywriter",
|
||||||
|
"acca_copywriter",
|
||||||
|
"app_copywriter",
|
||||||
|
"star_copywriter",
|
||||||
|
"oath_copywriter",
|
||||||
|
"quest_copywriter",
|
||||||
|
"aidppc_copywriter",
|
||||||
|
"aida_copywriter",
|
||||||
|
"pas_copywriter",
|
||||||
|
"fab_copywriter",
|
||||||
|
"four_c_copywriter",
|
||||||
|
"four_r_copywriter"
|
||||||
|
]
|
||||||
|
|
||||||
|
# Dynamically import all copywriter modules
|
||||||
|
for module_name in copywriter_modules:
|
||||||
|
try:
|
||||||
|
module_path = f"lib.ai_writers.ai_copywriter.{module_name}"
|
||||||
|
module = importlib.import_module(module_path)
|
||||||
|
if hasattr(module, "input_section"):
|
||||||
|
input_sections[module_name] = module.input_section
|
||||||
|
except Exception as e:
|
||||||
|
st.write(f"Debug: Error importing {module_name}: {str(e)}")
|
||||||
|
|
||||||
|
def copywriter_dashboard():
|
||||||
|
"""
|
||||||
|
Main function to display the copywriting dashboard.
|
||||||
|
This function can be called from content_generator.py when the user selects "AI Copywriter".
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Define the copywriting formulas with their details
|
||||||
|
copywriting_formulas = [
|
||||||
|
{
|
||||||
|
"name": "Emotional Copywriter",
|
||||||
|
"icon": "🎭",
|
||||||
|
"description": "Create copy that resonates with your audience's emotions and drives action.",
|
||||||
|
"color": "#FF6B6B",
|
||||||
|
"module": "ai_emotional_copywriter",
|
||||||
|
"function": input_sections.get("ai_emotional_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ACCA Copywriter",
|
||||||
|
"icon": "🎯",
|
||||||
|
"description": "Use the ACCA (Attention, Context, Content, Action) framework to create compelling copy.",
|
||||||
|
"color": "#4ECDC4",
|
||||||
|
"module": "acca_copywriter",
|
||||||
|
"function": input_sections.get("acca_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "APP Copywriter",
|
||||||
|
"icon": "🤝",
|
||||||
|
"description": "Implement the APP (Agree, Promise, Preview) formula to create persuasive copy.",
|
||||||
|
"color": "#45B7D1",
|
||||||
|
"module": "app_copywriter",
|
||||||
|
"function": input_sections.get("app_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "STAR Copywriter",
|
||||||
|
"icon": "⭐",
|
||||||
|
"description": "Use the STAR (Situation, Task, Action, Result) framework to tell compelling stories.",
|
||||||
|
"color": "#FFD166",
|
||||||
|
"module": "star_copywriter",
|
||||||
|
"function": input_sections.get("star_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "OATH Copywriter",
|
||||||
|
"icon": "📜",
|
||||||
|
"description": "Apply the OATH (Oblivious, Apathetic, Thinking, Hurting) framework to target specific audience mindsets.",
|
||||||
|
"color": "#06D6A0",
|
||||||
|
"module": "oath_copywriter",
|
||||||
|
"function": input_sections.get("oath_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "QUEST Copywriter",
|
||||||
|
"icon": "🔍",
|
||||||
|
"description": "Use the QUEST (Question, Unpack, Emphasize, Solution, Transform) framework for narrative-driven copy.",
|
||||||
|
"color": "#118AB2",
|
||||||
|
"module": "quest_copywriter",
|
||||||
|
"function": input_sections.get("quest_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AIDPPC Copywriter",
|
||||||
|
"icon": "💰",
|
||||||
|
"description": "Implement the AIDPPC (Attention, Interest, Desire, Proof, Persuasion, Call to Action) framework for PPC ads.",
|
||||||
|
"color": "#073B4C",
|
||||||
|
"module": "aidppc_copywriter",
|
||||||
|
"function": input_sections.get("aidppc_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AIDA Copywriter",
|
||||||
|
"icon": "🎬",
|
||||||
|
"description": "Use the AIDA (Attention, Interest, Desire, Action) framework to guide customers through the sales funnel.",
|
||||||
|
"color": "#EF476F",
|
||||||
|
"module": "aida_copywriter",
|
||||||
|
"function": input_sections.get("aida_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "PAS Copywriter",
|
||||||
|
"icon": "🔧",
|
||||||
|
"description": "Apply the PAS (Problem, Agitate, Solution) formula to address pain points and offer solutions.",
|
||||||
|
"color": "#7209B7",
|
||||||
|
"module": "pas_copywriter",
|
||||||
|
"function": input_sections.get("pas_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FAB Copywriter",
|
||||||
|
"icon": "💎",
|
||||||
|
"description": "Use the FAB (Features, Advantages, Benefits) framework to highlight product value.",
|
||||||
|
"color": "#3A0CA3",
|
||||||
|
"module": "fab_copywriter",
|
||||||
|
"function": input_sections.get("fab_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "4C Copywriter",
|
||||||
|
"icon": "📝",
|
||||||
|
"description": "Implement the 4C (Clear, Concise, Credible, Compelling) framework for effective messaging.",
|
||||||
|
"color": "#4361EE",
|
||||||
|
"module": "four_c_copywriter",
|
||||||
|
"function": input_sections.get("four_c_copywriter")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "4R Copywriter",
|
||||||
|
"icon": "🔄",
|
||||||
|
"description": "Use the 4R (Relevance, Resonance, Response, Results) framework to connect with your audience.",
|
||||||
|
"color": "#F72585",
|
||||||
|
"module": "four_r_copywriter",
|
||||||
|
"function": input_sections.get("four_r_copywriter")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
# Create a container for the dashboard
|
||||||
|
dashboard_container = st.container()
|
||||||
|
|
||||||
|
# Create a container for the formula input section
|
||||||
|
formula_container = st.container()
|
||||||
|
|
||||||
|
# Initialize session state for selected formula if it doesn't exist
|
||||||
|
if "selected_formula" not in st.session_state:
|
||||||
|
st.session_state.selected_formula = None
|
||||||
|
|
||||||
|
# If a formula is selected, show its input section
|
||||||
|
if st.session_state.selected_formula is not None:
|
||||||
|
with formula_container:
|
||||||
|
# Display the selected formula's input section
|
||||||
|
st.markdown("---")
|
||||||
|
st.markdown(f"# {st.session_state.selected_formula['icon']} {st.session_state.selected_formula['name']}")
|
||||||
|
|
||||||
|
# Add a back button
|
||||||
|
if st.button("← Back to Dashboard", key="back_to_dashboard"):
|
||||||
|
# Clear the selected formula from session state
|
||||||
|
st.session_state.selected_formula = None
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
|
# Call the input section function for the selected formula
|
||||||
|
if st.session_state.selected_formula["function"]:
|
||||||
|
st.session_state.selected_formula["function"]()
|
||||||
|
else:
|
||||||
|
st.error(f"The {st.session_state.selected_formula['name']} module is not available.")
|
||||||
|
else:
|
||||||
|
with dashboard_container:
|
||||||
|
# Display the dashboard
|
||||||
|
# Header
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h1 style='color: #1E88E5; text-align: center;'>✍️ AI Copywriting Tools</h1>
|
||||||
|
<p style='text-align: center;'>Choose the perfect copywriting formula for your marketing needs</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
st.markdown("""
|
||||||
|
## Welcome to the AI Copywriting Suite
|
||||||
|
|
||||||
|
This dashboard provides access to a variety of copywriting formulas, each designed for specific marketing needs.
|
||||||
|
Select a formula below to get started with creating compelling copy for your brand.
|
||||||
|
|
||||||
|
### How to Use This Dashboard
|
||||||
|
|
||||||
|
1. Browse the available copywriting formulas below
|
||||||
|
2. Click on a formula card to access its specific tool
|
||||||
|
3. Fill in the required information
|
||||||
|
4. Generate high-quality copy tailored to your needs
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Create a 3-column layout for the formula cards
|
||||||
|
col1, col2, col3 = st.columns(3)
|
||||||
|
|
||||||
|
# Display the formula cards
|
||||||
|
for i, formula in enumerate(copywriting_formulas):
|
||||||
|
# Skip formulas that don't have a function
|
||||||
|
if formula["function"] is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Determine which column to use
|
||||||
|
col = col1 if i % 3 == 0 else col2 if i % 3 == 1 else col3
|
||||||
|
|
||||||
|
with col:
|
||||||
|
# Create a card for each formula
|
||||||
|
st.markdown(f"""
|
||||||
|
<div style='background-color: {formula["color"]}; padding: 20px; border-radius: 10px; margin-bottom: 20px; color: white;'>
|
||||||
|
<h2 style='color: white;'>{formula["icon"]} {formula["name"]}</h2>
|
||||||
|
<p>{formula["description"]}</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add a button to access the formula
|
||||||
|
if st.button(f"Use {formula['name']}", key=f"btn_{i}"):
|
||||||
|
# Store the selected formula in session state
|
||||||
|
st.session_state.selected_formula = formula
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
|
# For standalone execution
|
||||||
|
if __name__ == "__main__":
|
||||||
|
st.set_page_config(
|
||||||
|
page_title="AI Copywriting Tools",
|
||||||
|
page_icon="✍️",
|
||||||
|
layout="wide",
|
||||||
|
initial_sidebar_state="expanded"
|
||||||
|
)
|
||||||
|
copywriter_dashboard()
|
||||||
212
lib/ai_writers/ai_copywriter/fab_copywriter.py
Normal file
212
lib/ai_writers/ai_copywriter/fab_copywriter.py
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 FAB Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the FAB (Features-Advantages-Benefits) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about FAB copywriting
|
||||||
|
with st.expander("📚 What is FAB Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the FAB Copywriting Framework
|
||||||
|
|
||||||
|
FAB is an acronym for Features-Advantages-Benefits. It's a powerful copywriting framework that focuses on translating product features into customer benefits:
|
||||||
|
|
||||||
|
- **Features**: The specific characteristics, attributes, or capabilities of your product or service
|
||||||
|
- **Advantages**: How these features compare to or outperform competitors
|
||||||
|
- **Benefits**: The positive outcomes or results that customers will experience when using your product or service
|
||||||
|
|
||||||
|
### Why FAB Copywriting Works
|
||||||
|
|
||||||
|
The FAB framework works because it:
|
||||||
|
|
||||||
|
- Focuses on customer value rather than just product specifications
|
||||||
|
- Translates technical features into meaningful benefits
|
||||||
|
- Addresses the "what's in it for me" question that customers ask
|
||||||
|
- Creates a clear connection between product capabilities and customer outcomes
|
||||||
|
- Helps customers understand why they should choose your product over alternatives
|
||||||
|
|
||||||
|
### When to Use FAB Copywriting
|
||||||
|
|
||||||
|
The FAB framework is particularly effective for:
|
||||||
|
|
||||||
|
- Product descriptions and specifications
|
||||||
|
- Technical products with complex features
|
||||||
|
- Comparison marketing
|
||||||
|
- B2B marketing where features matter
|
||||||
|
- Content that needs to explain product capabilities
|
||||||
|
- Marketing materials that need to address feature-based objections
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your FAB Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
product_name = st.text_input('**🏢 Product/Service Name**',
|
||||||
|
placeholder="e.g., Alwrity AI Writer",
|
||||||
|
help="Enter the name of your product or service.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Content marketers",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
features = st.text_area('**🔧 Features**',
|
||||||
|
placeholder="e.g., AI-powered content generation, Multiple copywriting frameworks, SEO optimization",
|
||||||
|
help="List the specific characteristics, attributes, or capabilities of your product or service.")
|
||||||
|
|
||||||
|
advantages = st.text_area('**💪 Advantages**',
|
||||||
|
placeholder="e.g., 10x faster than manual writing, Supports 12+ copywriting frameworks, Built-in SEO analysis",
|
||||||
|
help="How do these features compare to or outperform competitors?")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
product_description = st.text_input('**📝 Product Description** (In 5-6 words)',
|
||||||
|
placeholder="e.g., AI writing assistant",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., All-in-one AI copywriting platform",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
benefits = st.text_area('**✨ Benefits**',
|
||||||
|
placeholder="e.g., Save 20+ hours per week on content creation, Increase conversion rates by 35%, Improve SEO rankings",
|
||||||
|
help="What positive outcomes or results will customers experience when using your product or service?")
|
||||||
|
|
||||||
|
call_to_action = st.text_area('**🚀 Call to Action**',
|
||||||
|
placeholder="e.g., Start creating high-converting content today with our 14-day free trial...",
|
||||||
|
help="Prompt your audience to take action with a strong call to action.")
|
||||||
|
|
||||||
|
landing_page_url = st.text_input('**🌐 Landing Page URL** (Optional)',
|
||||||
|
placeholder="e.g., https://alwrity.com",
|
||||||
|
help="Provide a URL to include in your call to action.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
with col1:
|
||||||
|
platform = st.selectbox(
|
||||||
|
'**📱 Content Platform**',
|
||||||
|
options=['Social media copy', 'Email copy', 'Website copy', 'Ad copy', 'Product copy'],
|
||||||
|
help="Select the platform where your copy will be used."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
language = st.selectbox(
|
||||||
|
'**🌍 Language**',
|
||||||
|
options=['English', 'Hindustani', 'Chinese', 'Hindi', 'Spanish'],
|
||||||
|
help="Select the language for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate FAB Copy**', type="primary"):
|
||||||
|
if not product_name or not product_description or not features or not advantages or not benefits:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Product Name, Description, Features, Advantages, and Benefits)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling FAB copy..."):
|
||||||
|
fab_copy = generate_fab_copy(
|
||||||
|
product_name,
|
||||||
|
product_description,
|
||||||
|
features,
|
||||||
|
advantages,
|
||||||
|
benefits,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
call_to_action,
|
||||||
|
landing_page_url,
|
||||||
|
platform,
|
||||||
|
language,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if fab_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your FAB Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(fab_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your FAB Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your FAB Copy Effectively
|
||||||
|
|
||||||
|
1. **Follow the sequence**: The FAB framework creates a natural progression - make sure your copy maintains this flow
|
||||||
|
|
||||||
|
2. **Balance features and benefits**: While benefits are most important, don't neglect features for technical audiences
|
||||||
|
|
||||||
|
3. **Be specific**: Use concrete numbers, statistics, and examples to make your advantages and benefits more compelling
|
||||||
|
|
||||||
|
4. **Pair with visuals**: Combine your copy with images that showcase your product features and the resulting benefits
|
||||||
|
|
||||||
|
5. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
6. **Measure results**: Track conversion metrics to see how your FAB copy performs
|
||||||
|
|
||||||
|
7. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate FAB Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_fab_copy(product_name, product_description, features, advantages, benefits,
|
||||||
|
target_audience, unique_selling_point, call_to_action,
|
||||||
|
landing_page_url, platform, language, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the FAB (Features-Advantages-Benefits) framework.
|
||||||
|
Your expertise is in creating compelling, conversion-focused marketing copy that translates product features into meaningful customer benefits.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {product_name}, which is a {product_description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
PLATFORM: {platform}
|
||||||
|
LANGUAGE: {language}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the FAB framework with these elements:
|
||||||
|
- **Features**: {features}
|
||||||
|
- **Advantages**: {advantages}
|
||||||
|
- **Benefits**: {benefits}
|
||||||
|
- **Call to Action**: {call_to_action}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if landing_page_url:
|
||||||
|
prompt += f"\nInclude the landing page URL ({landing_page_url}) in your call to action."
|
||||||
|
|
||||||
|
prompt += """
|
||||||
|
For each campaign:
|
||||||
|
1. Start by highlighting the key features of the product or service
|
||||||
|
2. Explain the advantages these features provide compared to alternatives
|
||||||
|
3. Connect these advantages to specific benefits that customers will experience
|
||||||
|
4. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
186
lib/ai_writers/ai_copywriter/oath_copywriter.py
Normal file
186
lib/ai_writers/ai_copywriter/oath_copywriter.py
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>📋 OATH Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that addresses different audience mindsets using the OATH (Oblivious-Apathetic-Thinking-Hurting) framework.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about OATH copywriting
|
||||||
|
with st.expander("📚 What is OATH Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the OATH Copywriting Framework
|
||||||
|
|
||||||
|
The OATH framework is a powerful copywriting approach that recognizes different audience mindsets:
|
||||||
|
|
||||||
|
- **Oblivious**: People who don't know they have a problem or need
|
||||||
|
- **Apathetic**: People who know about the problem but don't care enough to act
|
||||||
|
- **Thinking**: People who are actively considering solutions
|
||||||
|
- **Hurting**: People who are experiencing pain and urgently need a solution
|
||||||
|
|
||||||
|
### Why OATH Copywriting Works
|
||||||
|
|
||||||
|
The OATH framework works because it:
|
||||||
|
|
||||||
|
- Addresses the full spectrum of audience awareness
|
||||||
|
- Creates targeted messaging for each mindset
|
||||||
|
- Increases conversion rates by meeting people where they are
|
||||||
|
- Helps you craft the right message for the right audience
|
||||||
|
- Allows for more personalized and effective marketing campaigns
|
||||||
|
|
||||||
|
### When to Use OATH Copywriting
|
||||||
|
|
||||||
|
The OATH framework is particularly effective for:
|
||||||
|
|
||||||
|
- New product launches
|
||||||
|
- Educational content
|
||||||
|
- Problem-solution marketing
|
||||||
|
- Awareness campaigns
|
||||||
|
- Multi-channel marketing strategies
|
||||||
|
- Content that needs to address different audience segments
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your OATH Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
oblivious = st.text_area('**🔍 Oblivious Audience**',
|
||||||
|
placeholder="People who don't know they have this problem...",
|
||||||
|
help="Describe the audience who doesn't know they have a problem or need your solution.")
|
||||||
|
|
||||||
|
apathetic = st.text_area('**😐 Apathetic Audience**',
|
||||||
|
placeholder="People who know about the problem but don't care enough to act...",
|
||||||
|
help="Describe the audience who knows about the problem but isn't motivated to solve it.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
thinking = st.text_area('**🤔 Thinking Audience**',
|
||||||
|
placeholder="People who are actively considering solutions...",
|
||||||
|
help="Describe the audience who is actively researching solutions to their problem.")
|
||||||
|
|
||||||
|
hurting = st.text_area('**😫 Hurting Audience**',
|
||||||
|
placeholder="People who are experiencing pain and urgently need a solution...",
|
||||||
|
help="Describe the audience who is experiencing significant pain and urgently needs a solution.")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate OATH Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not oblivious or not apathetic or not thinking or not hurting:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, and all audience segments)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling OATH copy..."):
|
||||||
|
oath_copy = generate_oath_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
oblivious,
|
||||||
|
apathetic,
|
||||||
|
thinking,
|
||||||
|
hurting,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if oath_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>📋 Your OATH Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(oath_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy - using a container instead of an expander
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f9f9f9; padding: 15px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #333;'>💡 Tips for Using Your OATH Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your OATH Copy Effectively
|
||||||
|
|
||||||
|
1. **Target the right audience**: Use the appropriate OATH segment copy based on your target audience's current mindset
|
||||||
|
|
||||||
|
2. **Create a journey**: Consider how to move audiences from one mindset to another (e.g., from Oblivious to Thinking)
|
||||||
|
|
||||||
|
3. **Test different versions**: A/B test your copy to see which OATH segment resonates most with your audience
|
||||||
|
|
||||||
|
4. **Pair with visuals**: Combine your copy with images that reinforce the message for each audience segment
|
||||||
|
|
||||||
|
5. **Measure results**: Track engagement metrics to see how your OATH copy performs across different audience segments
|
||||||
|
|
||||||
|
6. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate OATH Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_oath_copy(brand_name, description, oblivious, apathetic, thinking, hurting,
|
||||||
|
target_audience, unique_selling_point, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the OATH (Oblivious-Apathetic-Thinking-Hurting) framework.
|
||||||
|
Your expertise is in creating compelling, targeted marketing copy that addresses different audience mindsets and awareness levels.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on meeting audiences where they are in their journey."""
|
||||||
|
|
||||||
|
prompt = f"""Create 4 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the OATH framework with these audience segments:
|
||||||
|
- **Oblivious**: {oblivious}
|
||||||
|
- **Apathetic**: {apathetic}
|
||||||
|
- **Thinking**: {thinking}
|
||||||
|
- **Hurting**: {hurting}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Create a compelling headline that captures attention
|
||||||
|
2. Write 2-3 paragraphs that address the specific audience mindset
|
||||||
|
3. End with a strong call to action
|
||||||
|
4. Explain how the copy is tailored to that specific audience mindset
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
213
lib/ai_writers/ai_copywriter/pas_copywriter.py
Normal file
213
lib/ai_writers/ai_copywriter/pas_copywriter.py
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🎯 PAS Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that follows the PAS (Problem-Agitate-Solution) framework to drive conversions.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about PAS copywriting
|
||||||
|
with st.expander("📚 What is PAS Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the PAS Copywriting Framework
|
||||||
|
|
||||||
|
PAS is an acronym for Problem-Agitate-Solution. It's a powerful copywriting framework that focuses on identifying and solving customer pain points:
|
||||||
|
|
||||||
|
- **Problem**: Identifying a specific problem or pain point that your target audience faces
|
||||||
|
- **Agitate**: Amplifying the problem by highlighting its negative consequences and emotional impact
|
||||||
|
- **Solution**: Presenting your product or service as the ideal solution to the problem
|
||||||
|
|
||||||
|
### Why PAS Copywriting Works
|
||||||
|
|
||||||
|
The PAS framework works because it:
|
||||||
|
|
||||||
|
- Addresses real customer pain points and needs
|
||||||
|
- Creates emotional resonance by highlighting the consequences of inaction
|
||||||
|
- Positions your product/service as the hero that solves the problem
|
||||||
|
- Follows a natural problem-solving narrative that readers can relate to
|
||||||
|
- Focuses on the customer's journey rather than just product features
|
||||||
|
|
||||||
|
### When to Use PAS Copywriting
|
||||||
|
|
||||||
|
The PAS framework is particularly effective for:
|
||||||
|
|
||||||
|
- Products or services that solve specific problems
|
||||||
|
- Marketing to audiences with clear pain points
|
||||||
|
- Content that needs to drive specific actions
|
||||||
|
- Landing pages and sales pages
|
||||||
|
- Email marketing campaigns
|
||||||
|
- Direct response advertising
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your PAS Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
problem = st.text_area('**❌ Problem**',
|
||||||
|
placeholder="e.g., Struggling to create high-quality content that converts",
|
||||||
|
help="Identify a specific problem or pain point that your target audience faces.")
|
||||||
|
|
||||||
|
agitate = st.text_area('**😫 Agitate**',
|
||||||
|
placeholder="e.g., Without effective content, you're losing potential customers and revenue every day...",
|
||||||
|
help="Amplify the problem by highlighting its negative consequences and emotional impact.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 5-6 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
solution = st.text_area('**✨ Solution**',
|
||||||
|
placeholder="e.g., Our AI-powered platform creates high-converting content in minutes...",
|
||||||
|
help="Present your product or service as the ideal solution to the problem.")
|
||||||
|
|
||||||
|
call_to_action = st.text_area('**🚀 Call to Action**',
|
||||||
|
placeholder="e.g., Start creating converting content today with our 14-day free trial...",
|
||||||
|
help="Prompt your audience to take action with a strong call to action.")
|
||||||
|
|
||||||
|
landing_page_url = st.text_input('**🌐 Landing Page URL** (Optional)',
|
||||||
|
placeholder="e.g., https://alwrity.com",
|
||||||
|
help="Provide a URL to include in your call to action.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
with col1:
|
||||||
|
platform = st.selectbox(
|
||||||
|
'**📱 Content Platform**',
|
||||||
|
options=['Social media copy', 'Email copy', 'Website copy', 'Ad copy', 'Product copy'],
|
||||||
|
help="Select the platform where your copy will be used."
|
||||||
|
)
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
language = st.selectbox(
|
||||||
|
'**🌍 Language**',
|
||||||
|
options=['English', 'Hindustani', 'Chinese', 'Hindi', 'Spanish'],
|
||||||
|
help="Select the language for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate PAS Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not problem or not agitate or not solution:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Problem, Agitate, and Solution)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling PAS copy..."):
|
||||||
|
pas_copy = generate_pas_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
problem,
|
||||||
|
agitate,
|
||||||
|
solution,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
call_to_action,
|
||||||
|
landing_page_url,
|
||||||
|
platform,
|
||||||
|
language,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if pas_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🎯 Your PAS Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(pas_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your PAS Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your PAS Copy Effectively
|
||||||
|
|
||||||
|
1. **Follow the sequence**: The PAS framework creates a natural progression - make sure your copy maintains this flow
|
||||||
|
|
||||||
|
2. **Be specific about the problem**: The more specific and relatable the problem, the more effective your copy will be
|
||||||
|
|
||||||
|
3. **Balance agitation**: Don't over-agitate to the point of creating anxiety; find the right balance to motivate action
|
||||||
|
|
||||||
|
4. **Pair with visuals**: Combine your copy with images that reinforce each stage of the PAS journey
|
||||||
|
|
||||||
|
5. **Consider the context**: Adapt the copy based on where it will appear (landing page, email, social media, etc.)
|
||||||
|
|
||||||
|
6. **Measure results**: Track conversion metrics to see how your PAS copy performs
|
||||||
|
|
||||||
|
7. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate PAS Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_pas_copy(brand_name, description, problem, agitate, solution,
|
||||||
|
target_audience, unique_selling_point, call_to_action,
|
||||||
|
landing_page_url, platform, language, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the PAS (Problem-Agitate-Solution) framework.
|
||||||
|
Your expertise is in creating compelling, conversion-focused marketing copy that identifies customer pain points,
|
||||||
|
amplifies their impact, and positions your product or service as the ideal solution.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on driving measurable results."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
PLATFORM: {platform}
|
||||||
|
LANGUAGE: {language}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the PAS framework with these elements:
|
||||||
|
- **Problem**: {problem}
|
||||||
|
- **Agitate**: {agitate}
|
||||||
|
- **Solution**: {solution}
|
||||||
|
- **Call to Action**: {call_to_action}
|
||||||
|
"""
|
||||||
|
|
||||||
|
if landing_page_url:
|
||||||
|
prompt += f"\nInclude the landing page URL ({landing_page_url}) in your call to action."
|
||||||
|
|
||||||
|
prompt += """
|
||||||
|
For each campaign:
|
||||||
|
1. Start by identifying the specific problem or pain point
|
||||||
|
2. Amplify the problem by highlighting its negative consequences and emotional impact
|
||||||
|
3. Present your product or service as the ideal solution to the problem
|
||||||
|
4. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
191
lib/ai_writers/ai_copywriter/quest_copywriter.py
Normal file
191
lib/ai_writers/ai_copywriter/quest_copywriter.py
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
from tenacity import retry, wait_random_exponential, stop_after_attempt
|
||||||
|
|
||||||
|
def title_and_description():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>🔍 QUEST Copywriting Generator</h2>
|
||||||
|
<p>Create compelling copy that guides your audience through a journey using the QUEST (Question-Unpack-Emphasize-Solution-Transform) framework.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about QUEST copywriting
|
||||||
|
with st.expander("📚 What is QUEST Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the QUEST Copywriting Framework
|
||||||
|
|
||||||
|
QUEST is an acronym for Question-Unpack-Emphasize-Solution-Transform. It's a copywriting framework that focuses on guiding the audience through different stages:
|
||||||
|
|
||||||
|
- **Question**: Presenting a thought-provoking question to engage the audience
|
||||||
|
- **Unpack**: Unpacking the question by elaborating on its implications and relevance
|
||||||
|
- **Emphasize**: Emphasizing the importance or significance of the topic
|
||||||
|
- **Solution**: Presenting your product or service as the solution to the question
|
||||||
|
- **Transform**: Describing the transformation or improvement your solution offers
|
||||||
|
|
||||||
|
### Why QUEST Copywriting Works
|
||||||
|
|
||||||
|
The QUEST framework works because it:
|
||||||
|
|
||||||
|
- Creates a natural flow that guides readers through a journey
|
||||||
|
- Engages readers by starting with a question they care about
|
||||||
|
- Builds credibility by showing deep understanding of the problem
|
||||||
|
- Demonstrates value by clearly connecting the solution to the problem
|
||||||
|
- Inspires action by showing the transformation that's possible
|
||||||
|
|
||||||
|
### When to Use QUEST Copywriting
|
||||||
|
|
||||||
|
The QUEST framework is particularly effective for:
|
||||||
|
|
||||||
|
- Educational content and blog posts
|
||||||
|
- Product launches and feature announcements
|
||||||
|
- Problem-solution marketing
|
||||||
|
- Thought leadership content
|
||||||
|
- Content that needs to guide readers through a journey
|
||||||
|
- Marketing materials that need to explain complex solutions
|
||||||
|
""")
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your QUEST Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
question = st.text_area('**❓ Thought-Provoking Question**',
|
||||||
|
placeholder="e.g., What if you could create content 10x faster without sacrificing quality?",
|
||||||
|
help="Pose a question that resonates with your audience and highlights a problem they face.")
|
||||||
|
|
||||||
|
unpack = st.text_area('**📦 Unpack the Question**',
|
||||||
|
placeholder="e.g., Content creation is time-consuming and often results in inconsistent quality...",
|
||||||
|
help="Elaborate on the implications of the question and provide context that your audience can relate to.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
emphasize = st.text_area('**💪 Emphasize Importance**',
|
||||||
|
placeholder="e.g., In today's fast-paced digital world, efficient content creation is essential for business growth...",
|
||||||
|
help="Highlight the relevance and impact of addressing this problem.")
|
||||||
|
|
||||||
|
solution = st.text_area('**🔧 Present Your Solution**',
|
||||||
|
placeholder="e.g., Our AI-powered writing assistant helps you create high-quality content in a fraction of the time...",
|
||||||
|
help="Introduce your product or service as the solution to the question.")
|
||||||
|
|
||||||
|
transform = st.text_area('**✨ Describe the Transformation**',
|
||||||
|
placeholder="e.g., Imagine having more time to focus on strategy while maintaining consistent, high-quality content...",
|
||||||
|
help="Describe the transformation or improvement your solution offers to your audience.")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate QUEST Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not question or not unpack or not emphasize or not solution or not transform:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, and all QUEST elements)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling QUEST copy..."):
|
||||||
|
quest_copy = generate_quest_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
question,
|
||||||
|
unpack,
|
||||||
|
emphasize,
|
||||||
|
solution,
|
||||||
|
transform,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if quest_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>🔍 Your QUEST Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(quest_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy
|
||||||
|
with st.expander("💡 Tips for Using Your QUEST Copy", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your QUEST Copy Effectively
|
||||||
|
|
||||||
|
1. **Follow the journey**: The QUEST framework creates a natural flow - make sure your copy maintains this progression
|
||||||
|
|
||||||
|
2. **Test different questions**: A/B test different opening questions to see which resonates most with your audience
|
||||||
|
|
||||||
|
3. **Pair with visuals**: Combine your copy with images that reinforce each stage of the QUEST journey
|
||||||
|
|
||||||
|
4. **Consider the context**: Adapt the copy based on where it will appear (blog post, landing page, email, etc.)
|
||||||
|
|
||||||
|
5. **Measure results**: Track engagement metrics to see how your QUEST copy performs
|
||||||
|
|
||||||
|
6. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate QUEST Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
|
||||||
|
def generate_quest_copy(brand_name, description, question, unpack, emphasize, solution, transform,
|
||||||
|
target_audience, unique_selling_point, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the QUEST (Question-Unpack-Emphasize-Solution-Transform) framework.
|
||||||
|
Your expertise is in creating compelling, narrative-driven marketing copy that guides readers through a journey.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on connecting with the audience's needs and desires."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the QUEST framework with these elements:
|
||||||
|
- **Question**: {question}
|
||||||
|
- **Unpack**: {unpack}
|
||||||
|
- **Emphasize**: {emphasize}
|
||||||
|
- **Solution**: {solution}
|
||||||
|
- **Transform**: {transform}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Start with the thought-provoking question to engage the audience
|
||||||
|
2. Unpack the question by elaborating on its implications
|
||||||
|
3. Emphasize the importance of addressing this issue
|
||||||
|
4. Present your solution clearly and convincingly
|
||||||
|
5. Describe the transformation that your solution offers
|
||||||
|
6. End with a strong call to action
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
182
lib/ai_writers/ai_copywriter/star_copywriter.py
Normal file
182
lib/ai_writers/ai_copywriter/star_copywriter.py
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
import streamlit as st
|
||||||
|
from lib.gpt_providers.text_generation.main_text_generation import llm_text_gen
|
||||||
|
|
||||||
|
def input_section():
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f0f2f6; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
|
||||||
|
<h2 style='color: #1E88E5;'>⭐ STAR Copywriting Generator</h2>
|
||||||
|
<p>Create compelling marketing copy using the proven STAR (Situation-Task-Action-Result) framework.</p>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Educational content about STAR copywriting
|
||||||
|
with st.expander("📚 What is STAR Copywriting?", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
### Understanding the STAR Copywriting Framework
|
||||||
|
|
||||||
|
The STAR framework is a powerful storytelling structure that creates compelling narratives:
|
||||||
|
|
||||||
|
- **Situation**: Set the context and background for the problem or need
|
||||||
|
- **Task**: Describe the specific challenge or objective that needs to be addressed
|
||||||
|
- **Action**: Explain the specific actions taken to address the challenge
|
||||||
|
- **Result**: Highlight the positive outcomes and benefits achieved
|
||||||
|
|
||||||
|
### Why STAR Copywriting Works
|
||||||
|
|
||||||
|
The STAR framework works because it:
|
||||||
|
|
||||||
|
- Creates a complete narrative arc that engages readers
|
||||||
|
- Demonstrates problem-solving capabilities
|
||||||
|
- Shows concrete results and benefits
|
||||||
|
- Builds credibility through specific examples
|
||||||
|
- Makes abstract benefits tangible through storytelling
|
||||||
|
|
||||||
|
### When to Use STAR Copywriting
|
||||||
|
|
||||||
|
The STAR framework is particularly effective for:
|
||||||
|
|
||||||
|
- Case studies and success stories
|
||||||
|
- Product or service demonstrations
|
||||||
|
- Customer testimonials
|
||||||
|
- Company achievements and milestones
|
||||||
|
- Problem-solution marketing
|
||||||
|
- Portfolio showcases
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Main input form
|
||||||
|
with st.expander("✍️ Create Your STAR Copy", expanded=True):
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
brand_name = st.text_input('**🏢 Brand/Company Name**',
|
||||||
|
placeholder="e.g., Alwrity",
|
||||||
|
help="Enter the name of your brand or company.")
|
||||||
|
|
||||||
|
target_audience = st.text_input('**👥 Target Audience**',
|
||||||
|
placeholder="e.g., Small business owners, Tech professionals",
|
||||||
|
help="Who is your ideal customer? Be specific about demographics and psychographics.")
|
||||||
|
|
||||||
|
situation = st.text_area('**🌍 Situation (Context)**',
|
||||||
|
placeholder="In a busy city, Late Delivery, Unsafe Activities, Unprofessional Service..",
|
||||||
|
help="Describe the background context or problem that needs to be addressed.")
|
||||||
|
|
||||||
|
action = st.text_area('**⚡ Action (Solution)**',
|
||||||
|
placeholder="New strategy, launched campaign, better service, New product...",
|
||||||
|
help="Describe the specific actions taken to address the challenge or objective.")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
description = st.text_input('**📝 Brand Description** (In 2-3 words)',
|
||||||
|
placeholder="e.g., AI writing tools",
|
||||||
|
help="Describe your product or service briefly.")
|
||||||
|
|
||||||
|
unique_selling_point = st.text_input('**💎 Unique Selling Point**',
|
||||||
|
placeholder="e.g., 10x faster content creation",
|
||||||
|
help="What makes your product/service different from competitors?")
|
||||||
|
|
||||||
|
task = st.text_area('**🎯 Task (Challenge)**',
|
||||||
|
placeholder="Increase website traffic by 30%, improve customer satisfaction, Safe Travels...",
|
||||||
|
help="Describe the specific challenge or objective that needs to be addressed.")
|
||||||
|
|
||||||
|
result = st.text_area('**✨ Result (Outcome)**',
|
||||||
|
placeholder="Improved customer engagement, sales revenue, Happy customers, Improved Service X...",
|
||||||
|
help="Highlight the positive outcomes and benefits achieved from the actions taken.")
|
||||||
|
|
||||||
|
tone_style = st.selectbox(
|
||||||
|
'**🎭 Copy Tone & Style**',
|
||||||
|
options=['Professional', 'Conversational', 'Humorous', 'Authoritative', 'Empathetic', 'Aspirational'],
|
||||||
|
help="Select the tone and style for your copy."
|
||||||
|
)
|
||||||
|
|
||||||
|
if st.button('**🚀 Generate STAR Copy**', type="primary"):
|
||||||
|
if not brand_name or not description or not situation or not task or not action or not result:
|
||||||
|
st.error("⚠️ Please fill in all required fields (Brand Name, Description, Situation, Task, Action, and Result)!")
|
||||||
|
else:
|
||||||
|
with st.spinner("✨ Crafting compelling STAR copy..."):
|
||||||
|
star_copy = generate_star_copy(
|
||||||
|
brand_name,
|
||||||
|
description,
|
||||||
|
situation,
|
||||||
|
task,
|
||||||
|
action,
|
||||||
|
result,
|
||||||
|
target_audience,
|
||||||
|
unique_selling_point,
|
||||||
|
tone_style
|
||||||
|
)
|
||||||
|
|
||||||
|
if star_copy:
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #e6f7ff; padding: 20px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #0066cc;'>⭐ Your STAR Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Display the copy with a nice format
|
||||||
|
st.markdown(star_copy)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
st.markdown("""
|
||||||
|
<div style='margin-top: 20px;'>
|
||||||
|
<button style='background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>
|
||||||
|
Copy to Clipboard
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
# Add tips for using the copy - using a container instead of an expander
|
||||||
|
st.markdown("""
|
||||||
|
<div style='background-color: #f9f9f9; padding: 15px; border-radius: 10px; margin-top: 20px;'>
|
||||||
|
<h3 style='color: #333;'>💡 Tips for Using Your STAR Copy</h3>
|
||||||
|
</div>
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
st.markdown("""
|
||||||
|
### How to Use Your STAR Copy Effectively
|
||||||
|
|
||||||
|
1. **Test different versions**: A/B test your copy to see which version resonates most with your audience
|
||||||
|
|
||||||
|
2. **Pair with visuals**: Combine your copy with images that illustrate each stage of the STAR framework
|
||||||
|
|
||||||
|
3. **Consider the platform**: Adapt your copy based on where it will appear (social media, email, website, etc.)
|
||||||
|
|
||||||
|
4. **Measure results**: Track engagement metrics to see how your STAR copy performs
|
||||||
|
|
||||||
|
5. **Refine over time**: Continuously improve your copy based on audience feedback and performance data
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
st.error("💥 **Failed to generate STAR Copy. Please try again!**")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_star_copy(brand_name, description, situation, task, action, result, target_audience,
|
||||||
|
unique_selling_point, tone_style):
|
||||||
|
system_prompt = """You are an expert copywriter specializing in the STAR (Situation-Task-Action-Result) framework.
|
||||||
|
Your expertise is in creating compelling, narrative-driven marketing copy that tells a complete story from problem to solution.
|
||||||
|
Your copy is authentic, specific to the brand, and focused on demonstrating concrete results and benefits."""
|
||||||
|
|
||||||
|
prompt = f"""Create 3 different marketing campaigns for {brand_name}, which is a {description}.
|
||||||
|
|
||||||
|
TARGET AUDIENCE: {target_audience}
|
||||||
|
UNIQUE SELLING POINT: {unique_selling_point}
|
||||||
|
TONE & STYLE: {tone_style}
|
||||||
|
|
||||||
|
Use the STAR framework with these elements:
|
||||||
|
- **Situation**: {situation}
|
||||||
|
- **Task**: {task}
|
||||||
|
- **Action**: {action}
|
||||||
|
- **Result**: {result}
|
||||||
|
|
||||||
|
For each campaign:
|
||||||
|
1. Create a compelling headline that captures attention
|
||||||
|
2. Write 2-3 paragraphs that follow the STAR framework
|
||||||
|
3. End with a strong call to action
|
||||||
|
4. Explain how each element of the STAR framework is used in the copy
|
||||||
|
|
||||||
|
Format each campaign clearly with "CAMPAIGN 1:", "CAMPAIGN 2:", etc. as headers.
|
||||||
|
Make the copy authentic, specific to the brand, and focused on the target audience's needs and desires.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return llm_text_gen(prompt, system_prompt=system_prompt)
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"Error generating copy: {str(e)}")
|
||||||
|
return None
|
||||||
@@ -19,11 +19,12 @@ from .deepseek_text_gen import deepseek_text_response
|
|||||||
from ...utils.read_main_config_params import read_return_config_section
|
from ...utils.read_main_config_params import read_return_config_section
|
||||||
|
|
||||||
|
|
||||||
def llm_text_gen(prompt):
|
def llm_text_gen(prompt, system_prompt=None):
|
||||||
"""
|
"""
|
||||||
Generate text using Language Model (LLM) based on the provided prompt.
|
Generate text using Language Model (LLM) based on the provided prompt.
|
||||||
Args:
|
Args:
|
||||||
prompt (str): The prompt to generate text from.
|
prompt (str): The prompt to generate text from.
|
||||||
|
system_prompt (str, optional): Custom system prompt to use instead of the default one.
|
||||||
Returns:
|
Returns:
|
||||||
str: Generated text based on the prompt.
|
str: Generated text based on the prompt.
|
||||||
"""
|
"""
|
||||||
@@ -43,27 +44,31 @@ def llm_text_gen(prompt):
|
|||||||
logger.error(f"[llm_text_gen] Error reading config params: {err}")
|
logger.error(f"[llm_text_gen] Error reading config params: {err}")
|
||||||
raise err
|
raise err
|
||||||
|
|
||||||
# Construct the system prompt with the sidebar config params.
|
# Construct the system prompt with the sidebar config params if no custom system_prompt is provided
|
||||||
system_instructions = f"""You are a highly skilled content writer with a knack for creating engaging and informative content.
|
if system_prompt is None:
|
||||||
Your expertise spans various writing styles and formats.
|
system_instructions = f"""You are a highly skilled content writer with a knack for creating engaging and informative content.
|
||||||
|
Your expertise spans various writing styles and formats.
|
||||||
|
|
||||||
Here's a breakdown of the instructions for this writing task:
|
Here's a breakdown of the instructions for this writing task:
|
||||||
|
|
||||||
**Content Guidelines:**
|
**Content Guidelines:**
|
||||||
|
|
||||||
1. **Language:** Your response must be in **{blog_language}** language.
|
1. **Language:** Your response must be in **{blog_language}** language.
|
||||||
2. **Tone and Brand Alignment:** Adjust your tone, voice, and personality to be appropriate for a **{blog_tone}** audience.
|
2. **Tone and Brand Alignment:** Adjust your tone, voice, and personality to be appropriate for a **{blog_tone}** audience.
|
||||||
3. **Content Length:** Ensure your response is approximately **{blog_length}** words in length.
|
3. **Content Length:** Ensure your response is approximately **{blog_length}** words in length.
|
||||||
4. **Blog Type:** The type of blog is **{blog_type}**. Write accordingly, adhering to the conventions and expectations of this type of content.
|
4. **Blog Type:** The type of blog is **{blog_type}**. Write accordingly, adhering to the conventions and expectations of this type of content.
|
||||||
5. **Target Audience:** The demographic for this content is **{blog_demographic}**. Keep their interests and needs in mind.
|
5. **Target Audience:** The demographic for this content is **{blog_demographic}**. Keep their interests and needs in mind.
|
||||||
6. **Output Format:** Your response should be in **{blog_output_format}** format. This could be Markdown, HTML, or a specific structured format, depending on the user's preference.
|
6. **Output Format:** Your response should be in **{blog_output_format}** format. This could be Markdown, HTML, or a specific structured format, depending on the user's preference.
|
||||||
|
|
||||||
**Additional Instructions:**
|
**Additional Instructions:**
|
||||||
|
|
||||||
* **SEO Optimization:** Incorporate relevant keywords naturally throughout the content to improve its search engine visibility.
|
* **SEO Optimization:** Incorporate relevant keywords naturally throughout the content to improve its search engine visibility.
|
||||||
* **Call to Action:** Include a call to action if appropriate for the blog type and target audience.
|
* **Call to Action:** Include a call to action if appropriate for the blog type and target audience.
|
||||||
* **Factual Accuracy:** Ensure your content is accurate and reliable. Back up any claims with credible sources.
|
* **Factual Accuracy:** Ensure your content is accurate and reliable. Back up any claims with credible sources.
|
||||||
* **Unique Voice and Style:** Inject your unique voice and writing style to make the content engaging and memorable. """
|
* **Unique Voice and Style:** Inject your unique voice and writing style to make the content engaging and memorable. """
|
||||||
|
else:
|
||||||
|
system_instructions = system_prompt
|
||||||
|
logger.info("[llm_text_gen] Using custom system prompt")
|
||||||
|
|
||||||
# Check if API key is provided for the given gpt_provider
|
# Check if API key is provided for the given gpt_provider
|
||||||
get_api_key(gpt_provider)
|
get_api_key(gpt_provider)
|
||||||
@@ -88,7 +93,7 @@ def llm_text_gen(prompt):
|
|||||||
elif 'anthropic' in gpt_provider.lower():
|
elif 'anthropic' in gpt_provider.lower():
|
||||||
try:
|
try:
|
||||||
logger.info(f"Using Anthropic Model: {model} for text Generation.")
|
logger.info(f"Using Anthropic Model: {model} for text Generation.")
|
||||||
response = anthropic_text_response(prompt)
|
response = anthropic_text_response(prompt, model, temperature, max_tokens, top_p, n, system_instructions)
|
||||||
return response
|
return response
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error(f"Failed to get response from Anthropic: {err}")
|
logger.error(f"Failed to get response from Anthropic: {err}")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from lib.alwrity_ui.similar_analysis import competitor_analysis
|
|||||||
from lib.alwrity_ui.keyword_web_researcher import do_web_research
|
from lib.alwrity_ui.keyword_web_researcher import do_web_research
|
||||||
from lib.ai_writers.ai_story_writer.story_writer import story_input_section
|
from lib.ai_writers.ai_story_writer.story_writer import story_input_section
|
||||||
from lib.ai_writers.ai_product_description_writer import write_ai_prod_desc
|
from lib.ai_writers.ai_product_description_writer import write_ai_prod_desc
|
||||||
|
from lib.ai_writers.ai_copywriter.copywriter_dashboard import copywriter_dashboard
|
||||||
#from lib.content_planning_calender.content_planning_agents_alwrity_crew import ai_agents_content_planner
|
#from lib.content_planning_calender.content_planning_agents_alwrity_crew import ai_agents_content_planner
|
||||||
|
|
||||||
|
|
||||||
@@ -35,8 +36,12 @@ def ai_writers():
|
|||||||
ai_finance_ta_writer()
|
ai_finance_ta_writer()
|
||||||
elif choice == "AI Product Description Writer":
|
elif choice == "AI Product Description Writer":
|
||||||
write_ai_prod_desc()
|
write_ai_prod_desc()
|
||||||
|
elif choice == "AI Copywriter":
|
||||||
|
# Initialize the copywriter dashboard
|
||||||
|
copywriter_dashboard()
|
||||||
elif choice == "Quit":
|
elif choice == "Quit":
|
||||||
st.subheader("Exiting, Getting Lost. But.... I have nowhere to go 🥹🥹")
|
st.info("Thank you for using Alwrity. Goodbye!")
|
||||||
|
st.stop()
|
||||||
|
|
||||||
|
|
||||||
def content_planning_tools():
|
def content_planning_tools():
|
||||||
|
|||||||
Reference in New Issue
Block a user