Generic templates made content feel robotic.
The problem:
- Fill-in-the-blank = boring
- Doesn't capture my voice
- Readers could tell
- Still took forever to customize
Then I built AI-powered templates.
Now:
- Templates that learn MY style
- Adapt to each topic
- Sound like me, not a robot
- 5× faster creation
- Better quality
Here's how to build them.
Smart Template System
AI templates that learn and adapt:
import openai
from typing import Dict, List, Optional
import json
class SmartTemplateEngine:
def __init__(self):
self.client = openai.OpenAI()
self.templates = {}
self.brand_voice = {}
def train_brand_voice(self, example_content: List[str]):
print("Training AI on your brand voice...")
combined = "\n\n---\n\n".join(example_content)
prompt = f"""
Analyze these content examples and extract the brand voice profile:
EXAMPLES:
{combined[0:8000]}
Extract:
1. Tone characteristics
2. Common phrases/patterns
3. Sentence structure preferences
4. Vocabulary level and word choices
5. Use of punctuation and formatting
6. Opening/closing patterns
7. Storytelling style
8. Call-to-action style
9. Personality traits
Create a comprehensive brand voice profile.
"""
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
response_format={"type": "json_object"}
)
self.brand_voice = json.loads(response.choices[0].message.content)
print("Brand voice profile created")
def create_template(
self,
template_name: str,
template_type: str,
structure: Dict,
customizations: Optional[Dict] = None
):
print(f"Creating template: {template_name}")
template = {
'name': template_name,
'type': template_type,
'structure': structure,
'customizations': customizations or {},
'brand_voice': self.brand_voice
}
self.templates[template_name] = template
print(f"Template '{template_name}' created")
def generate_from_template(
self,
template_name: str,
variables: Dict,
adaptation_level: str = 'high'
):
if template_name not in self.templates:
raise ValueError(f"Template '{template_name}' not found")
template = self.templates[template_name]
print(f"Generating content from '{template_name}' template...")
prompt = self.build_generation_prompt(template, variables, adaptation_level)
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.7
)
content = json.loads(response.choices[0].message.content)
print("Content generated")
return content
def build_generation_prompt(
self,
template: Dict,
variables: Dict,
adaptation_level: str
):
prompt = f"""
Generate content using this smart template.
TEMPLATE STRUCTURE:
{json.dumps(template['structure'], indent=2)}
BRAND VOICE PROFILE:
{json.dumps(template['brand_voice'], indent=2)}
VARIABLES/INPUT:
{json.dumps(variables, indent=2)}
ADAPTATION LEVEL: {adaptation_level}
- high: Fully adapt to topic while maintaining voice
- medium: Follow structure closely with voice adaptation
- low: Strict structure, minimal adaptation
Generate content that follows the template and matches the brand voice.
"""
return prompt
def create_blog_post_template(self):
structure = {
'title': {
'format': 'attention_grabbing',
'elements': ['benefit', 'specificity', 'urgency_or_curiosity'],
'length': '50-70 chars'
},
'opening': {
'hook': 'problem_statement_or_bold_claim',
'pattern': 'short_punchy_sentences',
'length': '3-5 sentences',
'goal': 'immediate_engagement'
},
'problem_section': {
'format': 'bullet_list_of_pain_points',
'count': '4-6 points',
'style': 'relatable_and_specific'
},
'transition': {
'type': 'solution_introduction',
'length': '1-2 sentences'
},
'solution_overview': {
'format': 'benefits_focused',
'bullet_count': '4-5',
'include': 'specific_outcomes'
},
'main_content': {
'sections': [
{
'type': 'how_it_works',
'subsections': '3-5',
'each_includes': ['explanation', 'example', 'actionable_tip']
},
{
'type': 'code_or_implementation',
'format': 'step_by_step',
'include_comments': True
},
{
'type': 'results_and_metrics',
'include': ['before_state', 'after_state', 'specific_numbers']
}
]
},
'getting_started': {
'format': 'actionable_steps',
'timeframe': 'this_week',
'step_count': '3-5'
},
'common_mistakes': {
'count': '4-5',
'format': 'mistake_and_solution'
},
'conclusion': {
'pattern': 'recap_transformation',
'include': ['before_summary', 'solution_recap', 'results_summary'],
'cta': 'clear_next_action'
}
}
return self.create_template(
template_name='blog_post',
template_type='long_form',
structure=structure
)
def create_social_post_template(self, platform: str):
platform_structures = {
'twitter': {
'hook': {
'type': 'bold_statement_or_question',
'length': 'one_line'
},
'body': {
'format': 'short_punchy_points',
'count': '3-5_points'
},
'cta': {
'type': 'question_or_action',
'placement': 'end'
},
'hashtags': {
'count': '1-2',
'placement': 'inline_or_end'
},
'max_length': 280
},
'linkedin': {
'hook': {
'type': 'personal_story_or_insight',
'length': '2-3_sentences'
},
'body': {
'format': 'story_or_lesson',
'include': ['context', 'challenge', 'solution', 'outcome']
},
'spacing': 'single_line_paragraphs',
'cta': {
'type': 'engagement_question',
'style': 'professional'
},
'hashtags': {
'count': '3-5',
'placement': 'end'
},
'max_length': 3000
},
'instagram': {
'hook': {
'type': 'attention_grabber',
'critical': 'first_line_shows_in_feed'
},
'body': {
'format': 'engaging_caption',
'emoji_usage': 'moderate',
'include': 'value_or_story'
},
'cta': {
'type': 'save_share_or_comment',
'placement': 'mid_or_end'
},
'hashtags': {
'count': '10-15',
'placement': 'end',
'format': 'mix_of_sizes'
},
'max_length': 2200
}
}
structure = platform_structures.get(platform, platform_structures['twitter'])
return self.create_template(
template_name=f'{platform}_post',
template_type='social',
structure=structure,
customizations={
'platform': platform,
'voice_adaptation': 'platform_native'
}
)
def create_email_template(self, email_type: str):
email_structures = {
'newsletter': {
'subject_line': {
'style': 'curiosity_or_value',
'length': '40-50_chars',
'personalization': 'optional'
},
'preview_text': {
'length': '80-100_chars',
'purpose': 'complement_subject'
},
'opening': {
'greeting': 'personal',
'hook': 'relevant_to_content'
},
'main_content': {
'sections': '3-4',
'each_includes': ['headline', 'value', 'cta_option']
},
'ps_section': {
'include': True,
'purpose': 'personal_note_or_bonus'
}
},
'promotional': {
'subject_line': {
'style': 'benefit_focused',
'urgency': 'optional',
'length': '40-50_chars'
},
'opening': {
'format': 'problem_or_desire'
},
'value_prop': {
'bullets': '3-5',
'focus': 'benefits_not_features'
},
'social_proof': {
'include': 'testimonial_or_stat'
},
'cta': {
'prominence': 'high',
'repetition': '2-3_times',
'clarity': 'crystal_clear'
},
'urgency': {
'type': 'scarcity_or_deadline',
'authenticity': 'must_be_real'
}
}
}
structure = email_structures.get(email_type, email_structures['newsletter'])
return self.create_template(
template_name=f'email_{email_type}',
template_type='email',
structure=structure
)
def batch_generate(
self,
template_name: str,
variable_sets: List[Dict],
adaptation_level: str = 'high'
):
print(f"Batch generating {len(variable_sets)} pieces...\n")
results = []
for i, variables in enumerate(variable_sets, 1):
print(f"Piece {i}/{len(variable_sets)}: {variables.get('topic', 'Untitled')[0:40]}...")
content = self.generate_from_template(
template_name=template_name,
variables=variables,
adaptation_level=adaptation_level
)
results.append(content)
print(f"Generated {len(results)} pieces\n")
return results
def export_templates(self, filename: str = 'smart_templates.json'):
export_data = {
'brand_voice': self.brand_voice,
'templates': self.templates
}
with open(filename, 'w') as f:
json.dump(export_data, f, indent=2)
print(f"Exported templates to {filename}")
def import_templates(self, filename: str = 'smart_templates.json'):
with open(filename, 'r') as f:
data = json.load(f)
self.brand_voice = data.get('brand_voice', {})
self.templates = data.get('templates', {})
print(f"Imported {len(self.templates)} templates")
# Usage Example
engine = SmartTemplateEngine()
# Step 1: Train on your existing content
example_posts = [
"""
Title: How I Automated My Content Creation
Creating content was killing me.
Every day:
- 3 hours writing
- 2 hours editing
- 1 hour formatting
Then I discovered AI...
[Your full post example 1]
""",
"""
Title: The Content System That Saved 20 Hours/Week
I was drowning in content.
[Your full post example 2]
""",
"""
Title: Why Most Content Fails (And How to Fix It)
Your content isn't bad.
It's just invisible.
[Your full post example 3]
"""
]
# Train the AI on your voice
engine.train_brand_voice(example_posts)
# Step 2: Create your templates
blog_template = engine.create_blog_post_template()
twitter_template = engine.create_social_post_template('twitter')
email_template = engine.create_email_template('newsletter')
# Step 3: Generate content from template
new_post = engine.generate_from_template(
template_name='blog_post',
variables={
'topic': 'AI for video content',
'main_benefit': 'Create videos 10x faster',
'key_points': [
'Script generation in 5 minutes',
'Automated b-roll suggestions',
'AI-powered editing workflow'
],
'target_audience': 'video content creators',
'code_example': True
},
adaptation_level='high'
)
print("Generated Blog Post:")
print(json.dumps(new_post, indent=2))
# Step 4: Batch generate multiple pieces
topics = [
{'topic': 'AI for thumbnails', 'main_benefit': 'Better CTR'},
{'topic': 'AI for captions', 'main_benefit': 'Save 2 hours daily'},
{'topic': 'AI for hashtags', 'main_benefit': 'Better reach'}
]
batch_posts = engine.batch_generate(
template_name='blog_post',
variable_sets=topics
)
# Export templates for reuse
engine.export_templates()
Template Types I Use
Smart templates for everything:
1. Blog Post Template
- Trained on my top 10 posts
- Adapts structure to topic
- Maintains my voice
- Includes code examples
- 1200-1500 words
2. Social Media Templates
- Platform-specific (Twitter, LinkedIn, Instagram)
- Hook patterns that work
- CTA variations
- Hashtag strategies
3. Email Templates
- Newsletter format
- Promotional structure
- Subject line formulas
- P.S. section patterns
4. Video Script Template
- Hook patterns
- Pacing structure
- Visual cues
- CTA placement
5. Thread Templates
- Opening hooks
- Point-by-point structure
- Transition patterns
- Closing CTAs
How Smart Templates Work
The difference from regular templates:
Regular Template:
Title: [Topic] + [Benefit]
Problem:
- [Pain point 1]
- [Pain point 2]
- [Pain point 3]
Solution:
[Your solution here]
Feels generic. Forced. Robotic.
Smart AI Template:
# Learns from YOUR content:
- Analyzes sentence patterns
- Extracts voice characteristics
- Identifies hook styles
- Maps story structures
# Generates content that:
- Sounds like YOU
- Adapts to topic naturally
- Uses your common phrases
- Matches your rhythm
Feels authentic. Natural. YOU.
Training Your Templates
How to make templates sound like you:
Step 1: Gather Examples (5-10 pieces)
- Your best-performing content
- Different topics
- Consistent voice
- Well-structured
Step 2: AI Analysis
- Extract voice patterns
- Identify structures
- Map common phrases
- Note formatting style
Step 3: Template Creation
- Build flexible structures
- Include voice guidelines
- Add adaptation rules
- Set quality standards
Step 4: Test & Refine
- Generate test content
- Compare to your style
- Adjust prompts
- Iterate until perfect
Training time: 1-2 hours once
Benefit: Forever
Template Variables
What you customize each time:
Required Variables
- Topic
- Main benefit
- Target audience
- Key points (3-5)
Optional Variables
- Specific examples
- Data/stats to include
- Code requirement (yes/no)
- Tone adjustment (if needed)
- Length preference
5 minutes to fill in
10 minutes for AI to generate
15 minutes total vs 2-3 hours manual
Adaptation Levels
How closely to follow template:
High Adaptation (Default)
- Fully adapt to topic
- Flexible structure
- Maintain voice essence
- Best for variety
Medium Adaptation
- Follow structure closely
- Adapt examples
- Consistent format
- Best for series
Low Adaptation
- Strict structure
- Minimal changes
- Predictable output
- Best for repetitive content
Tools & Costs
What you need:
- [AFFILIATE: Ollama]: $20/month - Template engine
- Notion: Free-$10/month - Template storage
- Your existing content: Free - Training data
Total: $20-30/month
Time investment:
Setup: 1-2 hours (one time)
Per piece: 15 minutes (vs 2-3 hours)
Savings: 90%+ time
My Results
Before smart templates:
- Blog post: 2-3 hours
- Voice consistency: Inconsistent
- Quality: Variable
- Templates: Felt robotic
- Output: 2-3 posts/week
After smart templates:
- Blog post: 15 minutes
- Voice consistency: Perfect
- Quality: Consistently high
- Templates: Sound like me
- Output: 10-15 posts/week
Impact:
- Time: 90% reduction (2.5 hours → 15 min)
- Output: 5× more posts (3 → 15/week)
- Quality: More consistent
- Voice: Authentically mine
- Stress: Way less
Getting Started
This week - build your first template:
Day 1: Gather Content (30 min)
- Find your 5-10 best posts
- Mix of topics
- Consistent voice
- Save as text files
Day 2: Train AI (1 hour)
- Feed examples to AI
- Extract voice profile
- Review and refine
Day 3: Create Template (30 min)
- Start with blog post
- Define structure
- Set variables
- Test generation
Day 4-7: Use & Refine
- Generate 5 test posts
- Compare to your style
- Adjust prompts
- Perfect the template
Common Mistakes
- Too few training examples
- Inconsistent examples
- Too rigid structure
- No human review
- Not iterating
Spend time and you’ll get it right.
The Bottom Line
Generic templates made content feel robotic.
Fill-in-blank = boring. Still took hours to customize.
Smart AI templates changed everything:
- Learn MY unique voice
- Adapt to each topic
- Sound authentic, not templated
- 5× faster creation
Results:
- 90% time saved (2.5 hours → 15 min)
- 5× more output (3 → 15 posts/week)
- Consistently my voice
- Zero generic feel
Build smart templates.
Train them on YOUR content.
Create faster. Sound better. Stay authentic.
