Update skills: add website-creator, mql-developer, ecommerce-astro
Changes: - Add FAL_KEY and GEMINI_API_KEY to .env.example - Update picture-it to use ~/.config/opencode/.env (unified creds) - Remove shodh-memory skill (no longer used) - Remove alphaear-* skills (deprecated) - Remove thai-frontend-dev skill (replaced by website-creator) - Remove theme-factory skill - Add mql-developer skill (MQL5 trading) - Add ecommerce-astro skill (Astro e-commerce) - Add website-creator skill (Next.js + Payload CMS) - Update install script for new skills
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user