Initial commit of Marketing Assistant AI project, including backend setup with FastAPI, brand style management, and marketing copy generation features. Added .gitignore, README, and various data files for brand voice, past campaigns, and book excerpts. Implemented vector store for content retrieval and embeddings using Cohere API. Included HTML template for user interface.

This commit is contained in:
boladeE
2025-04-17 22:24:53 +01:00
commit e80ba5c0d7
18 changed files with 840 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
.venv/
__pycache__/
+97
View File
@@ -0,0 +1,97 @@
# Marketing Assistant AI
## Project Overview
Marketing Assistant AI is an AI-powered tool designed to streamline the process of ideation, copywriting, and marketing campaign creation. It generates marketing content in line with the brand tone and voice of Adriana James, producing drafts that can be validated and refined by a human marketer.
## Objectives
* Reduce the time required to generate marketing copy.
* Create content for emails, campaigns, social media, website copy, funnel pages, and more.
* Ensure the AI produces copywriting that aligns with the brand tone and voice of Adriana James.
* Allow ongoing updates to improve the AIs performance and accuracy.
## Deliverables
* A custom-trained LLM fine-tuned for marketing and copywriting.
* Ability to generate copy in the same style and brand tone of Adriana James.
## Tech Stack
* **LLM** : Open-source or proprietary LLM fine-tuned for marketing.
* **Embeddings & Re-Ranking** : Cohere for embeddings and ranking results.
* **Backend** : FastAPI for API services.
* **Vector Database** : FAISS for content retrieval.
* **Storage** : Local storage for historical marketing data.
## File Structure
```
Marketing_Assistant_AI/
│-- backend/
│ │-- main.py # FastAPI backend
│ │-- copywriter.py # AI-powered copy generation module
│ │-- vector_store.py # Manages vector database operations
│ │-- embeddings.py # Generates embeddings using Cohere
│ │-- brand_style.py # Ensures brand tone consistency
│ │-- config.py # Configuration settings
│ │-- requirements.txt # Dependencies
│-- data/
│ │-- past_campaigns/ # Stores past marketing campaigns
│ │-- user_queries/ # Stores past user queries for AI training
│ │-- style_guidelines/ # Reference materials for brand tone
│-- docs/
│ │-- README.md # Documentation for new developers
│ │-- API_Documentation.md # API details
│-- .env # Environment variables
│-- .gitignore # Git ignore file
│-- LICENSE # License information
```
## Setup & Installation
### 1. Clone the Repository
```bash
git clone http://23.29.118.76:3000/Test/ds_task_marketing_assistant_ai
cd marketing-assistant-ai
```
### 2. Set Up the Backend
```bash
cd backend
pip install -r requirements.txt
python main.py
```
## AI Copywriting Process
1. **User Input** : The user submits a request (e.g., "Generate an email campaign for a product launch").
2. **Preprocessing** : The AI extracts key details and matches them with past marketing data.
3. **Generation** : The fine-tuned LLM creates a draft aligned with Adriana James' brand tone.
4. **Refinement** : The AI applies re-ranking to prioritize relevant content.
5. **Final Output** : The generated copy is displayed for user review and editing.
### Example API Usage
#### Generate Marketing Copy
```python
import requests
url = "http://localhost:8000/generate-copy"
data = {"prompt": "Write a social media post for our new product launch"}
response = requests.post(url, json=data)
print(response.json())
```
## Success Criteria
* AI generates copywriting that accurately reflects the brand tone.
* AI can be updated with new marketing materials.
* CRUD functionality to manage training data.
* AI adapts to new marketing trends and user queries.
+154
View File
@@ -0,0 +1,154 @@
import os
import json
from typing import List, Dict, Any
import numpy as np
from PyPDF2 import PdfReader
from embeddings import CohereEmbeddings
from vector_store import VectorStore
from config import settings
class BrandStyleManager:
def __init__(self):
self.settings = settings
self.embeddings = CohereEmbeddings()
self.vector_store = VectorStore()
self.brand_voice = self._load_brand_voice()
self.sample_campaigns = self._load_sample_campaigns()
def _load_brand_voice(self) -> Dict[str, Any]:
"""Load brand voice guidelines from JSON."""
file_path = "data/style_guidelines/brand_voice.json"
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
def _load_sample_campaigns(self) -> List[Dict[str, Any]]:
"""Load sample campaigns from JSON."""
file_path = "data/past_campaigns/sample_campaigns.json"
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data.get("campaigns", [])
return []
def _extract_text_from_pdf(self, pdf_path: str) -> str:
"""Extract text from a PDF file."""
text = ""
try:
reader = PdfReader(pdf_path)
for page in reader.pages:
page_text = page.extract_text()
if page_text:
text += page_text + "\n\n"
except Exception as e:
print(f"Error extracting text from PDF: {e}")
return text
def _load_book_excerpts(self):
"""Load and index book excerpts from PDF files in the data directory."""
book_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "data"))
all_texts = []
all_embeddings = []
# Look for PDF files in the data directory
for filename in os.listdir(book_dir):
if filename.endswith(".pdf"):
file_path = os.path.join(book_dir, filename)
print(f"Processing PDF file: {file_path}")
# Extract text from PDF
content = self._extract_text_from_pdf(file_path)
if not content:
print(f"No text extracted from {file_path}")
continue
# Split content into chunks (simple splitting by paragraphs)
chunks = [chunk.strip() for chunk in content.split('\n\n') if chunk.strip()]
# Generate embeddings for each chunk
for chunk in chunks:
if len(chunk) > 50: # Only process chunks with sufficient content
embedding = self.embeddings.generate_embedding(chunk)
all_texts.append(chunk)
all_embeddings.append(embedding)
# Add all content to the vector store
if all_texts and all_embeddings:
print(f"Adding {len(all_texts)} chunks to vector store")
self.vector_store.add_documents(all_texts, all_embeddings)
else:
print("No content found to add to vector store")
def get_relevant_context(self, prompt: str, k: int = 5) -> List[Dict]:
"""Get relevant context for a given prompt from book excerpts."""
# Generate embedding for the prompt
prompt_embedding = self.embeddings.generate_embedding(prompt)
# Search for similar content in book excerpts
results = self.vector_store.search(prompt_embedding, k=k)
# Optionally rerank results
if results:
texts = [result["text"] for result in results]
reranked = self.embeddings.rerank_results(prompt, texts, top_n=k)
# Convert reranked results to the expected format
return [{"text": text} for text in reranked]
# If no results, return empty list
return []
def get_brand_voice(self) -> Dict[str, Any]:
"""Get brand voice guidelines."""
return self.brand_voice
def get_sample_campaigns(self) -> List[Dict[str, Any]]:
"""Get sample campaigns."""
return self.sample_campaigns
def update_book_excerpt(self, pdf_path: str):
"""Add new book excerpt from PDF to the vector store."""
if not os.path.exists(pdf_path):
raise FileNotFoundError(f"PDF file not found: {pdf_path}")
# Extract text from PDF
content = self._extract_text_from_pdf(pdf_path)
if not content:
raise ValueError(f"No text extracted from PDF: {pdf_path}")
# Split content into chunks
chunks = [chunk.strip() for chunk in content.split('\n\n') if chunk.strip()]
# Generate embeddings for each chunk
all_texts = []
all_embeddings = []
for chunk in chunks:
if len(chunk) > 50: # Only process chunks with sufficient content
embedding = self.embeddings.generate_embedding(chunk)
all_texts.append(chunk)
all_embeddings.append(embedding)
# Add to vector store
if all_texts and all_embeddings:
self.vector_store.add_documents(all_texts, all_embeddings)
print(f"Added {len(all_texts)} chunks from {pdf_path} to vector store")
else:
print(f"No content extracted from {pdf_path}")
# # Example usage
# if __name__ == "__main__":
# brand_style_manager = BrandStyleManager()
# # Example: Get relevant context for a marketing prompt
# prompt = "Generate a marketing campaign for an Umbrella company"
# context = brand_style_manager.get_relevant_context(prompt)
# # Print the context in a readable format
# print(f"Relevant context for prompt: '{prompt}'")
# for i, item in enumerate(context):
# print(f"\nReference {i+1}:")
# print(item["text"])
+41
View File
@@ -0,0 +1,41 @@
from dataclasses import dataclass
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
@dataclass
class Settings:
# API Keys
COHERE_API_KEY: str
DEEPSEEK_API_KEY: str
# Vector Store Settings
VECTOR_DIMENSION: int = 1024 # Cohere's embed-english-v3.0 model dimension
INDEX_PATH: str = "data/vector_store/index.faiss"
# Content Settings
MAX_CONTEXT_LENGTH: int = 2000
DEFAULT_MODEL: str = "deepseek-chat"
# Brand Settings
BRAND_TONE: str = "professional and empathetic"
BRAND_VOICE: str = "Adriana James"
@classmethod
def from_env(cls):
"""Create a Settings instance from environment variables."""
return cls(
COHERE_API_KEY=os.getenv("COHERE_API_KEY", ""),
DEEPSEEK_API_KEY=os.getenv("DEEPSEEK_API_KEY", ""),
VECTOR_DIMENSION=int(os.getenv("VECTOR_DIMENSION", "1024")),
INDEX_PATH=os.getenv("INDEX_PATH", "data/vector_store/index.faiss"),
MAX_CONTEXT_LENGTH=int(os.getenv("MAX_CONTEXT_LENGTH", "2000")),
DEFAULT_MODEL=os.getenv("DEFAULT_MODEL", "deepseek-chat"),
BRAND_TONE=os.getenv("BRAND_TONE", "professional and empathetic"),
BRAND_VOICE=os.getenv("BRAND_VOICE", "Adriana James")
)
# Create a global settings instance
settings = Settings.from_env()
+89
View File
@@ -0,0 +1,89 @@
from typing import List, Dict, Any
import requests
import json
from config import settings
from brand_style import BrandStyleManager
# Initialize brand style manager
brand_style_manager = BrandStyleManager()
class MarketingCopywriter:
def __init__(self):
self.settings = settings
self.api_key = self.settings.DEEPSEEK_API_KEY
self.api_url = "https://api.deepseek.com/v1/chat/completions"
def _build_prompt(self, prompt: str, context: List[Dict], content_type: str, tone: str,
brand_voice: Dict[str, Any], sample_campaigns: List[Dict[str, Any]]) -> str:
"""Build a prompt for the LLM using context and parameters."""
# Format context from book excerpts
context_text = "\n".join([f"Reference {i+1}: {ctx['text']}" for i, ctx in enumerate(context)])
# Format brand voice guidelines
brand_voice_text = json.dumps(brand_voice, indent=2)
# Format sample campaigns
sample_campaigns_text = ""
for i, campaign in enumerate(sample_campaigns):
sample_campaigns_text += f"\nExample Campaign {i+1}:\n"
sample_campaigns_text += f"Title: {campaign.get('title', '')}\n"
sample_campaigns_text += f"Subject: {campaign.get('subject', '')}\n"
sample_campaigns_text += f"Content:\n{campaign.get('content', '')}\n"
return f"""You are a professional marketing copywriter for {self.settings.BRAND_VOICE}.
Your task is to create {content_type} content that matches the following request: {prompt}
BRAND VOICE GUIDELINES:
{brand_voice_text}
SAMPLE CAMPAIGNS:
{sample_campaigns_text}
RELEVANT BOOK EXCERPTS:
{context_text}
Guidelines:
1. Maintain a {tone} tone throughout
2. Follow {self.settings.BRAND_VOICE}'s brand voice guidelines
3. Be persuasive and engaging
4. Include a clear call-to-action
5. Keep the content concise and impactful
Generate the marketing copy:"""
def generate_copy(self, prompt: str, context: List[Dict], content_type: str, tone: str,
brand_voice: Dict[str, Any], sample_campaigns: List[Dict[str, Any]]) -> str:
"""Generate marketing copy using DeepSeek."""
full_prompt = self._build_prompt(prompt, context, content_type, tone, brand_voice, sample_campaigns)
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
data = {
"model": self.settings.DEFAULT_MODEL,
"messages": [
{"role": "system", "content": "You are a professional marketing copywriter."},
{"role": "user", "content": full_prompt}
],
"temperature": 0.7,
"max_tokens": 1000
}
response = requests.post(self.api_url, headers=headers, json=data)
response.raise_for_status()
return response.json()["choices"][0]["message"]["content"].strip()
def generate_marketing_copy(prompt: str) -> str:
"""Helper function to generate marketing copy."""
copywriter = MarketingCopywriter()
context = brand_style_manager.get_relevant_context(prompt)
content_type = "email"
tone = "professional and empathetic"
brand_voice = brand_style_manager.get_brand_voice()
sample_campaigns = brand_style_manager.get_sample_campaigns()
return copywriter.generate_copy(prompt, context, content_type, tone, brand_voice, sample_campaigns)
print(generate_marketing_copy("Generate a marketing campaign for our new comers"))
+37
View File
@@ -0,0 +1,37 @@
import cohere
from typing import List
import numpy as np
from config import settings
class CohereEmbeddings:
def __init__(self):
self.settings = settings
self.client = cohere.Client(self.settings.COHERE_API_KEY)
def generate_embedding(self, text: str) -> np.ndarray:
"""Generate embeddings for a single text using Cohere."""
response = self.client.embed(
texts=[text],
model="embed-english-v3.0",
input_type="search_document"
)
return np.array(response.embeddings[0])
def rerank_results(self, query: str, documents: List[str], top_n: int = 5) -> List[str]:
"""Rerank documents based on relevance to the query."""
results = self.client.rerank(
query=query,
documents=documents,
top_n=top_n,
model="rerank-english-v2.0"
)
# Extract the reranked documents in order
reranked_docs = []
for result in results.results:
# Get the document at the index returned by the rerank API
doc_index = result.index
if 0 <= doc_index < len(documents):
reranked_docs.append(documents[doc_index])
return reranked_docs
+60
View File
@@ -0,0 +1,60 @@
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
import uvicorn
from copywriter import generate_marketing_copy
from brand_style import BrandStyleManager
from config import settings
from fastapi.templating import Jinja2Templates
from fastapi import Request
class CopyRequest(BaseModel):
prompt: str
app = FastAPI(title="Marketing Assistant AI")
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
)
# Initialize templates
templates = Jinja2Templates(directory="backend/templates")
# Initialize brand style manager
@app.get("/")
def root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.get("/generate-copy")
def create_marketing_copy(request: Request):
print(f"Received request: {request}")
# print(f"Received prompt: {request.prompt}")
generated_copy = "Something"
# print(f"Generated copy: {generated_copy}")
return templates.TemplateResponse("index.html", {"request": request, "generated_copy": generated_copy})
# try:
# # Generate the marketing copy using the simplified function
# generated_copy = generate_marketing_copy(request.prompt)
# print(f"Generated copy: {generated_copy}")
# return {
# "status": "success",
# "data": {
# "generated_copy": generated_copy
# }
# }
# except Exception as e:
# print(f"Error generating copy: {str(e)}")
# raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
uvicorn.run("main:app", host="localhost", port=8000, reload=True)
+11
View File
@@ -0,0 +1,11 @@
fastapi==0.104.1
uvicorn==0.24.0
python-dotenv==1.0.0
cohere==4.37
faiss-cpu==1.7.4
numpy==1.24.3
pydantic==2.4.2
python-multipart==0.0.6
deepseek-ai==0.1.0
requests==2.31.0
PyPDF2==3.0.1
+89
View File
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Marketing Assistant AI</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
h1 {
color: #333;
text-align: center;
}
.container {
background-color: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
textarea {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
min-height: 100px;
resize: vertical;
}
button {
background-color: #4CAF50;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
width: 100%;
}
button:hover {
background-color: #45a049;
}
.response {
margin-top: 20px;
padding: 15px;
border: 1px solid #ddd;
border-radius: 4px;
background-color: #f9f9f9;
}
.response h3 {
margin-top: 0;
color: #333;
}
</style>
</head>
<body>
<h1>Marketing Assistant AI</h1>
<div class="container">
<form action="/generate-copy" method="post">
<div class="form-group">
<label for="prompt">Enter your marketing prompt:</label>
<textarea id="prompt" name="prompt" placeholder="Example: Generate a marketing campaign for an Umbrella company" required></textarea>
</div>
<button type="submit">Generate Marketing Copy</button>
</form>
{% if generated_copy %}
<div class="response">
<h3>Generated Marketing Copy:</h3>
<div>{{ generated_copy | safe }}</div>
</div>
{% endif %}
</div>
</body>
</html>
+70
View File
@@ -0,0 +1,70 @@
import faiss
import numpy as np
from typing import List, Dict
import json
import os
from config import settings
class VectorStore:
def __init__(self):
self.settings = settings
self.index = None
self.documents = []
self._load_or_create_index()
def _load_or_create_index(self):
"""Load existing index or create a new one."""
# Create directory for index if it doesn't exist
os.makedirs(os.path.dirname(self.settings.INDEX_PATH), exist_ok=True)
if os.path.exists(self.settings.INDEX_PATH):
self.index = faiss.read_index(self.settings.INDEX_PATH)
# Load documents metadata
metadata_path = self.settings.INDEX_PATH.replace(".faiss", "_metadata.json")
if os.path.exists(metadata_path):
with open(metadata_path, 'r') as f:
self.documents = json.load(f)
else:
self.index = faiss.IndexFlatL2(self.settings.VECTOR_DIMENSION)
def add_documents(self, texts: List[str], embeddings: List[np.ndarray]):
"""Add new documents to the vector store."""
if len(texts) != len(embeddings):
raise ValueError("Number of texts and embeddings must match")
# Add to FAISS index
self.index.add(np.array(embeddings))
# Update documents list
for text in texts:
self.documents.append({"text": text})
# Save index and metadata
self._save_index()
def search(self, query_embedding: np.ndarray, k: int = 5) -> List[Dict]:
"""Search for similar documents."""
distances, indices = self.index.search(
query_embedding.reshape(1, -1).astype('float32'),
k
)
results = []
for idx, distance in zip(indices[0], distances[0]):
if idx < len(self.documents): # Ensure index is valid
results.append({
"text": self.documents[idx]["text"],
"score": float(distance)
})
return results
def _save_index(self):
"""Save the index and metadata to disk."""
os.makedirs(os.path.dirname(self.settings.INDEX_PATH), exist_ok=True)
faiss.write_index(self.index, self.settings.INDEX_PATH)
# Save metadata
metadata_path = self.settings.INDEX_PATH.replace(".faiss", "_metadata.json")
with open(metadata_path, 'w') as f:
json.dump(self.documents, f)
BIN
View File
Binary file not shown.
@@ -0,0 +1,49 @@
Chapter 1: The Foundation of Sustainable Business Growth
In my years of working with women entrepreneurs, I've observed a common pattern: many brilliant business owners struggle to scale their ventures without sacrificing their values or personal well-being. This chapter explores the fundamental principles that form the bedrock of sustainable business growth.
The first principle is clarity of purpose. Before you can effectively grow your business, you must have absolute clarity about why you started it in the first place. This purpose becomes your North Star, guiding every decision you make as you scale.
The second principle is strategic focus. As your business grows, you'll face countless opportunities and distractions. The key to sustainable growth is maintaining laser focus on activities that directly contribute to your core value proposition.
The third principle is systems thinking. Sustainable growth requires robust systems that can scale with your business. This includes everything from your customer service processes to your financial management systems.
Chapter 2: Building a High-Performing Team
One of the most challenging aspects of scaling a business is building and leading a high-performing team. In this chapter, I share my proven framework for attracting, developing, and retaining exceptional talent.
The foundation of a high-performing team is a strong culture. Your company culture should reflect your values and create an environment where people can thrive. This starts with clear communication of your mission, vision, and values.
Recruitment is the next critical component. I recommend a values-based hiring approach that prioritizes cultural fit alongside skills and experience. This ensures that new team members will align with your company's purpose and contribute positively to your culture.
Once you've built your team, the focus shifts to development and empowerment. This involves providing clear expectations, regular feedback, and opportunities for growth. It also means giving your team members the autonomy to make decisions and take ownership of their work.
Chapter 3: Revenue Diversification Strategies
Diversifying your revenue streams is essential for building a resilient business that can weather market fluctuations. In this chapter, I outline several strategies for creating multiple revenue streams while maintaining focus on your core business.
The first strategy is product line expansion. This involves developing complementary products or services that address related customer needs. The key is to ensure that new offerings align with your brand and provide genuine value to your customers.
The second strategy is market expansion. This could involve targeting new customer segments, entering new geographic markets, or adapting your offerings for different industries. The challenge is to maintain your brand consistency while adapting to the unique needs of each market.
The third strategy is business model innovation. This might include introducing subscription models, creating membership programs, or developing licensing opportunities. The goal is to create recurring revenue streams that provide predictable cash flow.
Chapter 4: Work-Life Harmony for Entrepreneurs
Achieving work-life harmony is one of the most pressing challenges for entrepreneurs, especially women who often face additional societal expectations. In this chapter, I share practical strategies for creating boundaries and maintaining well-being while growing your business.
The first step is redefining success. For many entrepreneurs, success has traditionally been measured solely by business metrics. I encourage you to expand this definition to include personal fulfillment, relationships, and health.
The second step is implementing effective time management strategies. This includes techniques for prioritizing tasks, delegating effectively, and creating focused work periods. It also means scheduling regular time for rest, reflection, and personal activities.
The third step is building a support system. This might include hiring virtual assistants, joining mastermind groups, or working with coaches and mentors. The goal is to create a network of support that helps you navigate the challenges of entrepreneurship.
Chapter 5: Personal Branding for Business Growth
Your personal brand is one of your most valuable business assets. In this chapter, I share strategies for developing a powerful personal brand that attracts clients, partners, and opportunities.
The foundation of a strong personal brand is authenticity. Your brand should reflect your true values, strengths, and unique perspective. This authenticity creates trust and connection with your audience.
Visibility is the next component. This involves strategically sharing your expertise and insights through various channels, including speaking engagements, media appearances, and content creation. The goal is to position yourself as a thought leader in your industry.
Consistency is the final piece. Your personal brand should be consistent across all touchpoints, from your website and social media to your in-person interactions. This consistency builds recognition and reinforces your brand message.
+22
View File
@@ -0,0 +1,22 @@
{
"campaigns": [
{
"title": "Women in Business Launch",
"date": "2023-11-15",
"subject": "Transform Your Business Journey with Adriana James",
"content": "Dear [Name],\nAre you ready to take your business to the next level? Join hundreds of successful women entrepreneurs who have transformed their businesses with Adriana James' proven strategies.\nIn this exclusive webinar, you'll discover:\n- How to identify and leverage your unique strengths\n- Strategies for scaling your business sustainably\n- Building a powerful personal brand\n- Creating multiple revenue streams\nDon't miss this opportunity to learn from a successful entrepreneur who has helped thousands of women achieve their business goals.\nRegister now: [Link]\nBest regards,\nAdriana James"
},
{
"title": "Personal Branding Workshop",
"date": "2023-12-01",
"subject": "Elevate Your Personal Brand",
"content": "Hi [Name],\nYour personal brand is your most valuable business asset. In this hands-on workshop, you'll learn how to:\n- Define your unique value proposition\n- Create a compelling personal brand story\n- Build a strong online presence\n- Connect with your ideal clients\nJoin us for this transformative experience and take control of your professional narrative.\nSecure your spot: [Link]\nWarmly,\nAdriana James"
},
{
"title": "Business Growth Masterclass",
"date": "2024-01-10",
"subject": "Scale Your Business with Confidence",
"content": "Hello [Name],\nReady to scale your business without sacrificing your values or work-life balance? In this masterclass, you'll learn:\n- Proven frameworks for sustainable growth\n- How to build and lead a high-performing team\n- Strategies for increasing revenue and profitability\n- Maintaining work-life harmony while growing\nDon't let fear hold you back from achieving your business dreams.\nJoin us: [Link]\nTo your success,\nAdriana James"
}
]
}
+42
View File
@@ -0,0 +1,42 @@
Campaign: Women in Business Launch
Date: 2023-11-15
Subject: Transform Your Business Journey with Adriana James
Content: Dear [Name],
Are you ready to take your business to the next level? Join hundreds of successful women entrepreneurs who have transformed their businesses with Adriana James' proven strategies.
In this exclusive webinar, you'll discover:
- How to identify and leverage your unique strengths
- Strategies for scaling your business sustainably
- Building a powerful personal brand
- Creating multiple revenue streams
Don't miss this opportunity to learn from a successful entrepreneur who has helped thousands of women achieve their business goals.
Register now: [Link]
Best regards,
Adriana James
Campaign: Personal Branding Workshop
Date: 2023-12-01
Subject: Elevate Your Personal Brand
Content: Hi [Name],
Your personal brand is your most valuable business asset. In this hands-on workshop, you'll learn how to:
- Define your unique value proposition
- Create a compelling personal brand story
- Build a strong online presence
- Connect with your ideal clients
Join us for this transformative experience and take control of your professional narrative.
Secure your spot: [Link]
Warmly,
Adriana James
Campaign: Business Growth Masterclass
Date: 2024-01-10
Subject: Scale Your Business with Confidence
Content: Hello [Name],
Ready to scale your business without sacrificing your values or work-life balance? In this masterclass, you'll learn:
- Proven frameworks for sustainable growth
- How to build and lead a high-performing team
- Strategies for increasing revenue and profitability
- Maintaining work-life harmony while growing
Don't let fear hold you back from achieving your business dreams.
Join us: [Link]
To your success,
Adriana James
+39
View File
@@ -0,0 +1,39 @@
{
"brand_name": "Adriana James",
"tone": [
"Professional yet approachable",
"Empowering and supportive",
"Direct and clear",
"Warm and personal",
"Confident but not arrogant"
],
"writing_style": [
"Use active voice",
"Keep sentences concise and impactful",
"Include personal anecdotes when relevant",
"Address the reader directly using 'you' and 'your'",
"Use bullet points for clarity",
"End with a clear call to action"
],
"key_phrases": [
"Transform your business journey",
"Take control of your professional narrative",
"Scale with confidence",
"Build your powerful personal brand",
"Achieve work-life harmony"
],
"formatting": [
"Use headers to break up content",
"Include white space for readability",
"Highlight key points with bullet points",
"Use bold for emphasis on important concepts",
"Keep paragraphs short (3-4 sentences max)"
],
"personal_touch": [
"Sign off with 'Best regards,' 'Warmly,' or 'To your success,'",
"Include personal experiences and insights",
"Show empathy and understanding of challenges",
"Celebrate reader's potential and achievements",
"Maintain a supportive and encouraging tone"
]
}
+37
View File
@@ -0,0 +1,37 @@
Brand Voice Guidelines for Adriana James
Tone:
- Professional yet approachable
- Empowering and supportive
- Direct and clear
- Warm and personal
- Confident but not arrogant
Writing Style:
- Use active voice
- Keep sentences concise and impactful
- Include personal anecdotes when relevant
- Address the reader directly using "you" and "your"
- Use bullet points for clarity
- End with a clear call to action
Key Phrases:
- "Transform your business journey"
- "Take control of your professional narrative"
- "Scale with confidence"
- "Build your powerful personal brand"
- "Achieve work-life harmony"
Formatting:
- Use headers to break up content
- Include white space for readability
- Highlight key points with bullet points
- Use bold for emphasis on important concepts
- Keep paragraphs short (3-4 sentences max)
Personal Touch:
- Sign off with "Best regards," "Warmly," or "To your success,"
- Include personal experiences and insights
- Show empathy and understanding of challenges
- Celebrate reader's potential and achievements
- Maintain a supportive and encouraging tone
Binary file not shown.
File diff suppressed because one or more lines are too long