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
This commit is contained in:
Kunthawat Greethong
2026-07-02 10:13:46 +07:00
parent 7bf147069e
commit ddac3f187c
45 changed files with 2695 additions and 197 deletions

View File

@@ -0,0 +1,64 @@
# Article Curation Workflow — Daily Digest → 30_Research/
## Why
The daily digest generates a raw dump in `50_Resources/Newsletters/YYYY-MM/Raw/`.
The user confirmed that high-value articles should **not** stay in Raw/ — they belong in `30_Research/` as permanent reference files.
User's exact words: *"จำเรื่องนี้ไว้เลยนะ"* (remember this). The confirmed flow:
```
Raw/ (temp cache)
↓ select high-value articles
30_Research/<slug-title>.md (permanent)
Referenced from future digest or content planning
```
## Selection Criteria
From the digest's Content Creation Opportunities section or notable articles:
- High content creation potential (LinkedIn post, blog, tutorial)
- Novel research or data-driven insights
- Actionable for the user's SEO/marketing work (brand visibility, AI search, GEO)
- Topic fits the user's niche (AI × Marketing, SEO, agentic systems)
## File Format
```markdown
---
type: article
source: https://example.com/article
source_digest: "[[50_Resources/Newsletters/YYYY-MM/YYYY-MM-DD-Digest]]"
captured: YYYY-MM-DD
tags: [article, ai-marketing, brand-visibility]
---
# [Article Title]
## Key Takeaways
- ...
- ...
## Why This Matters for Moreminimore
- ...
- ...
## Action Items
- [ ] Consider for LinkedIn post
- [ ] Reference in [project name] content plan
```
## Cleanup
- Remove the source raw file from `Raw/` after migrating
- If multiple articles from same raw file, remove after last migration
- Keep the digest itself (it's the curated summary, not the cache)
## Example
Article `chatgpt-opens-ads-all.md` was moved from:
```
50_Resources/Newsletters/2026-06/Raw/ → 30_Research/chatgpt-opens-ads-all.md
```

View File

@@ -0,0 +1,138 @@
# 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
```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 "<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_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/<slug>/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.