Files
moreminimore-service-system/skills/orbitos/orbites-ai-newsletters/references/news-to-article.md
Kunthawat Greethong ddac3f187c Merge OrbitOS into project — one install, everything ready
- Added 15 OrbitOS skills (bundled in skills/orbitos/)
- Added vault structure templates (views, templates, prompts)
- Added install.sh (macOS + Linux)
- Removed references/orbitos-skills.md (no longer needed)
- Updated README: 30 skills total, unified install flow

Total: 9 mm* + 6 dependencies + 15 orbitos = 30 skills
2026-07-02 10:13:46 +07:00

5.4 KiB

News-to-Article Workflow Reference

Full workflow for taking news items / content ideas from a digest and writing in-depth articles.

Article Directory Structure

~/vault/60_Articles/
├── YYYY-MM-DD-<slug>/
│   ├── article.md       # Full article with frontmatter (title, description, date, category, tags, status: draft)
│   ├── brief.md         # Optional: research notes, source summaries, angles considered
│   └── images/          # Featured + inline images
│       └── featured.png
└── YYYY-MM-DD-<slug2>/
    ...

Article Frontmatter Template

---
title: "Hook-driven title (≤ 60 chars, Thai)"
description: "SEO meta description (120-160 chars)"
slug: "yyyy-mm-dd-kebab-case-slug"
date: YYYY-MM-DD
category: SEO | AI | Marketing | Research
author: Macky
tags: [Tag1, Tag2, Tag3, Tag4]
status: draft
---

Research Phase (do this first, before writing)

Step 1: Identify source articles

From the digest's news items, find the original source URLs. Never write from the digest summary alone — always read the originals.

Step 2: Read each source article

Use this curl technique for most sites:

curl -sL --max-time 20 "<URL>" | python3 -c "
import sys, re
html = sys.stdin.read()
# Strip scripts and styles
html = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL)
html = re.sub(r'<style[^>]*>.*?</style>', '', html, flags=re.DOTALL)
# Try to get <article> content first
match = re.search(r'<article[^>]*>(.*?)</article>', html, re.DOTALL)
if match:
    text = re.sub(r'<[^>]+>', ' ', match.group(1))
else:
    text = re.sub(r'<[^>]+>', ' ', html)
text = re.sub(r'\s+', ' ', text).strip()
print(text[:15000])
"

For Cloudflare-protected sites (e.g. VentureBeat):

  • Fall back to browser_navigatebrowser_snapshot(full=true)browser_scroll as needed

Step 3: Extract key data per source

For each source, extract:

  • Numbers — all specific metrics, percentages, dollar amounts
  • Quotes — direct statements from researchers/executives
  • Mechanisms — how something works (the causal chain)
  • Contrasts — before/after, old/new, claimed vs actual

Step 4: Synthesize across sources

Organize findings into a coherent narrative:

  1. What's the core insight/problem each article describes?
  2. How do the sources overlap, complement, or contradict each other?
  3. What's the single actionable takeaway that readers can use today?

Writing Phase

Thai Content Structure (per article)

# [Hook-driven title]

> [Hook paragraph — 1-2 sentences, breaks reader expectation]

## 📚 สารบัญ
- [Section 1]
- [Section 2]
- ...

## [Section 1 — Core insight]
[Data table with comparison columns]
[Explanation paragraph — 2-4 sentences]
📌 [Topic] Takeaway: [Actionable insight in 1-2 sentences]

## [Section 2 — Mechanism]
[Data table with before/after]
[Explanation]
📌 [Topic] Takeaway: [...]

...

## สรุป Actionable Takeaways
| สิ่งที่ต้องทำ | เหตุผล |
|:---|:---|
| ✅ [Action] | [Why — bulletproof reasoning] |
| ❌ [Avoid] | [Why — the trap to dodge] |

---

**ที่มา:**
- [Author], "[Title]" — [Publication], [Date]

Thai Writing Conventions

Element Convention
Title Hook-driven ≤ 60 chars. Curiosity gap or contrarian claim. Include target keyword naturally
Opening Break expectation — "ถ้าคุณคิดว่า X — คุณคิดผิด" / "ไม่ใช่แค่ X — มันคือ Y"
Section labels 📌 "GEO Takeaway" / "Content Strategy Takeaway" / "Business Takeaway"
Tables Comparison columns with emoji indicators ( 🟢 🟡 🔴 🏆)
Code/terms Use backticks for English technical terms (result_source, turn_use_case)
Numbers Bold the headline number — "เร่งความเร็วได้ 85%"
Sources footer "ที่มา:" section listing all source articles as markdown links

Avoid

  • Generic openings: "ในโลกดิจิทัลวันนี้", "ด้วยความก้าวหน้าของเทคโนโลยี"
  • Artificial FAQ sections — don't add them unless the content genuinely raises questions
  • Keyword stuffing — use Thai synonyms naturally
  • Over-explaining — trust the reader to connect simple dots

Pitfalls

  1. web_extract / web_search may not be configured — always have curl+browser fallback ready. Script/security warnings from pipe-to-python are a real risk; get auto-approval or use inline parsing.
  2. Majority of articles are in the 60_Articles//article.md format — check existing structure before saving. Never invent a new format.
  3. Source article may be behind paywall or bot-block — curl can't read everything. Browser tools handle Cloudflare/Vercel. YouTube and social platforms need different approaches.
  4. Content date ≠ publish date — use the source research date or the article's original publication date, not today's date, for the article slug and frontmatter.
  5. Multiple articles from one digest session — batch them in parallel via delegate_task if independent; write sequentially if they share data.
  6. arXiv API returns Atom XML, not RSS — parse <entry> elements specifically; the head -300 approach in the newsletter skill truncates at a fixed line count, so use python3 -c for proper XML parsing.