Major changes: - Replace Nitter RSS with Playwright browser automation for direct X scraping - Scrape all 37 configured tech accounts in parallel - Add OpenRouter AI integration for topic-based summaries (xiaomi/mimo-v2-flash:free model) - Update prompts for factual, emotion-free analysis with post links - Add console output for newsletter preview in dry-run mode - Update Dockerfile to Playwright v1.57.0 with necessary browser dependencies - Implement WRAP workflow method for AI-assisted development guidance Technical improvements: - Fixed TypeScript compilation (unused parameter in XScraper) - Newsletter pipeline successfully processes 37 accounts -> AI summaries -> HTML email - Full end-to-end test validated: scraping, processing, AI generation, email template Pipeline flow: 1. Scrape X profiles with Playwright (parallel, configurable timeout) 2. Filter tweets by time window and content type 3. Categorize into AI/ML, Software Engineering, Tech & Startups 4. Generate AI summaries for each topic 5. Create cross-topic daily insights 6. Render HTML newsletter with highlights and trending topics 7. Send via email (or print to console in dry-run mode) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
53 lines
1.2 KiB
JSON
53 lines
1.2 KiB
JSON
{
|
|
"name": "x-newsletter",
|
|
"version": "1.0.0",
|
|
"description": "Daily tech newsletter from X/Twitter via Nitter RSS feeds with AI summaries",
|
|
"main": "dist/index.js",
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "tsc",
|
|
"start": "node dist/index.js",
|
|
"dev": "tsx src/index.ts",
|
|
"run-now": "tsx src/index.ts --run-now",
|
|
"dry-run": "tsx src/index.ts --run-now --dry-run"
|
|
},
|
|
"keywords": [
|
|
"newsletter",
|
|
"twitter",
|
|
"x",
|
|
"rss",
|
|
"ai",
|
|
"automation"
|
|
],
|
|
"author": "",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"axios": "^1.7.9",
|
|
"playwright": "^1.49.1",
|
|
"date-fns": "^4.1.0",
|
|
"date-fns-tz": "^3.2.0",
|
|
"dotenv": "^16.4.7",
|
|
"he": "^1.2.0",
|
|
"node-cron": "^3.0.3",
|
|
"nodemailer": "^6.9.16",
|
|
"openai": "^4.77.0",
|
|
"pino": "^9.6.0",
|
|
"rss-parser": "^3.13.0",
|
|
"sanitize-html": "^2.14.0",
|
|
"zod": "^3.24.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/he": "^1.2.3",
|
|
"@types/node": "^22.10.5",
|
|
"@types/node-cron": "^3.0.11",
|
|
"@types/nodemailer": "^6.4.17",
|
|
"@types/sanitize-html": "^2.13.0",
|
|
"pino-pretty": "^13.0.0",
|
|
"tsx": "^4.19.2",
|
|
"typescript": "^5.7.2"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0"
|
|
}
|
|
}
|