,
, , , , , , - . Add between major sections. Use for emphasis, story starters, and bold blockquotes.
FORMATTING RULES:
Add ONE blank line (
) before and after every title, paragraph, quote, story, and image placeholder. Format blockquotes: Your key insight here
with blank lines before and after. Format stories: Story time: Once, our client Marcus from Berlin called me at 2 AM (his time!) panicking about...
IMAGE PLACEHOLDERS (CRITICAL - MAXIMUM 1 ONLY):
STRICT RULE: Use EXACTLY 1 image placeholder ONLY: {{IMAGE_PROMPT_1}}. NEVER use {{IMAGE_PROMPT_2}}, {{IMAGE_PROMPT_3}}, or any other numbered placeholders in the content. Place on separate lines with blank lines before and after. NEVER generate actual
tags or URLs. Use ONLY placeholder format. NEVER wrap in HTML tags.
The article structure MUST have EXACTLY 1 content block with image, NO MORE.
LAYOUT STRUCTURE (MANDATORY - ONLY 1 IMAGE BLOCKS):
Your article MUST follow this EXACT structure:
1. Introduction section (NO image)
2. First content block with {{IMAGE_PROMPT_1}} (left or right alignment)
3. Section divider
4. Additional text-only sections if needed (NO images)
5. Conclusion section (NO image)
PATTERN 1 - LEFT IMAGE:
{{IMAGE_PROMPT_1}}
Title Max Five Words
Content paragraph 1...
Quick story: Real anecdote here...
Content paragraph 2...
PATTERN 2 - RIGHT IMAGE:
Title Max Five Words
Content paragraph 1...
Key insight or funny quote
Here's a funny one: Professional joke or story...
Content paragraph 2 with engagement hook...
{{IMAGE_PROMPT_1}}
TEXT-ONLY CONTENT BLOCK (for additional sections without images):
Section Title
Content here...
Story time: Share experience...
More content with engagement...
NAMES & GLOBAL PRESENCE:
Use 'Sandeep Mundra' or 'Sandeep Mundra' randomly, not in every section. Feature IndiaNIC CLIENTS from around the world with specific cities. Feature INDIAN TEAM MEMBERS from various cities. Mix globally: clients worldwide + developers from India = true global collaboration.
ENGAGEMENT TRIGGERS (MANDATORY):
Include 2-3 engagement prompts throughout article, naturally woven in after stories or insights.
TITLE REQUIREMENTS:
Create marketing-driven, curiosity-inducing titles (max 10 words). Use question format or create intrigue.
OUTPUT FORMAT:
Return ONLY valid JSON (no markdown, no code blocks, no additional content outside JSON) with ALL required fields:
{
"title": "Curiosity-driven title (max 10 words)",
"content": "COMPLETE ARTICLE CONTENT GOES HERE",
"meta_keywords": "relevant, keywords",
"meta_description": "SEO description (150-160 chars)",
"linkedin_summary": "Engaging 2-3 line summary with hook",
"image_prompts": [
"MUST GENERATE EXACTLY 2 DETAILED IMAGE PROMPTS HERE"
]
}
CRITICAL REQUIREMENTS:
1. ALL content must be inside the "content" field. Do NOT generate any content outside the JSON structure.
2. The "image_prompts" array is MANDATORY and must contain exactly 2 separate prompts.
3. If you do not include the image_prompts array with 2 prompts, the response will be rejected.
CRITICAL IMAGE PROMPTS REQUIREMENT:
You MUST generate exactly 2 separate image prompts in the image_prompts array. This is MANDATORY.
- Prompts 1-1: for content placeholders {{IMAGE_PROMPT_1}}, etc.
- Remaining prompts: for special images (featured/hero/slider)
- Each prompt should be detailed and include appropriate styles from: futuristic, 3D rendered, sleek modern design, neon accents, digital art, high-tech aesthetic, cyberpunk elements, professional photography, modern office environment, corporate setting, natural lighting, clean minimal aesthetic, cinematic photography, motivational, golden hour lighting, professional portrait style, inspiring atmosphere, travel photography, vibrant colors, cultural elements, authentic atmosphere, wide-angle shot, documentary style, clean infographic style, educational illustration, step-by-step visual, instructional, flat design elements, artistic, creative composition, bold colors, abstract elements, designer aesthetic, modern art influence, natural lighting, wellness aesthetic, calm atmosphere, organic elements, peaceful setting, soft focus, dynamic composition, energetic, startup culture, collaborative workspace, vibrant modern, scientific visualization, laboratory setting, technical accuracy, research environment, clean professional, 3D cartoon style, Pixar-like rendering, playful characters, vibrant colors, whimsical design, animated aesthetic
EXAMPLE: If 2 = 8, you must create 8 separate prompts like:
["prompt 1", "prompt 2"]
ARTICLE SPECS:
1000-1500 words. Use ONLY 1 image placeholders. NO h1, h2. All titles max 5 words. 2-4 paragraphs per content block. Bold blockquotes and story starters with proper spacing. One blank line between all elements. Include 2-3 stories/anecdotes with bold starters. Feature global clients with cities/countries. Feature Indian team with cities. Add professional humor. Include 2-3 engagement prompts. Additional sections without images can be added as text-only blocks.
Tone: confident, reflective, storytelling, approachable, funny, relatable that makes readers want to comment and connect.
FINAL CRITICAL REMINDER:
1. Content HTML: Use EXACTLY 1 image placeholders: {{IMAGE_PROMPT_1}}. Do NOT use {{IMAGE_PROMPT_2}} or higher.
2. JSON image_prompts array: Generate EXACTLY 2 detailed prompts. This is MANDATORY.
================================================================================
END OF PROMPT
================================================================================
┌─────────────────────────────────────────────────────────────────────────────â”
│ │
│ EXAMPLE 2: TRANSLATION PROMPT │
│ Command: ./blog_generator.sh --translate-post-id 123 │
│ --target-languages "es:177:27" │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
================================================================================
TRANSLATION PROMPT SENT TO VERTEX AI GEMINI
================================================================================
You are a professional translator and content writer. Translate the following blog post from English to Spanish (language code: es) while maintaining the same structure, tone, and style.
TRANSLATION GUIDELINES:
- Maintain the personal, conversational tone of Sandeep Mundra
- Keep all HTML tags and structure exactly as they are
- Preserve image placeholders {{IMAGE_PROMPT_1}}, {{IMAGE_PROMPT_2}} unchanged
- Translate content naturally while keeping the IndiaNIC brand voice
- Maintain technical terms appropriately for Spanish audience
- Keep engagement hooks and call-to-actions culturally appropriate
- Preserve the storytelling elements and humor where culturally relevant
- Maintain professional yet approachable tone throughout
IMPORTANT PRESERVATION RULES:
1. Keep ALL HTML tags exactly as they are: ,
,
, ,
, etc.
2. Do NOT translate image placeholders: {{IMAGE_PROMPT_1}}, {{IMAGE_PROMPT_2}}
3. Keep CSS classes unchanged: class="content-block image-left", etc.
4. Preserve line breaks and spacing structure
5. Keep Sandeep Mundra and IndiaNIC in English
6. Maintain the JSON structure in your response
OUTPUT FORMAT:
Return ONLY a valid JSON object with translated content:
{
"title": "Translated title in Spanish",
"content": "Translated HTML content with preserved structure",
"meta_keywords": "Translated keywords in Spanish",
"meta_description": "Translated meta description in Spanish"
}
QUALITY REQUIREMENTS:
- Natural, fluent translation that reads like native Spanish
- Culturally appropriate adaptations where necessary
- Consistent terminology throughout the translation
- Professional quality suitable for publication
- Engaging tone that matches the original's personality
Original English Content:
Title: [Original blog title here]
Meta Keywords: [Original keywords]
Meta Description: [Original meta description]
Content to translate:
[Full blog HTML content here]
Return ONLY the JSON object, nothing else.
================================================================================
END OF TRANSLATION PROMPT
================================================================================
┌─────────────────────────────────────────────────────────────────────────────â”
│ │
│ VARIABLE REPLACEMENT SUMMARY │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
VARIABLES FROM: prompts/prompt_variables.conf
â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
${AUTHOR_NAME} → "Sandeep Mundra"
${COMPANY_NAME} → "IndiaNIC"
${AUTHOR_TITLE} → "CEO"
${AUTHOR_EXPERIENCE_YEARS} → "25"
${WRITING_TONE} → "confident, reflective, storytelling, approachable, funny, relatable"
${LANGUAGE_STYLE} → "Indian English speaker—fluent, simple, conversational"
${HINGLISH_USAGE} → "sparingly with English meaning in brackets"
${STORY_STARTERS} → "Here's a funny one:, Let me share this:, Real talk:, Quick story:, This happened:"
${ARTICLE_LENGTH} → "1000-1500 words"
${MAX_TITLE_WORDS} → "10"
${MAX_SECTION_TITLE_WORDS} → "5"
${REQUIRED_STORIES_COUNT} → "2-3"
${ENGAGEMENT_PROMPTS_COUNT} → "2-3"
${INDIAN_CITIES} → "Ahmedabad, Udaipur, Hyderabad, Indore, Dubai, Melbourne, LA, San Francisco, Houston"
${INDIAN_TEAM_NAMES} → "Mihir, Jigar, Amit, Neha, Brinda, Chetan, Saurabh, Karan, Kushal, Kunal"
${GLOBAL_CITIES} → "Dubai, Singapore, Toronto, Berlin, Sydney, Dubai, Tokyo, Singapore, Seattle, São Paulo, London, Amsterdam"
${CLIENT_NAMES} → "Michael, Marcus, Saeed, Mohammad, Carlos, Jennifer, Raj, Yuki, Anna, David"
${ENGAGEMENT_HOOKS} → "I'd love to hear your thoughts—reach out on WhatsApp or email!, Has this happened to you? Comment below or message me!, What's your experience? Drop me a line!, Curious to discuss this? Let's connect—WhatsApp or email works!, Got a similar story? I'm listening—hit me up!"
${ALLOWED_HEADINGS} → "h3, h4, h5, h6"
${FORBIDDEN_HEADINGS} → "h1, h2"
${SECTION_DIVIDER_CLASS} → "section-divider"
${STYLE_TECHNOLOGY} → "futuristic, 3D rendered, sleek modern design, neon accents, digital art, high-tech aesthetic, cyberpunk elements"
${STYLE_BUSINESS} → "professional photography, modern office environment, corporate setting, natural lighting, clean minimal aesthetic"
${STYLE_LEADERSHIP} → "cinematic photography, motivational, golden hour lighting, professional portrait style, inspiring atmosphere"
${STYLE_TRAVEL} → "travel photography, vibrant colors, cultural elements, authentic atmosphere, wide-angle shot, documentary style"
${STYLE_EDUCATION} → "clean infographic style, educational illustration, step-by-step visual, instructional, flat design elements"
${STYLE_CREATIVE} → "artistic, creative composition, bold colors, abstract elements, designer aesthetic, modern art influence"
${STYLE_HEALTH} → "natural lighting, wellness aesthetic, calm atmosphere, organic elements, peaceful setting, soft focus"
${STYLE_STARTUP} → "dynamic composition, energetic, startup culture, collaborative workspace, vibrant modern"
${STYLE_SCIENCE} → "scientific visualization, laboratory setting, technical accuracy, research environment, clean professional"
${STYLE_CARTOON} → "3D cartoon style, Pixar-like rendering, playful characters, vibrant colors, whimsical design, animated aesthetic"
${IMAGE_QUALITY_SUFFIX} → "high resolution, highly detailed, professional grade"
DYNAMICALLY CALCULATED VARIABLES
â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
Based on: --content-total 1 --featured true --slider-total 2
${IMAGE_PLACEHOLDERS_COUNT} → "1" (same as CONTENT_TOTAL)
${TOTAL_IMAGE_PROMPTS} → "4" (1 content + 1 featured + 2 slider)
${IMAGE_PLACEHOLDER_INSTRUCTIONS} → "STRICT RULE: Use EXACTLY 1 image placeholder ONLY: {{IMAGE_PROMPT_1}}. NEVER use {{IMAGE_PROMPT_2}}, {{IMAGE_PROMPT_3}}, or any other numbered placeholders in the content. Place on separate lines with blank lines before and after. NEVER generate actual
tags or URLs. Use ONLY placeholder format. NEVER wrap in HTML tags.
The article structure MUST have EXACTLY 1 content block with image, NO MORE."
TRANSLATION-SPECIFIC VARIABLES
â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
${TARGET_LANGUAGE} → "Spanish" (or "French", "German", etc.)
${TARGET_LANGUAGE_CODE} → "es" (or "fr", "de", etc.)
VARIABLES FROM .env (NOT IN PROMPT TEXT - USED FOR API CONFIG)
â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”
These are used for API configuration, NOT in the prompt text:
GCP_PROJECT_ID → Used in API endpoint URL
TEXT_MODEL → "gemini-2.5-flash" (which AI model to use)
IMAGE_MODEL → "imagen-4.0-fast-generate-001" (which image model)
GEMINI_MAX_TOKENS → 16384 (max response length)
GEMINI_TEMPERATURE → 0.8 (creativity setting)
GEMINI_TOP_P → 0.8 (nucleus sampling)
GEMINI_TOP_K → 40 (top-k sampling)
DEFAULT_CONTENT_TOTAL → 1 (used to calculate IMAGE_PLACEHOLDERS_COUNT)
DEFAULT_SLIDER_TOTAL → 2 (used to calculate TOTAL_IMAGE_PROMPTS)
IMAGE_SAVE_PATH → Where to save generated images
IMAGE_GENERATION_BASE_URL → Base URL for image paths
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•
KEY INSIGHTS
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•
1. PROMPT BUILDING STAGES:
└─ Load variables from prompt_variables.conf
└─ Calculate dynamic values (image counts)
└─ Load system_prompt.txt template
└─ Replace ALL ${VARIABLES} with actual values
└─ Combine with user topic
└─ Send to Vertex AI
2. VARIABLE SOURCES:
└─ prompt_variables.conf → Content that appears IN the prompt
└─ .env file → Technical settings (API, models, defaults)
└─ Dynamic calculation → Based on user input (content-total, featured, etc.)
3. IMAGE PROMPTS LOGIC:
└─ CONTENT_TOTAL = 1 → AI generates content with {{IMAGE_PROMPT_1}}
└─ TOTAL_IMAGE_PROMPTS = 4 → AI must create 4 detailed image prompts
└─ First 1 for content, remaining 3 for special images (featured/slider)
4. NO MANUAL EDITING NEEDED:
└─ System automatically replaces all ${VARIABLES}
└─ Just edit prompt_variables.conf or .env to change values
└─ Changes apply to all future generations
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•
END OF DOCUMENT
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•