Auto-sync from website-creator

This commit is contained in:
Kunthawat Greethong
2026-03-08 23:03:19 +07:00
commit 9be686f587
117 changed files with 24737 additions and 0 deletions

View File

@@ -0,0 +1,192 @@
# Blog SEO Article Template
channel: blog
priority: 4
language: [th, en]
# Article structure
structure:
min_word_count:
thai: 1500
english: 2000
max_word_count:
thai: 3000
english: 3000
keyword_density:
thai: 1.0-1.5%
english: 1.5-2.0%
sections:
- introduction:
word_count: 150-250
must_include:
- hook
- problem_statement
- promise
- primary_keyword_in_first_100_words
- body:
h2_sections: 4-7
h3_subsections: "as needed"
keyword_in_h2: "at least 2-3"
- conclusion:
word_count: 150-250
must_include:
- summary_of_key_points
- primary_keyword
- call_to_action
- cta_placement:
recommended_locations:
- after_first_value_section
- after_comparison_proof_section
- at_end
min_cta_count: 2
max_cta_count: 4
# Frontmatter requirements
frontmatter:
required_fields:
- title: 50-60 chars
- description: 150-160 chars (meta description)
- keywords: array of 5-10 keywords
- slug: url-friendly
- lang: th_or_en
- category: string
- tags: array of strings
- created: "YYYY-MM-DD"
- author: string_optional
optional_fields:
- updated: "YYYY-MM-DD"
- draft: boolean
- featured: boolean
- image:
src: path
alt: string
caption: string
# SEO requirements
seo:
meta_title:
min_chars: 50
max_chars: 60
must_include_primary_keyword: true
meta_description:
min_chars: 150
max_chars: 160
must_include_primary_keyword: true
must_include_cta: true
url_slug:
max_words: 5
format: "lowercase-with-hyphens"
include_primary_keyword: true
thai: "use_transliteration_or_keep_thai"
headings:
h1:
count: 1
include_primary_keyword: true
h2:
count: 4-7
include_keyword_variations: "2-3 minimum"
h3:
count: "as needed"
proper_nesting: true
internal_links:
min_count: 3
max_count: 7
anchor_text: "descriptive_with_keywords"
external_links:
min_count: 2
max_count: 4
authority_sources_only: true
images:
min_count: 2
max_count: 10
alt_text_required: true
descriptive_filenames: true
compressed: true
# Image handling for blog
images:
hero_image:
required: true
size: "1200x630"
location: "public/images/blog/{slug}/hero.png"
inline_images:
recommended_frequency: "every 300-400 words"
size: "800x600 or 1080x1080"
location: "public/images/blog/{slug}/"
generation:
for_product_content: "browse_repo_then_image_edit"
for_non_product: "image_generation"
# Content quality requirements
quality:
min_score: 70
checks:
- keyword_optimization
- brand_voice_alignment
- thai_formality_level
- readability_score
- factual_accuracy
- actionability
- originality
readability:
thai:
avg_sentence_length: "15-25 words"
grade_level: "ม.6-ม.12"
formality: "auto-detect_from_context"
english:
flesch_reading_ease: "60-70"
flesch_kincaid_grade: "8-10"
avg_sentence_length: "15-20 words"
# Output configuration
output:
format: markdown_with_frontmatter
encoding: "utf-8"
line_endings: "unix"
astro_integration:
content_collection: "src/content/blog"
language_folders:
thai: "(th)"
english: "(en)"
image_folder: "public/images/blog/{slug}/"
publishing:
auto_publish: "optional (user_choice)"
git_commit: true
git_push: true
trigger_deploy: true
# API readiness (for future CMS integration)
api_ready:
cms_compatible:
- "WordPress"
- "Contentful"
- "Sanity"
- "Strapi"
schema_org:
type: "BlogPosting"
required_fields:
- headline
- description
- image
- datePublished
- author
- publisher

View File

