# 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-/ │ ├── 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-/ ... ``` ## Article Frontmatter Template ```yaml --- 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: ```bash curl -sL --max-time 20 "" | python3 -c " import sys, re html = sys.stdin.read() # Strip scripts and styles html = re.sub(r']*>.*?', '', html, flags=re.DOTALL) html = re.sub(r']*>.*?', '', html, flags=re.DOTALL) # Try to get
content first match = re.search(r']*>(.*?)
', 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_navigate` → `browser_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 `` elements specifically; the `head -300` approach in the newsletter skill truncates at a fixed line count, so use `python3 -c` for proper XML parsing.