AI Services
RankFlow AI — Feature Prompts: Per-Feature Detailed Templates
Version: 2.0.0
docs/specs/ai/ai-services-04-features.mdOn this page
- 1. Landing Page Content
- 1.1 Task: landing_page_hero
- 1.2 Task: landing_page_about
- 1.3 Task: landing_page_services
- 1.4 Task: landing_page_faq
- 1.5 Task: landing_page_article
- 2. Google Business Profile Posts
- 2.1 Task: gbp_post
- 3. Social Media Posts
- 3.1 Task: social_caption
- 4. Citation Descriptions
- 4.1 Task: citation_description
- 5. Review Replies
- 5.1 Task: review_reply
- 6. Schema Markup
- 6.1 Task: schema_markup
- Validation Rules:
- 8. Content Refresh
- 8.1 Task: content_refresh
- 9. SEO & Meta Content
- 9.1 Task: meta_description
- 9.2 Task: alt_text
- 10. Report Summaries
- 10.1 Task: report_summary
- 11. Translation & Vernacular
- 11.1 Task: translation
- 12. Image Generation Prompts
- 12.1 Task: image_prompt
- 13. Hashtag & Keyword Generation
- 13.1 Task: hashtag_generation
- 13.2 Task: keyword_research
- 14. FAQ Generation
- 14.1 Task: faq
- 15. AI Engine Optimization
- 15.1 Task: aeo_content
- 16. Email & Notification Content
- 16.1 Task: lead_email
Version: 2.0.0
Date: 2026-06-16
Scope: Complete prompt templates for every AI touchpoint with full variable schemas, model selection, and output formats
Target Audience: Prompt Engineers, AI Engineers, Backend Engineers, Content Strategists
Service Path:src/server/services/ai/prompts/tasks/
1. Landing Page Content#
1.1 Task: landing_page_hero#
Purpose: Generate the hero section content for a practice's landing page.
Model: claude-sonnet (high-quality, creative)
Temperature: 0.7
Max Tokens: 512
Output Format: JSON
Variables#
interface HeroVariables {
practiceName: string;
category: string;
city: string;
state: string;
services: string[];
usps: string[];
targetAudience: string;
tone: string;
brandKeywords: string[];
phone: string;
ctaText: string; // "Book Now", "Call Us", "Get Started"
heroImageDescription?: string;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Hero Section Content
Generate a compelling hero section for {{practiceName}}'s landing page.
### Requirements:
1. **Headline**: One powerful headline (max 60 chars) that captures attention
2. **Subheadline**: One supporting sentence (max 120 chars) that explains value
3. **CTA**: Call to action button text (max 20 chars)
4. **Trust Signal**: One line that builds trust (e.g., "Serving Kochi families since 2015")
### Rules:
- Headline must include one brand keyword: {{brandKeywords}}
- Must reference {{city}} or {{state}}
- Tone: {{tone}}
- Must be compelling but not gimmicky
- No superlatives unless substantiated
- Keep it patient-centric ("we help you" not "we are the best")
- Use active voice
### Output Format (JSON):
{
"headline": "...",
"subheadline": "...",
"cta": "...",
"trustSignal": "..."
}
Example Output#
{
"headline": "Your Family's Smile, Our Expert Care in Kochi",
"subheadline": "Advanced dental treatments with a gentle, personal touch — because every smile deserves the best.",
"cta": "Book Consultation",
"trustSignal": "Trusted by 2,000+ families in Kochi since 2015"
}
1.2 Task: landing_page_about#
Purpose: Generate the About section content for a practice's landing page.
Model: claude-sonnet
Temperature: 0.7
Max Tokens: 1024
Output Format: JSON
Variables#
interface AboutVariables {
practiceName: string;
category: string;
city: string;
state: string;
address: string;
services: string[];
usps: string[];
foundingYear?: string;
teamSize?: string;
specializations?: string[];
tone: string;
targetAudience: string;
brandKeywords: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate About Section Content
Generate an About section for {{practiceName}}'s landing page.
### Requirements:
1. **Opening Paragraph**: 2-3 sentences introducing the practice
2. **Mission Statement**: 1 sentence about the practice's mission
3. **Why Choose Us**: 3-4 bullet points with USPs
4. **Closing**: 1 sentence inviting visitors to connect
### Rules:
- Total word count: 150-250 words
- Must mention {{city}} and {{state}}
- Include at least 2 brand keywords naturally
- Tone: {{tone}}
- Patient-centric language
- No unverified claims
- Include a subtle CTA (phone or appointment)
### Output Format (JSON):
{
"opening": "...",
"mission": "...",
"whyChooseUs": ["...", "...", "..."],
"closing": "..."
}
1.3 Task: landing_page_services#
Purpose: Generate service descriptions for the landing page.
Model: claude-haiku (cheaper, structured)
Temperature: 0.6
Max Tokens: 2048
Output Format: JSON
Variables#
interface ServicesVariables {
practiceName: string;
category: string;
city: string;
services: {
name: string;
description: string;
keywords: string[];
}[];
tone: string;
brandKeywords: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Service Descriptions
Generate service descriptions for {{practiceName}}'s landing page.
For each service, provide:
1. **Service Name**: The name of the service
2. **Short Description**: 1-2 sentences (max 80 words)
3. **Key Benefits**: 2-3 bullet points
4. **Icon Suggestion**: A simple icon name (e.g., "tooth", "heart", "family")
### Services to Describe:
{{#each services}}
- {{name}}: {{description}}
{{/each}}
### Rules:
- Each description: 50-80 words
- Tone: {{tone}}
- Include relevant keywords naturally
- Patient-centric language
- No jargon without explanation
### Output Format (JSON):
{
"services": [
{
"name": "...",
"description": "...",
"benefits": ["...", "..."],
"icon": "..."
}
]
}
1.4 Task: landing_page_faq#
Purpose: Generate FAQ section for the landing page.
Model: claude-haiku
Temperature: 0.6
Max Tokens: 2048
Output Format: JSON
Variables#
interface FAQVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
commonQuestions?: string[]; // If admin provides specific questions
tone: string;
isMedical: boolean;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate FAQ Section
Generate 5-7 frequently asked questions for {{practiceName}}'s landing page.
### Context:
- Category: {{category}}
- Location: {{city}}
- Services: {{services}}
{{#if commonQuestions}}
- Admin-provided questions: {{commonQuestions}}
{{/if}}
### Requirements:
1. Questions should be based on what patients/clients actually ask
2. Answers should be informative but not overly technical
3. Each answer: 2-4 sentences, max 80 words
### Rules:
- Tone: {{tone}}
- Patient-centric language
- {{#if isMedical}}Include medical disclaimer where appropriate{{/if}}
- No unverified claims
- Include at least one question about location/hours
- Include one question about pricing/insurance (if applicable)
- Include one question about first visit/appointment
### Output Format (JSON):
{
"faqs": [
{
"question": "...",
"answer": "..."
}
]
}
1.5 Task: landing_page_article#
Purpose: Generate SEO-optimized articles for the landing page.
Model: claude-sonnet (high-quality, long-form)
Temperature: 0.7
Max Tokens: 4096
Output Format: JSON
Variables#
interface ArticleVariables {
practiceName: string;
category: string;
city: string;
articleTopic: string;
targetKeywords: string[];
wordCount: number; // 500-1000
tone: string;
targetAudience: string;
services: string[];
brandKeywords: string[];
isMedical: boolean;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate SEO Article
Generate an SEO-optimized article for {{practiceName}}'s landing page.
### Article Topic: {{articleTopic}}
### Target Keywords: {{targetKeywords}}
### Word Count: {{wordCount}} words
### Tone: {{tone}}
### Requirements:
1. **Title**: SEO-optimized, includes target keyword (max 60 chars)
2. **Meta Description**: 150-160 chars, includes target keyword
3. **Introduction**: 2-3 paragraphs, hooks the reader, includes keyword
4. **Body**: 3-4 sections with H2 headings, each 150-200 words
5. **Conclusion**: 1 paragraph, summarizes, includes CTA
6. **Keywords**: Include {{targetKeywords}} naturally 3-5 times
### Structure:
- H1: Title
- H2: Introduction
- H2: [Topic Section 1]
- H2: [Topic Section 2]
- H2: [Topic Section 3]
- H2: Conclusion
### Rules:
- Original content, not copied from anywhere
- Patient-centric, informative tone
- Include {{city}} context where relevant
- {{#if isMedical}}Include medical disclaimer at the end{{/if}}
- No unverified claims or superlatives
- Use short paragraphs (2-3 sentences max)
- Use bullet points where appropriate
- Include internal links to services (if applicable)
### Output Format (JSON):
{
"title": "...",
"metaDescription": "...",
"content": "# Title\n\n## Introduction\n...\n\n## [Section 1]\n...\n\n## Conclusion\n..."
}
2. Google Business Profile Posts#
2.1 Task: gbp_post#
Purpose: Generate posts for Google Business Profile.
Model: claude-haiku (cost-effective, short content)
Temperature: 0.7
Max Tokens: 512
Output Format: JSON
Variables#
interface GBPVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
tone: string;
targetAudience: string;
brandKeywords: string[];
phone: string;
website: string;
// Post-specific
postType: "update" | "offer" | "event" | "product";
topic: string;
seasonalEvent?: string; // "Diwali", "New Year", etc.
promotionDetails?: string;
eventDetails?: {
name: string;
date: string;
time: string;
description: string;
};
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate GBP Post
Generate a Google Business Profile post for {{practiceName}}.
### Post Type: {{postType}}
### Topic: {{topic}}
{{#if seasonalEvent}}
### Seasonal Event: {{seasonalEvent}}
{{/if}}
{{#if promotionDetails}}
### Promotion: {{promotionDetails}}
{{/if}}
{{#if eventDetails}}
### Event: {{eventDetails.name}} on {{eventDetails.date}} at {{eventDetails.time}}
{{/if}}
### GBP Post Rules:
- Max 1500 characters (aim for 300-500 for optimal engagement)
- Can include a call-to-action button (BOOK, CALL, ORDER, etc.)
- Include a CTA link to {{website}} or phone {{phone}}
- Can include up to 10 photos (AI generates image prompt separately)
### Requirements:
1. **Hook**: First sentence must grab attention
2. **Body**: 2-3 sentences about the topic
3. **CTA**: Clear call to action ("Book now", "Call us", "Visit us")
4. **Contact**: Phone number or website link
### Tone Rules for GBP:
- GBP posts are more formal than Instagram but more engaging than website
- Use 1-2 emojis maximum (if tone allows)
- Keep it professional but approachable
- Include a local angle (mention {{city}} if relevant)
### Output Format (JSON):
{
"post": "...",
"cta": "...",
"ctaType": "BOOK | CALL | ORDER | VISIT | LEARN_MORE",
"imagePrompt": "..." // Separate image generation prompt
}
Example Output#
{
"post": "🦷✨ Thinking about a brighter smile? Our professional teeth whitening treatments are safe, effective, and give you results you'll love. Book your consultation today and discover the difference.\n\n📞 Call us: 9876543210\n🌐 Visit: drsmithdental.com",
"cta": "Book your consultation today!",
"ctaType": "BOOK",
"imagePrompt": "Professional dental clinic interior, modern equipment, bright and clean, welcoming atmosphere, warm lighting, high quality"
}
3. Social Media Posts#
3.1 Task: social_caption#
Purpose: Generate captions for social media platforms.
Model: gpt-4o-mini (cheap, good for short creative content)
Temperature: 0.8 (higher creativity for social)
Max Tokens: 512
Output Format: JSON
Variables#
interface SocialVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
tone: string;
targetAudience: string;
brandKeywords: string[];
phone: string;
website: string;
// Post-specific
platform: "instagram" | "facebook" | "linkedin" | "twitter";
postType: "educational" | "promotional" | "engagement" | "behind_scenes" | "testimonial" | "holiday";
topic: string;
imageDescription?: string;
trendingHashtags?: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Social Media Caption
Generate a social media caption for {{practiceName}} on {{platform}}.
### Platform: {{platform}}
### Post Type: {{postType}}
### Topic: {{topic}}
{{#if imageDescription}}
### Image Description: {{imageDescription}}
{{/if}}
{{#if trendingHashtags}}
### Trending Hashtags: {{trendingHashtags}}
{{/if}}
### Platform-Specific Rules:
{{#if platform === "instagram"}}
- Max 2200 characters (but optimal: 125-150 words)
- Use 1-3 emojis naturally
- Use line breaks for readability
- Include 5-10 relevant hashtags
- Use engaging hook in first line
- Can include "Link in bio" for CTA
{{/if}}
{{#if platform === "facebook"}}
- Max 63,206 characters (but optimal: 40-80 words)
- Less emoji-heavy than Instagram
- Can include links directly
- Use questions to encourage comments
- Shareable content works well
{{/if}}
{{#if platform === "linkedin"}}
- Max 3000 characters (but optimal: 100-150 words)
- Professional tone
- Use hashtags sparingly (3-5)
- Include insights or statistics if possible
- Thought leadership angle
{{/if}}
{{#if platform === "twitter"}}
- Max 280 characters
- Short and punchy
- Use 1-2 hashtags maximum
- Can include polls or questions
- Thread-friendly for longer content
{{/if}}
### Requirements:
1. **Hook**: First line must stop the scroll
2. **Body**: 2-4 sentences that add value or entertain
3. **CTA**: Engaging call to action (comment, share, visit, call)
4. **Hashtags**: Relevant hashtags (platform-specific count)
### Output Format (JSON):
{
"caption": "...",
"hashtags": ["...", "..."],
"cta": "...",
"engagementPrompt": "..." // Suggested engagement (question, poll, etc.)
}
Platform-Specific Examples#
Instagram:
{
"caption": "✨ Your smile is your best accessory.\n\nAt {{practiceName}}, we believe everyone deserves a smile they love. Our cosmetic dentistry services combine art and science to create natural, beautiful results.\n\nWhat's your smile goal? Comment below! 💬\n\n📞 Book your consultation: {{phone}}\n🌐 Learn more: {{website}}\n\n#DentalCare #SmileMakeover #{{city}}Dentist #CosmeticDentistry #HealthySmile",
"hashtags": ["#DentalCare", "#SmileMakeover", "#KochiDentist", "#CosmeticDentistry", "#HealthySmile"],
"cta": "Comment your smile goal!",
"engagementPrompt": "Ask followers: 'What's your smile goal? Comment below!'"
}
LinkedIn:
{
"caption": "The connection between oral health and overall wellness is stronger than many realize.\n\nAt {{practiceName}}, we take a holistic approach to dental care — because your mouth is the gateway to your health.\n\nRecent studies show that gum disease is linked to heart conditions, diabetes, and more. Regular checkups aren't just about teeth — they're about your whole body.\n\nHow often do you schedule dental checkups? Let's start a conversation about preventive care.\n\n#DentalHealth #PreventiveCare #OralHealth #Healthcare",
"hashtags": ["#DentalHealth", "#PreventiveCare", "#OralHealth", "#Healthcare"],
"cta": "Let's start a conversation about preventive care.",
"engagementPrompt": "Ask: 'How often do you schedule dental checkups?'"
}
4. Citation Descriptions#
4.1 Task: citation_description#
Purpose: Generate unique descriptions for each citation directory.
Model: gpt-4o-mini (cheap, simple, bulk generation)
Temperature: 0.6
Max Tokens: 512
Output Format: JSON
Variables#
interface CitationVariables {
practiceName: string;
category: string;
city: string;
state: string;
address: string;
phone: string;
website: string;
services: string[];
usps: string[];
description: string; // Practice description from profile
// Directory-specific
directoryName: string; // "Justdial", "Practo", "Google", etc.
directoryUrl: string;
maxLength: number; // Varies by directory (150-500 words)
directoryTone: string; // "professional", "casual", "medical", etc.
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Citation Description
Generate a unique business description for {{practiceName}} on {{directoryName}}.
### Directory: {{directoryName}}
### Max Length: {{maxLength}} words
### Directory Tone: {{directoryTone}}
### Context:
- {{practiceName}} is a {{category}} in {{city}}, {{state}}
- Address: {{address}}
- Phone: {{phone}}
- Website: {{website}}
- Services: {{services}}
- USPs: {{usps}}
- General description: {{description}}
### Requirements:
1. **Unique**: Must be different from descriptions on other directories (no copy-paste)
2. **Optimized**: Include brand keywords naturally
3. **Accurate**: All facts must be correct (NAP consistency)
4. **Directory-Appropriate**: Match the tone of {{directoryName}}
### Directory-Specific Guidelines:
{{#if directoryName === "Justdial"}}
- Include phone number prominently
- Mention location and landmarks
- List key services
- Use local language terms if appropriate
{{/if}}
{{#if directoryName === "Practo"}}
- Medical-focused tone
- Include doctor names and qualifications
- Mention specializations
- Include consultation fees if available
{{/if}}
{{#if directoryName === "Google"}}
- Professional but engaging
- Include services and USPs
- Mention location
- Include website and phone
{{/if}}
{{#if directoryName === "Sulekha"}}
- Service-focused
- Include pricing if available
- Mention service areas
- Include customer testimonials if available
{{/if}}
### Output Format (JSON):
{
"description": "...",
"keywords": ["...", "..."], // Keywords included
"characterCount": 123 // Actual character count
}
Example Output (Justdial)#
{
"description": "Dr. Smith's Dental Clinic — Your trusted dental care partner in Kochi, Kerala. Located near Lulu Mall, we offer comprehensive dental services including general dentistry, root canal treatment, teeth whitening, dental implants, and pediatric dentistry. Our experienced team uses advanced technology for painless treatments. Open 6 days a week with flexible appointment slots. Book your consultation today at 9876543210 or visit drsmithdental.com. We accept all major insurance plans. Serving Kochi families since 2015.",
"keywords": ["dental clinic Kochi", "root canal treatment", "teeth whitening", "dental implants", "pediatric dentistry"],
"characterCount": 487
}
5. Review Replies#
5.1 Task: review_reply#
Purpose: Generate replies to customer reviews.
Model: claude-haiku (empathetic, quick)
Temperature: 0.7
Max Tokens: 512
Output Format: JSON
Variables#
interface ReviewReplyVariables {
practiceName: string;
category: string;
city: string;
tone: string;
// Review-specific
reviewRating: number; // 1-5
reviewText: string;
reviewerName: string;
platform: "google" | "justdial" | "practo" | "facebook";
reviewDate: string;
// Practice context
services: string[];
phone: string;
website: string;
// Sentiment (pre-calculated)
sentiment: "positive" | "neutral" | "negative" | "mixed";
keyIssues?: string[]; // Extracted issues from negative reviews
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Review Reply
Generate a reply to a customer review for {{practiceName}}.
### Review Details:
- Rating: {{reviewRating}}/5
- Reviewer: {{reviewerName}}
- Platform: {{platform}}
- Date: {{reviewDate}}
- Sentiment: {{sentiment}}
{{#if keyIssues}}
- Key Issues: {{keyIssues}}
{{/if}}
### Review Text:
"{{reviewText}}"
### Reply Rules:
{{#if sentiment === "positive"}}
- Thank the reviewer sincerely and specifically
- Mention what they appreciated (refer to their review)
- Invite them back
- Keep it warm and personal
- No generic "thank you for your review" — be specific
{{/if}}
{{#if sentiment === "negative"}}
- Acknowledge their concern with empathy (no defensiveness)
- Apologize sincerely for their experience
- Take responsibility (even if it's not entirely our fault)
- Offer a specific solution or next step
- Invite them to contact us directly to resolve
- Include phone number or email for direct contact
- Do NOT argue, justify, or make excuses
- Do NOT offer discounts publicly (can be seen as buying reviews)
- Keep it professional but warm
{{/if}}
{{#if sentiment === "neutral"}}
- Thank them for their feedback
- Address any specific points they mentioned
- Invite them back for a better experience
- Keep it balanced and professional
{{/if}}
{{#if sentiment === "mixed"}}
- Acknowledge both positive and negative aspects
- Thank them for the positive feedback
- Address the negative aspects with empathy
- Offer to make things right
{{/if}}
### General Rules:
- Reply length: 2-4 sentences (50-100 words)
- Tone: {{tone}}
- Include practice name naturally
- {{#if reviewRating < 3}}Always include direct contact: {{phone}} or {{website}}{{/if}}
- No template-sounding language ("We value your feedback")
- Be authentic and human
### Output Format (JSON):
{
"reply": "...",
"tone": "...",
"actionRequired": true/false, // If negative review, action needed
"followUp": "..." // Internal note for admin (if action needed)
}
Example Outputs#
Positive Review Reply:
{
"reply": "Thank you so much, Priya! We're thrilled to hear that your root canal treatment was comfortable and that Dr. Smith made you feel at ease. It's wonderful that you're already noticing the difference in your smile. We look forward to seeing you for your follow-up and keeping that smile healthy! 🦷✨",
"tone": "warm and grateful",
"actionRequired": false,
"followUp": null
}
Negative Review Reply:
{
"reply": "Hi Rahul, I'm truly sorry to hear about your experience with the appointment wait time. That's not the standard we hold ourselves to, and I completely understand your frustration. I'd like to make this right — please call me directly at 9876543210 or email at manager@drsmithdental.com so we can discuss how to improve your experience and ensure this doesn't happen again.",
"tone": "empathetic and solution-oriented",
"actionRequired": true,
"followUp": "Contact Rahul directly to discuss wait time issue and offer priority scheduling for next visit."
}
6. Schema Markup#
6.1 Task: schema_markup#
Purpose: Generate JSON-LD schema markup for landing pages.
Model: claude-sonnet (structured, precise, JSON output)
Temperature: 0.2 (low creativity for structured data)
Max Tokens: 2048
Output Format: JSON (strict JSON-LD)
Variables#
interface SchemaVariables {
practiceName: string;
category: string;
city: string;
state: string;
address: string;
phone: string;
email: string;
website: string;
description: string;
services: string[];
images: string[];
// Page-specific
schemaType: "LocalBusiness" | "MedicalBusiness" | "Dentist" | "Hospital" | "Organization" | "WebPage" | "Article" | "FAQPage" | "Service";
pageUrl: string;
pageContent?: string;
faqs?: { question: string; answer: string }[];
breadcrumb?: { name: string; url: string }[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Schema Markup (JSON-LD)
Generate valid JSON-LD schema markup for {{practiceName}}.
### Schema Type: {{schemaType}}
### Page URL: {{pageUrl}}
### Context:
- Name: {{practiceName}}
- Category: {{category}}
- Address: {{address}}
- City: {{city}}
- State: {{state}}
- Phone: {{phone}}
- Email: {{email}}
- Website: {{website}}
- Description: {{description}}
- Services: {{services}}
- Images: {{images}}
{{#if faqs}}
- FAQs: {{faqs}}
{{/if}}
{{#if breadcrumb}}
- Breadcrumb: {{breadcrumb}}
{{/if}}
### Requirements:
1. Generate valid JSON-LD according to schema.org standards
2. Include all required properties for the schema type
3. Include recommended properties for rich results
4. Ensure all URLs are absolute (https://...)
5. Ensure all addresses are complete (street, city, state, postal code, country)
### Schema Types to Support:
{{#if schemaType === "LocalBusiness"}}
- @type: LocalBusiness
- Required: @context, @type, name, address, url, telephone
- Recommended: description, image, geo, openingHours, priceRange
{{/if}}
{{#if schemaType === "MedicalBusiness"}}
- @type: MedicalBusiness (or more specific: Dentist, Physician, Hospital)
- Required: @context, @type, name, address, url, telephone
- Recommended: description, image, geo, medicalSpecialty, availableService
{{/if}}
{{#if schemaType === "Dentist"}}
- @type: Dentist
- Required: @context, @type, name, address, url, telephone
- Recommended: description, image, geo, medicalSpecialty, availableService, priceRange
{{/if}}
{{#if schemaType === "FAQPage"}}
- @type: FAQPage
- Required: @context, @type, mainEntity (array of Question objects)
- Each Question: name (question text), acceptedAnswer (Answer object with text)
{{/if}}
{{#if schemaType === "Service"}}
- @type: Service
- Required: @context, @type, name, provider, areaServed
- Recommended: description, serviceType, offers
{{/if}}
{{#if schemaType === "BreadcrumbList"}}
- @type: BreadcrumbList
- Required: @context, @type, itemListElement (array of ListItem)
- Each ListItem: position, name, item (@id)
{{/if}}
### Output Format:
Return ONLY valid JSON-LD wrapped in a script tag:
```json
{
"schema": "<script type='application/ld+json'>...</script>"
}
Validation Rules:#
- JSON must be valid (no trailing commas, no comments)
- All @type values must be valid schema.org types
- All URLs must be absolute and use https://
- All dates must be in ISO 8601 format
- All coordinates must be valid latitude/longitude
---
## 7. Blog Posts
### 7.1 Task: `blog_post`
**Purpose**: Generate blog posts for the practice's owned site or Medium.
**Model**: `claude-sonnet` (high-quality, long-form)
**Temperature**: 0.7
**Max Tokens**: 4096
**Output Format**: JSON
#### Variables
```typescript
interface BlogVariables {
practiceName: string;
category: string;
city: string;
state: string;
// Blog-specific
blogTopic: string;
targetKeywords: string[];
wordCount: number; // 500-1500
outline?: string[]; // If admin provides outline
tone: string;
targetAudience: string;
services: string[];
brandKeywords: string[];
isMedical: boolean;
// SEO
targetSearchIntent: "informational" | "navigational" | "transactional" | "commercial";
competitorUrls?: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Blog Post
Generate a comprehensive blog post for {{practiceName}}.
### Blog Topic: {{blogTopic}}
### Target Keywords: {{targetKeywords}}
### Word Count: {{wordCount}} words
### Search Intent: {{targetSearchIntent}}
### Tone: {{tone}}
{{#if outline}}
### Outline (provided by admin):
{{outline}}
{{/if}}
{{#if competitorUrls}}
### Competitor References (for differentiation):
{{competitorUrls}}
{{/if}}
### Requirements:
1. **Title**: SEO-optimized, compelling, includes target keyword (max 60 chars)
2. **Meta Description**: 150-160 chars, includes keyword, click-worthy
3. **Introduction**: Hook the reader, establish authority, preview what they'll learn (150-200 words)
4. **Body Sections**: 4-6 sections with H2/H3 headings, each 200-300 words
- Include statistics or data if relevant (cite sources)
- Include practical tips or actionable advice
- Include real-world examples
- Use bullet points and lists for readability
5. **Conclusion**: Summarize key points, reinforce value, include CTA (100-150 words)
6. **CTA**: Clear call to action (book appointment, contact, learn more)
### SEO Rules:
- Include {{targetKeywords}} naturally 3-5 times
- Use semantic keywords (related terms) throughout
- Include internal links to services (natural placement)
- Include {{city}} context where relevant (local SEO)
- Use descriptive alt text for images (if referenced)
- URL slug suggestion: {{targetKeywords}}-{{city}}-practice
### Content Rules:
- Original content, not copied
- Patient-centric language
- {{#if isMedical}}Include medical disclaimer at the end{{/if}}
- No unverified claims
- Use short paragraphs (2-3 sentences)
- Use transition words between sections
- Include "People Also Ask" questions if relevant
### Output Format (JSON):
{
"title": "...",
"metaDescription": "...",
"slug": "...",
"content": "# Title\n\n## Introduction\n...\n\n## [H2 Section 1]\n...\n\n### [H3 Subsection]\n...\n\n## Conclusion\n...\n\n## Disclaimer\n...",
"keywords": ["...", "..."],
"wordCount": 1234,
"readingTime": "5 min read",
"hashtags": ["...", "..."]
}
8. Content Refresh#
8.1 Task: content_refresh#
Purpose: Refresh existing content with updated information or keywords.
Model: claude-sonnet (strategic updates, preserve voice)
Temperature: 0.6
Max Tokens: 4096
Output Format: JSON
Variables#
interface RefreshVariables {
practiceName: string;
category: string;
city: string;
// Refresh-specific
pageUrl: string;
currentContent: string; // Existing content
refreshReason: "keyword_update" | "outdated_info" | "seasonal" | "competitor_gap" | "performance_drop" | "annual_refresh";
newKeywords?: string[];
newServices?: string[];
seasonalContext?: string;
performanceData?: {
currentRanking: number;
targetRanking: number;
currentTraffic: number;
};
tone: string;
brandKeywords: string[];
isMedical: boolean;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Refresh Content
Refresh the existing content for {{practiceName}} while preserving the brand voice.
### Page: {{pageUrl}}
### Refresh Reason: {{refreshReason}}
{{#if newKeywords}}
### New Keywords to Include: {{newKeywords}}
{{/if}}
{{#if newServices}}
### New Services to Add: {{newServices}}
{{/if}}
{{#if seasonalContext}}
### Seasonal Context: {{seasonalContext}}
{{/if}}
{{#if performanceData}}
### Performance Data: Currently ranking {{performanceData.currentRanking}}, targeting {{performanceData.targetRanking}}
{{/if}}
### Current Content:
"""
{{currentContent}}
"""
### Refresh Rules:
1. **Preserve Voice**: Keep the same tone ({{tone}}) and personality
2. **Update Facts**: Add new services, remove outdated info, update statistics
3. **SEO Update**: Incorporate new keywords naturally
4. **Improve Structure**: Add headings, bullet points, improve readability
5. **Add Value**: Include new insights, tips, or information
6. **Keep Length**: Similar to original (±20%)
### What to Change:
{{#if refreshReason === "keyword_update"}}
- Incorporate {{newKeywords}} naturally throughout
- Ensure keyword density is 1-2% (not stuffed)
- Update meta description to include new keywords
{{/if}}
{{#if refreshReason === "outdated_info"}}
- Update all facts, statistics, and references
- Remove outdated services or procedures
- Add new services or team members
- Update contact info or hours if changed
{{/if}}
{{#if refreshReason === "seasonal"}}
- Add seasonal context ({{seasonalContext}})
- Mention seasonal promotions or events
- Update imagery suggestions for seasonal themes
{{/if}}
{{#if refreshReason === "competitor_gap"}}
- Address topics competitors cover that we don't
- Differentiate our approach from competitors
- Add unique value propositions
{{/if}}
{{#if refreshReason === "performance_drop"}}
- Improve engagement factors (hook, CTA, structure)
- Add more value to the reader
- Improve readability and scannability
{{/if}}
### Output Format (JSON):
{
"refreshedContent": "...",
"changes": ["Added new services section", "Updated keywords to include...", "Improved CTA"],
"metaDescription": "...",
"newKeywords": ["...", "..."]
}
9. SEO & Meta Content#
9.1 Task: meta_description#
Purpose: Generate meta title and description for pages.
Model: gpt-4o-mini (simple, structured)
Temperature: 0.4
Max Tokens: 256
Output Format: JSON
Variables#
interface MetaVariables {
practiceName: string;
category: string;
city: string;
pageTitle: string;
pageContent: string;
targetKeywords: string[];
pageType: "home" | "about" | "services" | "contact" | "blog" | "landing";
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Meta Title & Description
Generate SEO-optimized meta title and description for {{practiceName}}.
### Page: {{pageType}}
### Page Title: {{pageTitle}}
### Target Keywords: {{targetKeywords}}
### Rules:
- Meta Title: 50-60 characters (includes brand name)
- Meta Description: 150-160 characters
- Include target keyword naturally
- Include {{city}} if relevant
- Make it compelling (click-worthy)
- No duplicate content from other pages
### Output Format (JSON):
{
"title": "...",
"description": "...",
"characterCount": {
"title": 55,
"description": 158
}
}
9.2 Task: alt_text#
Purpose: Generate alt text for images.
Model: gpt-4o-mini (simple, descriptive)
Temperature: 0.3
Max Tokens: 128
Output Format: JSON
Variables#
interface AltTextVariables {
practiceName: string;
imageDescription: string; // From image analysis or admin input
imageContext: string; // Where the image is used (hero, service, blog)
pageTopic: string;
targetKeywords: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Alt Text
Generate descriptive alt text for an image on {{practiceName}}'s website.
### Image Description: {{imageDescription}}
### Image Context: {{imageContext}}
### Page Topic: {{pageTopic}}
### Rules:
- Max 125 characters (screen reader friendly)
- Describe the image accurately
- Include target keyword if relevant ({{targetKeywords}})
- Don't start with "Image of..." or "Picture of..."
- Be descriptive but concise
### Output Format (JSON):
{
"altText": "...",
"characterCount": 85
}
10. Report Summaries#
10.1 Task: report_summary#
Purpose: Generate executive summaries from monthly reports.
Model: claude-sonnet (data synthesis, analytical)
Temperature: 0.5
Max Tokens: 2048
Output Format: JSON
Variables#
interface ReportVariables {
practiceName: string;
category: string;
city: string;
// Report data
reportData: {
period: string; // "June 2026"
metrics: {
gbpViews: number;
gbpActions: number;
websiteTraffic: number;
keywordRankings: { keyword: string; position: number; change: number }[];
reviewCount: number;
avgRating: number;
newCitations: number;
socialEngagement: number;
};
comparisons: {
previousPeriod: string;
gbpViewsChange: number;
websiteTrafficChange: number;
keywordRankingsChange: number;
};
issues: string[];
wins: string[];
};
timeRange: string;
focusAreas: string[]; // What the client cares about most
tone: string;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Monthly Report Summary
Generate an executive summary for {{practiceName}}'s monthly performance report.
### Reporting Period: {{reportData.period}}
### Previous Period: {{reportData.comparisons.previousPeriod}}
### Key Metrics:
- GBP Views: {{reportData.metrics.gbpViews}} ({{reportData.comparisons.gbpViewsChange > 0 ? '+' : ''}}{{reportData.comparisons.gbpViewsChange}}%)
- Website Traffic: {{reportData.metrics.websiteTraffic}} ({{reportData.comparisons.websiteTrafficChange > 0 ? '+' : ''}}{{reportData.comparisons.websiteTrafficChange}}%)
- Keyword Rankings: {{reportData.metrics.keywordRankings.length}} keywords tracked
- Reviews: {{reportData.metrics.reviewCount}} new ({{reportData.metrics.avgRating}} avg rating)
- New Citations: {{reportData.metrics.newCitations}}
- Social Engagement: {{reportData.metrics.socialEngagement}}
### Top Wins:
{{reportData.wins}}
### Issues to Address:
{{reportData.issues}}
### Focus Areas (what the client cares about):
{{focusAreas}}
### Requirements:
1. **Executive Summary**: 3-4 sentences highlighting the biggest wins and one area of concern
2. **Key Highlights**: 3-5 bullet points with specific numbers and context
3. **Action Items**: 3-5 prioritized actions for next month
4. **Tone**: Encouraging but honest. Celebrate wins, address issues constructively.
### Rules:
- Use data-driven language (specific numbers, percentages)
- Compare to previous period where relevant
- Focus on {{focusAreas}}
- Keep it concise (200-300 words total)
- Patient-friendly language (not overly technical)
- Include positive framing for negative metrics ("opportunity to improve" not "failure")
### Output Format (JSON):
{
"executiveSummary": "...",
"keyHighlights": ["...", "...", "..."],
"actionItems": [
{ "priority": "high", "action": "...", "expectedImpact": "..." },
{ "priority": "medium", "action": "...", "expectedImpact": "..." }
],
"tone": "encouraging and data-driven"
}
11. Translation & Vernacular#
11.1 Task: translation#
Purpose: Translate content into vernacular languages (Malayalam, Tamil, Hindi).
Model: claude-sonnet (best for nuanced translation)
Temperature: 0.5
Max Tokens: 4096
Output Format: JSON
Variables#
interface TranslationVariables {
practiceName: string;
category: string;
city: string;
targetLanguage: "malayalam" | "tamil" | "hindi" | "telugu" | "kannada";
sourceContent: string;
contentType: "landing_page" | "gbp_post" | "social_caption" | "faq" | "citation" | "blog";
culturalNotes: string; // Context about local culture, dialect, formality
tone: string;
isMedical: boolean;
brandKeywords: string[]; // Translated keywords if available
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Translate Content to {{targetLanguage}}
Translate the following content into {{targetLanguage}} for {{practiceName}}.
### Source Content:
"""
{{sourceContent}}
"""
### Content Type: {{contentType}}
### Cultural Notes: {{culturalNotes}}
### Tone: {{tone}}
{{#if isMedical}}
### Medical Content: Yes (ensure accurate medical terminology)
{{/if}}
### Translation Rules:
1. **Accuracy**: Translate meaning, not just words. Preserve intent and tone.
2. **Cultural Adaptation**: Adapt idioms, references, and examples for {{targetLanguage}} culture.
3. **Medical Terms**: Use standard medical terminology in {{targetLanguage}}.
4. **Formality**: Match the formality level of the source ({{tone}}).
5. **Brand Voice**: Preserve the brand voice (warm, professional, etc.) in {{targetLanguage}}.
6. **Local Context**: Reference {{city}} and local context naturally.
7. **Keywords**: Include translated brand keywords naturally.
8. **Length**: Keep similar length to source (±10%).
### Language-Specific Rules:
{{#if targetLanguage === "malayalam"}}
- Use Malayalam script (not transliteration)
- Common formality: Use "നിങ്ങൾ" (ningal) for formal, "നീ" (nee) for casual
- Medical terms: Use standard Malayalam medical terms or English loanwords if more common
- Tone: Warm and respectful for healthcare
{{/if}}
{{#if targetLanguage === "tamil"}}
- Use Tamil script
- Common formality: Use "நீங்கள்" (ningal) for formal
- Medical terms: Standard Tamil medical terminology
- Tone: Respectful and warm
{{/if}}
{{#if targetLanguage === "hindi"}}
- Use Devanagari script
- Common formality: Use "आप" (aap) for formal, "तुम" (tum) for casual
- Medical terms: Standard Hindi medical terms
- Tone: Professional but approachable
{{/if}}
### Output Format (JSON):
{
"translatedContent": "...",
"language": "{{targetLanguage}}",
"wordCount": 123,
"characterCount": 456,
"translatedKeywords": ["...", "..."],
"culturalNotes": "..."
}
12. Image Generation Prompts#
12.1 Task: image_prompt#
Purpose: Generate prompts for DALL-E / Gemini image generation.
Model: claude-haiku (creative, fast)
Temperature: 0.8 (high creativity)
Max Tokens: 512
Output Format: JSON
Variables#
interface ImagePromptVariables {
practiceName: string;
category: string;
city: string;
services: string[];
tone: string;
// Image-specific
imageType: "hero" | "service" | "social" | "blog" | "team" | "facility" | "promotional";
subject: string; // What the image should show
style: "photorealistic" | "illustration" | "minimalist" | "warm" | "professional" | "friendly";
platform?: "instagram" | "facebook" | "linkedin" | "website" | "gbp";
colorPalette?: string[]; // Brand colors
includePeople?: boolean;
diversityNote?: string; // "Include Indian families", "Show diverse patients"
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Image Generation Prompt
Generate a detailed prompt for an AI image generator (DALL-E or Gemini) for {{practiceName}}.
### Image Type: {{imageType}}
### Subject: {{subject}}
### Style: {{style}}
{{#if platform}}
### Platform: {{platform}}
{{/if}}
{{#if colorPalette}}
### Color Palette: {{colorPalette}}
{{/if}}
{{#if includePeople}}
### Include People: Yes
{{#if diversityNote}}
### Diversity Note: {{diversityNote}}
{{/if}}
{{/if}}
### Image Prompt Rules:
1. **Detailed**: Describe the scene, lighting, composition, mood
2. **Brand-Aligned**: Match {{practiceName}}'s tone ({{tone}})
3. **Cultural**: Reflect {{city}} and Indian context if relevant
4. **Professional**: High-quality, suitable for business use
5. **Safe**: No medical gore, no misleading imagery
### Style Guidelines:
{{#if style === "photorealistic"}}
- Describe as a high-quality photograph
- Mention camera style, lighting, setting
- Include details about people, environment, objects
{{/if}}
{{#if style === "illustration"}}
- Describe as a flat illustration or vector art
- Mention colors, style, composition
- Good for social media and icons
{{/if}}
{{#if style === "warm"}}
- Warm lighting, inviting atmosphere
- Natural colors, soft shadows
- Friendly and approachable feel
{{/if}}
{{#if style === "professional"}}
- Clean, modern, minimal
- Professional lighting, neutral backgrounds
- Corporate but approachable
{{/if}}
### Platform Guidelines:
{{#if platform === "instagram"}}
- Square format (1:1) or portrait (4:5)
- Vibrant, eye-catching
- Good for thumb-stopping
{{/if}}
{{#if platform === "linkedin"}}
- Landscape format (16:9 or 1.91:1)
- Professional, business-oriented
- Data visualizations or team photos work well
{{/if}}
{{#if platform === "gbp"}}
- Landscape (16:9) or square (1:1)
- Show the business interior or team
- Authentic, not overly staged
{{/if}}
### Output Format (JSON):
{
"imagePrompt": "A photorealistic image of... [detailed description]",
"negativePrompt": "...", // What to avoid
"aspectRatio": "1:1 | 4:5 | 16:9 | 1.91:1",
"style": "{{style}}",
"platform": "{{platform}}",
"altText": "..." // Alt text for accessibility
}
Example Output#
{
"imagePrompt": "A warm, photorealistic image of a modern dental clinic reception area in India. The space is bright and welcoming with warm lighting, clean white walls, and comfortable seating. A friendly Indian female receptionist in professional attire is smiling at the desk. In the background, a family (Indian, mother and child) is waiting comfortably. The atmosphere is calm and reassuring. Soft natural light from large windows. High-quality, professional photography style, shallow depth of field.",
"negativePrompt": "Dark, gloomy, clinical, scary, outdated equipment, crowded, dirty, medical gore, unrealistic proportions",
"aspectRatio": "16:9",
"style": "photorealistic",
"platform": "gbp",
"altText": "Welcoming reception area of Dr. Smith's Dental Clinic with modern interiors and friendly staff"
}
13. Hashtag & Keyword Generation#
13.1 Task: hashtag_generation#
Purpose: Generate relevant hashtags for social media posts.
Model: gpt-4o-mini (simple, bulk)
Temperature: 0.6
Max Tokens: 256
Output Format: JSON
Variables#
interface HashtagVariables {
practiceName: string;
category: string;
city: string;
services: string[];
brandKeywords: string[];
postTopic: string;
platform: "instagram" | "facebook" | "linkedin" | "twitter";
trendingHashtags?: string[];
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Hashtags
Generate relevant hashtags for a social media post about {{postTopic}}.
### Platform: {{platform}}
### Topic: {{postTopic}}
{{#if trendingHashtags}}
### Trending Hashtags: {{trendingHashtags}}
{{/if}}
### Hashtag Strategy:
- Mix of broad and niche hashtags
- Include location-based hashtags ({{city}})
- Include industry hashtags
- Include brand-specific hashtags
- Avoid banned or shadow-banned hashtags
### Platform Count:
{{#if platform === "instagram"}}
- 5-10 hashtags (optimal for 2026: fewer but highly relevant)
- Mix: 2-3 broad, 3-4 niche, 1-2 branded, 1-2 location
{{/if}}
{{#if platform === "facebook"}}
- 2-5 hashtags (Facebook is less hashtag-heavy)
- Focus on brand and topic
{{/if}}
{{#if platform === "linkedin"}}
- 3-5 hashtags (LinkedIn is professional)
- Industry and topic-focused
{{/if}}
{{#if platform === "twitter"}}
- 1-2 hashtags (space is limited)
- Trending or highly relevant
{{/if}}
### Output Format (JSON):
{
"hashtags": ["#...", "#...", "#..."],
"recommendedCaption": "...", // How to use them in caption
"strategy": "..."
}
13.2 Task: keyword_research#
Purpose: Generate keyword research for SEO.
Model: gpt-4o (structured, analytical)
Temperature: 0.4
Max Tokens: 2048
Output Format: JSON
Variables#
interface KeywordVariables {
practiceName: string;
category: string;
city: string;
services: string[];
seedKeywords: string[];
competitorUrls?: string[];
location: string;
targetAudience: string;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Keyword Research
Generate keyword research for {{practiceName}} in {{city}}.
### Seed Keywords: {{seedKeywords}}
{{#if competitorUrls}}
### Competitor URLs: {{competitorUrls}}
{{/if}}
### Location: {{location}}
### Target Audience: {{targetAudience}}
### Requirements:
Generate keywords organized by:
1. **High-Intent (Transactional)**: "book dental appointment Kochi", "dental clinic near me"
2. **Informational**: "how to whiten teeth", "what is root canal"
3. **Local**: "best dentist in {{city}}", "dental clinic {{city}}"
4. **Long-tail**: "affordable teeth whitening for sensitive teeth Kochi"
5. **Brand**: "{{practiceName}} reviews", "{{practiceName}} services"
6. **Competitor Gaps**: Keywords competitors rank for but we don't
For each keyword, provide:
- Keyword
- Search Intent (transactional, informational, navigational, commercial)
- Difficulty (easy, medium, hard)
- Priority (high, medium, low)
- Suggested Content Type (landing page, blog, GBP post, FAQ)
### Output Format (JSON):
{
"keywords": [
{
"keyword": "...",
"intent": "transactional",
"difficulty": "medium",
"priority": "high",
"contentType": "landing page",
"volume": "high"
}
],
"clusters": [
{
"topic": "dental implants",
"keywords": ["...", "..."],
"contentRecommendation": "Create a dedicated service page"
}
],
"competitorGaps": ["...", "..."]
}
14. FAQ Generation#
14.1 Task: faq#
Purpose: Generate FAQ sections for landing pages or GBP.
Model: claude-haiku (structured, cost-effective)
Temperature: 0.6
Max Tokens: 2048
Output Format: JSON
Variables#
interface FAQVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
faqTopic: string;
commonQuestions?: string[];
serviceContext?: string;
tone: string;
isMedical: boolean;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate FAQ Section
Generate 5-7 frequently asked questions for {{practiceName}} about {{faqTopic}}.
### Context:
- Category: {{category}}
- Location: {{city}}
- Services: {{services}}
{{#if commonQuestions}}
- Admin-provided questions: {{commonQuestions}}
{{/if}}
{{#if serviceContext}}
- Service context: {{serviceContext}}
{{/if}}
### Requirements:
1. Questions should be what patients actually ask
2. Answers should be informative but not overly technical
3. Each answer: 2-4 sentences, max 80 words
### Rules:
- Tone: {{tone}}
- Patient-centric language
- {{#if isMedical}}Include medical disclaimer where appropriate{{/if}}
- No unverified claims
- Include at least one question about:
- Pricing/insurance
- First visit/appointment process
- Location/hours
- Specific service
### Output Format (JSON):
{
"faqs": [
{
"question": "...",
"answer": "...",
"category": "pricing | services | appointment | general"
}
]
}
15. AI Engine Optimization#
15.1 Task: aeo_content#
Purpose: Generate content optimized for AI search engines (ChatGPT, Perplexity, Gemini).
Model: claude-sonnet (strategic, comprehensive)
Temperature: 0.6
Max Tokens: 4096
Output Format: JSON
Variables#
interface AEOVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
targetQuestion: string; // The question AI engines should answer
currentAnswer?: string; // Current answer if exists
competitorAnswers?: string[]; // Competitor answers
targetKeywords: string[];
tone: string;
isMedical: boolean;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate AI Engine Optimized Content
Generate content optimized for AI search engines (ChatGPT, Perplexity, Gemini) for {{practiceName}}.
### Target Question: {{targetQuestion}}
{{#if currentAnswer}}
### Current Answer: {{currentAnswer}}
{{/if}}
{{#if competitorAnswers}}
### Competitor Answers: {{competitorAnswers}}
{{/if}}
### AEO Strategy:
AI engines look for:
1. **Direct answers**: Clear, concise answers to the question
2. **Structured data**: Well-organized content with headings and lists
3. **Authority signals**: Expertise, experience, authority, trustworthiness (E-E-A-T)
4. **Comprehensive coverage**: Answers follow-up questions proactively
5. **Natural language**: Conversational but informative tone
### Requirements:
1. **Direct Answer**: 2-3 sentence direct answer to {{targetQuestion}}
2. **Detailed Explanation**: 3-4 paragraphs expanding on the answer
3. **Key Points**: Bullet points summarizing main takeaways
4. **Related Questions**: 3-5 related questions that might be asked
5. **Citations**: Reference to practice's expertise (if applicable)
6. **CTA**: Soft call to action to learn more or book
### Rules:
- Answer the question directly and comprehensively
- Use structured formatting (headings, lists, tables)
- Include local context ({{city}}) where relevant
- {{#if isMedical}}Include medical disclaimer and cite expertise{{/if}}
- No fluff or keyword stuffing
- Write for humans first, AI engines second
- Include "People Also Ask" style questions
- Use natural language, not robotic
### Output Format (JSON):
{
"directAnswer": "...",
"detailedContent": "...",
"keyPoints": ["...", "..."],
"relatedQuestions": [
{ "question": "...", "answer": "..." }
],
"citations": ["..."],
"cta": "..."
}
16. Email & Notification Content#
16.1 Task: lead_email#
Purpose: Generate follow-up emails for leads.
Model: claude-haiku (warm, concise)
Temperature: 0.7
Max Tokens: 1024
Output Format: JSON
Variables#
interface LeadEmailVariables {
practiceName: string;
category: string;
city: string;
services: string[];
usps: string[];
tone: string;
leadName: string;
leadInterest: string; // What service they inquired about
leadSource: string; // Where the lead came from
emailType: "welcome" | "follow_up" | "appointment_reminder" | "promotion" | "nurture";
daysSinceInquiry?: number;
appointmentDate?: string;
}
Prompt Template#
## META PROMPT
{{metaPrompt}}
## TASK: Generate Lead Email
Generate a {{emailType}} email for {{leadName}} from {{practiceName}}.
### Lead Name: {{leadName}}
### Lead Interest: {{leadInterest}}
### Lead Source: {{leadSource}}
### Email Type: {{emailType}}
{{#if daysSinceInquiry}}
### Days Since Inquiry: {{daysSinceInquiry}}
{{/if}}
{{#if appointmentDate}}
### Appointment Date: {{appointmentDate}}
{{/if}}
### Email Rules:
{{#if emailType === "welcome"}}
- Welcome them warmly
- Acknowledge their interest in {{leadInterest}}
- Introduce the practice briefly
- Include clear next steps (book appointment, visit website, call)
- Keep it under 150 words
{{/if}}
{{#if emailType === "follow_up"}}
- Reference their previous inquiry
- Provide additional value (information, tips, FAQ)
- Reiterate the offer or service
- Include a clear CTA
- Keep it under 150 words
{{/if}}
{{#if emailType === "appointment_reminder"}}
- Remind them of their appointment on {{appointmentDate}}
- Include time, location, what to bring
- Include contact info for rescheduling
- Keep it under 100 words
{{/if}}
{{#if emailType === "promotion"}}
- Mention the promotion or offer
- Create urgency (limited time, limited slots)
- Include clear CTA and contact info
- Keep it under 150 words
{{/if}}
{{#if emailType === "nurture"}}
- Provide valuable content (tip, insight, story)
- Softly mention the practice's services
- Build trust over time
- No hard sell
- Keep it under 200 words
{{/if}}
### General Rules:
- Tone: {{tone}}
- Subject line: Compelling, under 50 characters, not spammy
- Personalize with {{leadName}}
- Include phone number and website
- Professional but warm
- No spam words ("free", "guarantee", "act now")
- Mobile-friendly formatting (short paragraphs)
### Output Format (JSON):
{
"subject": "...",
"body": "...",
"signature": "...",
"cta": "..."
}
End of Feature Prompts Documentation — RankFlow AI v2.0.0