@@ -0,0 +1,82 @@
# Facebook Organic Post Template
channel: facebook
priority: 1
language: [th, en]
# Field specifications
fields:
primary_text:
max_chars: 5000
recommended_chars: 125-250
thai_note: "Thai text may be longer due to compound words. Aim for 200-400 Thai chars."
headline:
max_chars: 100
recommended_chars: 40-60
description:
max_chars: 100
optional: true
cta:
type: selection
options_th:
- "เรียนรู้เพิ่มเติม"
- "สมัครเลย"
- "ซื้อเลย"
- "ดูรายละเอียด"
- "ลงทะเบียน"
- "ดาวน์โหลด"
options_en:
- "Learn More"
- "Sign Up"
- "Shop Now"
- "See Details"
- "Register"
- "Download"
hashtags:
recommended_count: 3-5
max_count: 30
thai_note: "Use both Thai and English hashtags for broader reach"
image:
recommended_size: "1200x630"
aspect_ratio: "1.91:1"
alternative_sizes:
- "1080x1080" # 1:1 square
- "1080x1350" # 4:5 portrait
formats: ["jpg", "png"]
max_file_size: "30MB"
text_overlay:
recommended: true
thai_text: true
max_text_percent: 20
# Output configuration
output:
variations: 5
format: json
include_api_metadata: true
# Quality requirements
quality:
min_score: 70
checks:
- keyword_density
- brand_voice_alignment
- thai_formality_level
- cta_clarity
- hashtag_relevance
# API readiness (for future Meta Graph API integration)
api_ready:
platform: meta
api_version: v18.0
endpoint: "/act_{ad_account_id}/adcreatives"
method: POST
field_mapping:
primary_text: body
headline: title
cta: call_to_action.type
image: story_id or link_data.picture

View File

@@ -0,0 +1,121 @@
# Facebook Ads Template
channel: facebook_ads
priority: 2
language: [th, en]
# Field specifications (matches Meta Ads API structure)
fields:
primary_text:
max_chars: 5000
recommended_chars: 125
thai_note: "Thai text can be slightly longer. Focus on benefit in first 125 chars."
headline:
max_chars: 40
recommended_chars: 25-30
thai_note: "Thai characters may display differently. Test on mobile."
description:
max_chars: 90
recommended_chars: 60-75
optional: true
thai_note: "Additional context below headline"
cta:
type: selection
button_types:
- "LEARN_MORE" # เรียนรู้เพิ่มเติม
- "SHOP_NOW" # ซื้อเลย
- "SIGN_UP" # ลงทะเบียน
- "CONTACT_US" # ติดต่อเรา
- "DOWNLOAD" # ดาวน์โหลด
- "GET_QUOTE" # ขอใบเสนอราคา
image:
recommended_size: "1080x1080" # 1:1 square (best for feed)
alternative_sizes:
- "1200x628" # 1.91:1 link
- "1080x1920" # 9:16 stories/reels
aspect_ratios: ["1:1", "1.91:1", "9:16", "4:5"]
formats: ["jpg", "png", "gif", "mp4", "mov"]
max_file_size: "30MB"
video_specs:
max_duration: "240 minutes"
recommended_duration: "15-60 seconds"
carousel:
enabled: true
min_cards: 2
max_cards: 10
card_specs:
image_size: "1080x1080"
headline_max_chars: 40
description_max_chars: 90
audience_targeting:
location: ["Thailand", "specific provinces"]
age_range: "18-65+"
interests: []
behaviors: []
custom_audiences: []
lookalike_audiences: []
placement:
automatic: true
manual_options:
- "facebook_feed"
- "facebook_stories"
- "instagram_feed"
- "instagram_stories"
- "messenger"
- "audience_network"
budget:
type: ["daily", "lifetime"]
currency: "THB"
min_daily: 50
min_lifetime: 500
# Output configuration
output:
variations: 5
format: json
include_api_metadata: true
ready_for_import: true
# Quality requirements
quality:
min_score: 75
checks:
- keyword_density
- brand_voice_alignment
- thai_formality_level
- cta_clarity
- compliance_check
- landing_page_relevance
# API readiness (for future Meta Ads API integration)
api_ready:
platform: meta
api_version: v18.0
endpoints:
creative: "/act_{ad_account_id}/adcreatives"
ad: "/act_{ad_account_id}/ads"
adset: "/act_{ad_account_id}/adsets"
campaign: "/act_{ad_account_id}/campaigns"
field_mapping:
primary_text: body
headline: title
description: description
cta: call_to_action.type
image: object_story_id or link_data
audience: targeting
placement: placements
budget: daily_budget or lifetime_budget
future_integration_notes:
- "Add pixel_id for conversion tracking"
- "Add conversion_event for optimization goal"
- "Add bid_strategy for bid optimization"
- "Add frequency_cap for reach campaigns"

