- 9 mm* skills (orchestrator, article, social, publish, analytics) - 6 dependency skills (content-writer, geo-optimizer, etc.) - 3 analytics scripts (GSC, Google Ads, Meta Ads) - Config template + setup guide - SOUL-MM.md persona extension - OrbitOS integration reference
369 lines
10 KiB
Markdown
369 lines
10 KiB
Markdown
---
|
|
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/<client-id>
|
|
mkdir -p ~/vault/30_Research/<client-id>/Archive
|
|
mkdir -p ~/vault/60_Articles/<client-id>
|
|
mkdir -p ~/vault/60_Articles/<client-id>/Archive
|
|
```
|
|
|
|
### 5. Confirm
|
|
|
|
```
|
|
✅ ลูกค้าใหม่: [display_name]
|
|
📞 ติดต่อ: [contact summary]
|
|
💬 CTA: [cta_text]
|
|
📂 Folders created: 30_Research/<id>/ + 60_Articles/<id>/
|
|
```
|
|
|
|
## 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/<client-id>/** 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/<client-id>/** 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/<client-id>/YYYY-MM-DD-<slug>/brief.md
|
|
```
|
|
|
|
```markdown
|
|
---
|
|
type: brief
|
|
status: ready
|
|
created: YYYY-MM-DD
|
|
related_client: "<client-id>"
|
|
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/<client-id>/<date>-<slug>/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/<client-id>/` for existing articles to avoid duplication
|
|
- Save research notes to `30_Research/<client-id>/` if the research is substantial enough
|
|
(use orbites-parse-knowledge skill for that)
|