| name | yalla-blog |
| description | Generate Arabic RTL blog posts about digital marketing for yalla-ads.com |
| version | 1.0.0 |
| author | Mousa Abu Mazin |
| license | MIT |
| platforms | ["linux","macos"] |
| metadata | {"hermes":{"tags":["blog","arabic","marketing","seo","rtl"]}} |
Yalla Ads Arabic Blog Generator
Generate Arabic blog posts for yalla-ads.com targeting Arab business owners who need digital marketing help.
Writing Rules
- Write in Arabic (فصحى واضحة وسهلة) — clear, professional Modern Standard Arabic
- Target: Arab business owners and marketers
- 1500-2000 words
- Include real statistics and actionable advice
- End with CTA for Yalla Ads services
- Bold propaganda-style tone — confident, direct, motivational
Blog Structure
Use Astro frontmatter:
---
title: "Arabic Title"
description: "Arabic meta description 120-160 chars"
date: "YYYY-MM-DD"
author: "يلا ادز"
image: "/blog-images/YYYY-MM-DD.jpg"
tags: ["tag1", "tag2"]
---
Topics
Rotate through:
- Google Ads for Arab businesses
- Social media marketing (Instagram, TikTok, Snapchat for MENA)
- SEO for Arabic websites
- E-commerce in the Arab world
- AI tools for Arab marketers
- Content marketing in Arabic
- Influencer marketing (إنفلونسر ماركتنج) in MENA
- WhatsApp marketing for Arab businesses
- Email marketing & marketing automation in Arabic
Before writing: ls src/content/blog/ to see existing posts and pick a topic that hasn't been covered recently. Avoid reusing the same angle.
Execution
- Research trending digital marketing topics relevant to Arab market
- Write full post in Arabic with h2/h3 structure
- Generate hero image via Pollinations.ai (see Image Generation below)
- Save post to
src/content/blog/YYYY-MM-DD-slug.md
- Save image to
public/blog-images/YYYY-MM-DD.jpg — frontmatter image field must reference /blog-images/YYYY-MM-DD.jpg
- Verify word count is at least ~700 Arabic words (~1500+ total tokens). If short, add more sections.
git add -A && git commit -m "New blog post: [Arabic title]" && git pull --rebase
- Attempt
git push origin main. If it fails due to missing credentials (empty git-credentials file, no SSH key), the commit is staged — notify user to push manually or set up auth.
Word count verification: Use python3 /tmp/verify_wordcount.py <path-to-post.md> (script saved to references/verify_wordcount.py in this skill). Split by whitespace and count body tokens excluding frontmatter. Threshold: ≥700 words (~1500+ estimated tokens). Inline python3 -c triggers user-approval prompts on Mac Studio — always write scripts to files first.
Image generation helper: Use scripts/gen_hero_image.py from this skill: python3 scripts/gen_hero_image.py <YYYY-MM-DD> <topic description>. Generates via image.pollinations.ai/prompt/ endpoint, verifies response headers and magic bytes, saves to public/blog-images/<date>.jpg.
Git Push Pitfall (Mac Studio)
The Mac Studio has no GitHub credentials configured (~/.git-credentials is empty, no gh CLI, no SSH key for GitHub). The standard flow will:
- ✓
git add -A — works
- ✓
git commit -m "..." — works
- ✓
git pull --rebase — works
- ✗
git push — FAILS with fatal: could not read Username for 'https://github.com'
Workaround: The commit is staged and verified. To push:
echo "https://USERNAME:TOKEN@github.com" > ~/.git-credentials
cd /Users/majana-agent/Projects/yalla-ads && git push origin main
Image Generation (Pollinations.ai)
Always write image/script code to a file first (/tmp/gen_image.py), then run it. Inline python3 -c "..." triggers user-approval prompts that block automated cron execution.
Use requests library (not urllib — it gets HTTP 403 from Pollinations).
Working endpoint:
https://image.pollinations.ai/prompt/{url_encoded_prompt}?width=1200&height=675&nologo=true&seed={number}
Helper script: Use scripts/gen_hero_image.py from this skill: python3 scripts/gen_hero_image.py <YYYY-MM-DD> <topic description>. Saves you from writing inline scripts.
PITFALLS:
pollinations.ai/p/{prompt} returns HTML, NOT an image. Always use image.pollinations.ai/prompt/...
image.pollinations.ai/prompt/ with ?enhance=true&model=flux also returns errors. Keep it simple: ?width=1200&height=675&nologo=true&seed=N
- Always verify the response: check
Content-Type header contains image/ AND file size > 10KB AND file header starts with \xff\xd8 (JPEG) or \x89PNG
- Use
requests with a User-Agent header to avoid 403 blocks
- Dark propaganda style prompt template: "Dark propaganda style digital art about [TOPIC], dramatic red and gold lighting, ominous power, 16:9, cinematic, high contrast, dark background with orange accents"
File Location
Posts go in: /Users/majana-agent/Projects/yalla-ads/src/content/blog/
Images go in: /Users/majana-agent/Projects/yalla-ads/public/blog-images/
Linked Scripts & References
scripts/gen_hero_image.py — Generate dark propaganda-style hero image via Pollinations.ai
references/verify_wordcount.py — Verify Arabic blog post meets word count threshold