View File

@@ -0,0 +1,158 @@
# Google Ads Template
channel: google_ads
priority: 3
language: [th, en]
# Field specifications (matches Google Ads API structure)
fields:
headlines:
count: 15
max_chars: 30
thai_note: "Thai characters may display differently. Test on mobile."
pin_options:
enabled: true
positions: [1, 2, 3]
descriptions:
count: 4
max_chars: 90
thai_note: "Use full 90 chars for Thai to convey complete message"
pin_options:
enabled: true
positions: [1, 2]
keywords:
suggested_count: 15-20
match_types:
- exact: "[keyword th]"
- phrase: '"keyword th"'
- broad: "keyword th"
- negative: "-keyword th"
negative_keywords:
suggested_count: 10-15
purpose: "Exclude irrelevant traffic"
ad_extensions:
sitelinks:
count: 4
fields:
- link_text: "25 chars"
- description_line_1: "35 chars"
- description_line_2: "35 chars"
- final_url: "full URL"
callouts:
count: 4
max_chars: 25
examples_th:
- "รองรับภาษาไทย"
- "ทีมซัพพอร์ท 24/7"
- "ยกเลิกเมื่อไหร่ก็ได้"
structured_snippets:
header: ["Brands", "Services", "Types", etc.]
values:
count: 4-10
max_chars: 25
call_extension:
phone_number: "+66 XX XXX XXXX"
country_code: "TH"
location_extension:
business_name: "string"
address: "string"
# Campaign settings
campaign:
type: "SEARCH"
advertising_channel_sub_type: "SEARCH_STANDARD"
bidding:
strategy: "MAXIMIZE_CLICKS"
target_cpa: null
target_roas: null
budget:
type: "DAILY"
amount: 1000 # THB
delivery_method: "STANDARD"
networks:
google_search: true
search_partners: true
display_network: false
location_targeting:
- "Thailand"
- optional: specific provinces
language_targeting:
- "Thai"
- "English"
# Audience signals (for Performance Max campaigns)
audience_signals:
custom_segments:
- based_on: "keywords or URLs"
interest_categories: []
remarketing_lists: []
customer_match_lists: []
# Output configuration
output:
variations: 3 # Complete RSA variations
format: json
include_api_metadata: true
ready_for_import: true
# Quality requirements
quality:
min_score: 75
checks:
- keyword_relevance
- headline_diversity
- cta_clarity
- landing_page_relevance
- policy_compliance
- thai_language_quality
# API readiness (for future Google Ads API integration)
api_ready:
platform: google
api_version: v15.0
service: "GoogleAdsService"
endpoint: "/google.ads.googleads.v15.services/GoogleAdsService:Mutate"
resource_hierarchy:
- customer
- campaign
- ad_group
- ad_group_ad
- ad (RESPONSIVE_SEARCH_AD)
field_mapping:
headlines: responsive_search_ad.headlines
descriptions: responsive_search_ad.descriptions
final_url: responsive_search_ad.final_urls
display_path: responsive_search_ad.path1, path2
keywords: ad_group_criterion
bid_modifier: ad_group_criterion.cpc_bid_modifier
future_integration_notes:
- "Add conversion_tracking_setup"
- "Add value_track_parameters"
- "Add ad_schedule_bid_modifiers"
- "Add device_bid_modifiers"
- "Add location_bid_modifiers"
- "Setup enhanced conversions"
# Compliance
compliance:
google_ads_policies:
- "No misleading claims"
- "No prohibited content"
- "Trademark compliance"
- "Editorial requirements"
- "Destination requirements"
thailand_specific:
- "FDA approval for health products"
- "No gambling content"
- "No adult content"
- "Consumer Protection Board compliance"

View File

