--- name: mm-article-idea-extract description: > Data Stage B: Take an article idea, research it thoroughly (vault + internet), iterate with the user on focus areas and angles, then produce a complete brief.md. Use when: "มีไอเดียบทความ", "article idea", "อยากเขียนเรื่อง", "extract article idea", "prepare article topic", "เตรียมหัวข้อเขียนบทความ". --- # Article Idea Extract & Prepare Takes an article idea, researches it deeply, iterates with the user, and produces a complete article brief ready for the content writer. ## When This Must Trigger - "มีไอเดียบทความ", "article idea", "อยากเขียนเรื่อง" - "extract article idea", "prepare article topic" - "เตรียมหัวข้อเขียนบทความ", "research ก่อนเขียน" - User provides a topic/keyword/concept and wants to write about it ## Client Onboarding (when adding new client) When user selects "ลูกค้าใหม่", run this flow: ### 1. Collect basic info ``` ชื่อลูกค้า: [name] URL เว็บไซต์: [url] ประเภท: astro / wordpress ``` ### 2. Browse website → extract contact info Fetch the website and extract contact information: - **Phone**: look for tel:, phone patterns (0xx-xxx-xxxx) - **Email**: look for mailto:, email patterns - **LINE**: look for LINE ID (@xxx, line.me links) - **Facebook**: look for facebook.com/ links - **Address**: look for address patterns, Google Maps links - **Website URL**: the main URL Save extracted contact to clients-config.json: ```python config_path = os.path.expanduser("~/vault/99_System/clients-config.json") config = json.load(open(config_path)) new_client = { "id": client_id, "display_name": display_name, "contact": { "phone": extracted_phone, "email": extracted_email, "line": extracted_line, "facebook_url": extracted_facebook, "website_url": website_url, "address": extracted_address, "cta_text": "" # generate below }, "website": { "type": website_type, "url": website_url, "categories": [], "categories_cached_at": None }, "social": { "facebook": {}, "instagram": {}, "x": {} }, "analytics": {} } config['clients'].append(new_client) json.dump(config, open(config_path, 'w'), indent=2, ensure_ascii=False) ``` ### 3. Generate CTA text Based on extracted contact, generate a default CTA: - If LINE: "สอบถามเพิ่มเติม ทัก LINE: @{line_id}" - If phone: "ติดต่อ {phone}" - If email: "อีเมล {email}" - If facebook: "Inbox Facebook: {facebook_url}" - Combine available channels ### 4. Create per-client folders ```bash mkdir -p ~/vault/30_Research/ mkdir -p ~/vault/30_Research//Archive mkdir -p ~/vault/60_Articles/ mkdir -p ~/vault/60_Articles//Archive ``` ### 5. Confirm ``` ✅ ลูกค้าใหม่: [display_name] 📞 ติดต่อ: [contact summary] 💬 CTA: [cta_text] 📂 Folders created: 30_Research// + 60_Articles// ``` ## Process ### Step 1: Receive the idea and determine client The user provides an idea in any form: - A keyword (e.g., "AI marketing") - A concept (e.g., "ทำไมธุรกิจเล็กควรใช้ AI") - A question (e.g., "CMS ตัวไหนดีที่สุดสำหรับบล็อก?") - A rough topic (e.g., "เขียนเรื่อง WordPress vs Astro") First, determine which client this article is for: ``` บทความนี้สำหรับลูกค้าไหน? 1. [client-1] — [display_name] 2. [client-2] — [display_name] ... N. ลูกค้าใหม่ — เพิ่มข้อมูลลูกค้า ``` **If new client selected**: run the Client Onboarding flow (see below). Extract the core topic and ask: ``` ได้ไอเดีย: [topic] ขอถามเพิ่มเติมก่อนเริ่ม research: 1. กลุ่มเป้าหมายบทความนี้คือใคร? 2. อยากให้บทความนี้ตอบคำถามอะไร? 3. มีมุมมองเฉพาะที่อยากเน้นไหม? 4. โทน: ทางการ / casual / technical / beginner-friendly? ``` ### Step 2: Vault Research (existing knowledge) Search the vault for related content. Search BOTH client-specific and general: 1. **Search 30_Research//** for client's research notes 2. **Search 30_Research/general/** for general research notes 3. **Search 30_Research/** for any other relevant research 4. **Search 60_Articles//** for existing articles (avoid duplication) Present findings: ``` 📚 ข้อมูลที่มีอยู่แล้วใน vault: Research: - [[Related Research 1]] — 30_Research/... - [[Related Research 2]] — 30_Research/... Wiki Concepts: - [[Concept 1]] — brief summary - [[Concept 2]] — brief summary บทความที่มีแล้ว (หลีกเลี่ยงซ้ำ): - [[Existing Article]] — เขียนเมื่อ YYYY-MM-DD ข้อมูลที่ขาด: [what's missing that we need to research] ``` ### Step 3: Internet Research Search the internet for current information: 1. **Web search** the topic in Thai and English 2. **Find statistics** — recent data, studies, surveys 3. **Find examples** — case studies, real-world applications 4. **Find expert opinions** — quotes, interviews, articles 5. **SERP analysis** — what currently ranks for this topic 6. **Trends** — is this topic trending? Any recent developments? Organize findings by category: ``` 🌐 Internet Research Results: สถิติ/ข้อมูล: - [stat 1] — source: [url] - [stat 2] — source: [url] ตัวอย่าง/Case Studies: - [example 1] - [example 2] มุมมองผู้เชี่ยวชาญ: - [expert quote] — [who], [source] SERP Analysis (Top 5 สำหรับ "[keyword]"): 1. [title] — [url] — ครอบคลุม: [what they cover] 2. ... สิ่งที่ขาดในบทความที่มีอยู่: [content gap opportunity] ``` ### Step 4: Present and iterate on angles Combine vault + internet research, present to user: ``` 📊 สรุปข้อมูลทั้งหมด: หัวข้อ: [topic] กลุ่มเป้าหมาย: [audience] มุมที่น่าเขียน: 1. [Angle A] — [why this angle works] 2. [Angle B] — [why this angle works] 3. [Angle C] — [why this angle works] เลือกมุมที่ต้องการ (หรือเสนอเพิ่ม): ``` After user selects, ask: ``` มุมที่เลือก: [selected angle] ต้องการเพิ่มประเด็นไหนอีกไหม? - ประเด็นที่อยากเน้นเป็นพิเศษ? - ข้อมูลที่อยากให้มีในบทความ? - คำถามที่อยากให้บทความตอบ? ``` ### Step 5: Deep research on selected angle Based on the selected angle, do targeted research: 1. Search for more specific information on the angle 2. Find supporting data for each key point 3. Look for counter-arguments to address 4. Find visual素材 opportunities (charts, diagrams, screenshots) ### Step 6: Iterate until complete Loop Steps 4-5 until: - User says "พอแล้ว" / "complete" / "ready" - No more angles to explore - Sufficient data collected Present final summary: ``` 📋 Final Research Summary: หัวข้อ: [topic] มุม: [angle] กลุ่มเป้าหมาย: [audience] โทน: [tone] ประเด็นที่จะเขียน: 1. [Point 1] — supported by [data] 2. [Point 2] — supported by [data] 3. [Point 3] — supported by [data] ข้อมูลสนับสนุน: - [stat/data 1] — source: [url] - [stat/data 2] — source: [url] Outline ที่แนะนำ: H1: [Title] H2: [Section 1] H2: [Section 2] H2: [Section 3] H2: FAQ สร้าง brief.md เลยไหม? ``` ### Step 7: Create brief.md Create the article brief at: ``` ~/vault/60_Articles//YYYY-MM-DD-/brief.md ``` ```markdown --- type: brief status: ready created: YYYY-MM-DD related_client: "" source_research: "" source_path: "" related_vault_notes: - "[[Note 1]]" - "[[Note 2]]" --- # Article Brief: [Topic] ## Source - Research: Internet + Vault synthesis - Related notes: [[Note 1]], [[Note 2]] ## Target - Audience: [who] - Tone: [formal/casual/technical] - Length: [target word count] - SEO Keyword: [primary keyword] ## Key Angles 1. [Angle 1] 2. [Angle 2] 3. [Angle 3] ## Outline ### H1: [Proposed title] ### H2: [Section 1] - [Key point] — supported by: [data source] ### H2: [Section 2] - [Key point] — supported by: [data source] ### H2: [Section 3] - [Key point] — supported by: [data source] ### H2: FAQ - [Question 1] - [Question 2] ## Research Data ### Statistics - [stat 1] — source: [url] - [stat 2] — source: [url] ### Expert Quotes - "[quote]" — [who], [source] ### Examples/Case Studies - [example 1] ### SERP Gaps - [what competitors miss that we can cover] ## Related Content - [[Related Note 1]] - [[Related Note 2]] ## Content Requirements - Featured image: [description] - Inline images: [list with descriptions] - FAQ section: yes - Schema markup: Article/BlogPosting + FAQPage ``` ### Step 8: Confirm ``` ✅ Brief created: ~/vault/60_Articles/YYYY-MM-DD-slug/brief.md ✅ Ready for content writing ถัดไป: โหลด content-writer-mm skill เพื่อเริ่มเขียนบทความ ``` ## Output - `~/vault/60_Articles//-/brief.md` — Article brief ready for mm-content-writer ## Notes - This skill does NOT create the article — it only prepares the brief - The brief is the contract between Data Stage and Content Stage - Internet research is mandatory — don't rely only on vault content - Always check `60_Articles//` for existing articles to avoid duplication - Save research notes to `30_Research//` if the research is substantial enough (use orbites-parse-knowledge skill for that)