Initial commit: moreminimore-service content pipeline
- 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
This commit is contained in:
368
skills/mm-article-idea-extract/SKILL.md
Normal file
368
skills/mm-article-idea-extract/SKILL.md
Normal file
@@ -0,0 +1,368 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user