Real AI news scraped from 8 top tech sources, rewritten by Claude AI into kid-friendly language at 3 reading levels.
npm installcp .env.example .env
# Open .env and add your ANTHROPIC_API_KEY# Development (auto-restart on file change)
npm run dev
# Production
npm startOpen http://localhost:3000 in your browser.
Every 2 hours (configurable):
┌─────────────────────────────────────────────┐
│ 1. Scrape 8 RSS feeds in parallel │
│ VentureBeat, The Verge, TechCrunch, │
│ Ars Technica, Wired, IEEE Spectrum, │
│ AI News, Synced Review │
│ │
│ 2. Deduplicate + sort newest-first │
│ Keep top 24 articles │
│ │
│ 3. Send batches to Claude Sonnet │
│ Rewrite for 3 age levels: │
│ young → Ages 6–8 │
│ middle → Ages 9–12 │
│ older → Ages 13+ │
│ │
│ 4. Cache in memory │
│ Frontend polls /api/news every 5 min │
└─────────────────────────────────────────────┘
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/news |
Get articles. Params: level, category, limit |
GET |
/api/status |
Server health + cache info |
POST |
/api/admin/refresh |
Force re-scrape (requires x-admin-secret header) |
Example:
GET /api/news?level=middle&category=robots&limit=6
- Push to GitHub
- Connect repo to your platform
- Set environment variables from
.env.example - Deploy — it auto-runs
npm start
npm install -g pm2
pm2 start server.js --name kids-ai-buzz
pm2 save && pm2 startupserver {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}- Add more RSS feeds → edit
RSS_FEEDSarray inserver.js - Change refresh rate → set
REFRESH_CRONin.env - Add email newsletter → wire
nlSignup()inpublic/index.htmlto Mailchimp/Resend/ConvertKit - Add a database → swap the in-memory
cacheobject for SQLite or Postgres
- Backend: Node.js + Express
- Scraping: rss-parser (8 feeds)
- AI rewriting: Anthropic Claude Sonnet
- Caching: in-memory (swap for Redis in production)
- Scheduling: node-cron
- Security: helmet, express-rate-limit, cors