A CLI tool that fetches articles from fintech, stablecoin, and MENA RSS feeds, scores each one with the Kimi K2 AI model, and saves the best picks to a Notion database. Run it every morning, then open Notion to draft your LinkedIn post.
npm install
cp .env.example .envFill in your API keys in .env (see below).
node briefing.js
# or
npm startRun time is typically 3–5 minutes depending on how many new items need scoring.
| Variable | Where to get it |
|---|---|
MOONSHOT_API_KEY |
Moonshot API console |
NOTION_TOKEN |
Notion integrations — create an integration, then share your database with it |
NOTION_DB_ID |
The 32-character ID in your Notion database URL (with or without hyphens) |
Create a database with these properties (exact names and types):
| Property Name | Type |
|---|---|
| Title | title |
| Source | rich_text |
| URL | url |
| Score | number |
| Pillar | select |
| Format | select |
| Relevance Reason | rich_text |
| Suggested Angle | rich_text |
| Draft Hook | rich_text |
| Verification Needed | rich_text |
| Status | select |
| Date Added | date |
Select options:
- Pillar:
infrastructure,mena,commentary,none - Format:
Deconstruction,Contrarian,News Reaction,MENA Spotlight,Lesson,List,Schema - Status:
New(and any others you want for your workflow)
| Variable | Default | Description |
|---|---|---|
MIN_SCORE |
7 |
Only save items scoring at or above this (1–10) |
MAX_ITEMS |
60 |
Max items to score per run (controls API cost) |
Lower MIN_SCORE to capture more items; raise it to be more selective. Lower MAX_ITEMS to reduce API spend on busy days.
Edit the RSS_SOURCES array at the top of briefing.js:
{ name: 'Your Source', url: 'https://example.com/feed.xml' },Each source fetches up to 15 recent items. Failed sources are logged and skipped.
The script tracks URLs it has already scored in seen_urls.json (gitignored). On subsequent runs, those items are skipped so you do not pay to re-score the same article.
To reset and re-score everything, delete the file:
rm seen_urls.jsonThe file is capped at 2000 URLs; older entries are trimmed automatically.