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
|
||||
|
||||
|
||||
def llm_text_gen(prompt):
|
||||
def llm_text_gen(prompt, system_prompt=None):
|
||||
"""
|
||||
Generate text using Language Model (LLM) based on the provided prompt.
|
||||
Args:
|
||||
prompt (str): The prompt to generate text from.
|
||||
system_prompt (str, optional): Custom system prompt to use instead of the default one.
|
||||
Returns:
|
||||
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}")
|
||||
raise err
|
||||
|
||||
# Construct the system prompt with the sidebar config params.
|
||||
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.
|
||||
# Construct the system prompt with the sidebar config params if no custom system_prompt is provided
|
||||
if system_prompt is None:
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
|
||||
**Additional Instructions:**
|
||||
**Additional Instructions:**
|
||||
|
||||
* **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.
|
||||
* **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. """
|
||||
* **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.
|
||||
* **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. """
|
||||
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
|
||||
get_api_key(gpt_provider)
|
||||
@@ -88,7 +93,7 @@ def llm_text_gen(prompt):
|
||||
elif 'anthropic' in gpt_provider.lower():
|
||||
try:
|
||||
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
|
||||
except Exception as 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.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_copywriter.copywriter_dashboard import copywriter_dashboard
|
||||
#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()
|
||||
elif choice == "AI Product Description Writer":
|
||||
write_ai_prod_desc()
|
||||
elif choice == "AI Copywriter":
|
||||
# Initialize the copywriter dashboard
|
||||
copywriter_dashboard()
|
||||
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():
|
||||
|
||||
Reference in New Issue
Block a user