@@ -0,0 +1,197 @@
# X (Twitter) Thread Template
channel: x_twitter
priority: 5
language: [th, en]
# Thread structure
structure:
thread_length:
min_tweets: 5
max_tweets: 10
optimal_tweets: 7-8
tweet_types:
- hook_tweet:
position: 1
max_chars: 280
purpose: "Grab attention, promise value"
thai_note: "Thai may need more chars due to compound words"
- context_tweet:
position: 2
max_chars: 280
purpose: "Set context, explain why this matters"
- body_tweets:
position: "3 to (n-2)"
count: "2-6"
max_chars: 280
purpose: "Deliver main content, one idea per tweet"
- summary_tweet:
position: "n-1"
max_chars: 280
purpose: "Summarize key points"
- cta_tweet:
position: n
max_chars: 280
purpose: "Call-to-action, engagement question"
# Tweet specifications
tweet:
max_chars: 280
thai_considerations:
- "Thai characters count as 1 char each"
- "No spaces between words - can pack more meaning"
- "Recommended: 200-250 Thai chars for readability"
hashtags:
recommended_count: 2-3
max_count: 5
placement: "end_of_tweet"
thai_english_mix: true
emojis:
recommended: true
per_tweet: "1-3"
purpose: "Visual break, emphasis"
mentions:
max_recommended: 2
placement: "end_of_tweet"
media:
images:
count: "1-4 per tweet"
size: "1200x675 (16:9) or 1080x1080 (1:1)"
video:
max_duration: "2min 20sec"
recommended: "30-90sec"
size: "1280x720 or 1920x1080"
thread_title:
optional: true
format: "image_with_text"
purpose: "Hook before first tweet"
# Hook formulas
hooks:
curiosity:
- "I was wrong about [common belief]."
- "The real reason [outcome] happens isn't what you think."
- "[Impressive result] — and it only took [short time]."
story:
- "Last week, [unexpected thing] happened."
- "3 years ago, I [past state]. Today, [current state]."
value:
- "How to [outcome] (without [pain]):"
- "[Number] [things] that [result]:"
- "Stop [mistake]. Do this instead:"
contrarian:
- "Unpopular opinion: [bold statement]"
- "[Common advice] is wrong. Here's why:"
# Engagement optimization
engagement:
best_posting_times:
thailand:
- "7:00-9:00 (morning commute)"
- "12:00-13:00 (lunch break)"
- "19:00-21:00 (evening)"
global:
- "9:00-12:00 EST"
posting_frequency:
threads_per_week: "2-4"
replies_per_day: "10-20"
follow_up:
reply_to_comments: true
pin_best_thread: true
cross_promote: true
# Output configuration
output:
variations: 3 # Complete thread variations
format: json
include_thread_title: true
include_visual_suggestions: true
# Quality requirements
quality:
min_score: 70
checks:
- hook_strength
- value_density
- clarity
- engagement_potential
- thai_language_quality
- brand_voice_alignment
# API readiness (for future Twitter API v2 integration)
api_ready:
platform: twitter
api_version: "2.0"
endpoint: "/2/tweets"
method: POST
field_mapping:
text: tweet.text
media: tweet.media.media_keys
reply_settings: tweet.reply_settings
thread: "use in_reply_to_user_id"
future_integration_notes:
- "Add media upload via POST /2/media"
- "Use media_keys to attach to tweet"
- "For threads: chain tweets with in_reply_to_user_id"
- "Add poll creation support"
- "Add quote_tweet support"
- "Schedule tweets with scheduled_at"
# Thread templates
templates:
how_to_thread:
structure:
- "Hook: How to [outcome] without [pain]"
- "Context: Why this matters"
- "Step 1"
- "Step 2"
- "Step 3"
- "Step 4"
- "Summary + CTA"
list_thread:
structure:
- "Hook: [Number] [things] that [result]"
- "Context: Why these matter"
- "Item 1 + explanation"
- "Item 2 + explanation"
- "Item 3 + explanation"
- "Item 4 + explanation"
- "Item 5 + summary"
story_thread:
structure:
- "Hook: Story setup"
- "Background context"
- "Challenge/problem"
- "Action taken"
- "Result"
- "Lesson learned"
- "CTA for engagement"
contrarian_thread:
structure:
- "Hook: Unpopular opinion"
- "Common belief"
- "Why it's wrong"
- "Better alternative"
- "Evidence/examples"
- "Actionable advice"
- "Question for engagement"