A desktop widget that aggregates RSS feeds from tech news sites and classifies articles using AI. Built with Electron, React, and TypeScript.
- Automatically classifies articles into 10 categories: AI/ML, Hardware, OS, Security, Software, Cloud, Mobile, Gaming, Business, Science
- Supports Claude API (cloud) and local AI (Ollama, OpenVINO, LM Studio, llama.cpp, and more)
- Auto-fallback: if the primary provider fails, the other is tried automatically
- Batch processing with progress bar
- Create custom topics to track specific subjects (e.g. "RAM price increase", "Apple Vision Pro")
- AI matches articles to your topics during classification
- Dedicated topic toolbar to filter articles across all categories
- Scan existing articles to retroactively match new topics
- Topic Digests: generate AI-powered summaries of the latest or today's articles for any topic, with source citations
- Read articles directly inside TechPulse with a built-in webview panel
- Slide-in animation from left or right based on window position
- Ad-blocking via configurable DNS-over-HTTPS (AdGuard, Cloudflare, Quad9, or custom)
- Optional cookie banner blocker (CSS + JS injection)
- Isolated webview session (partition)
- 14 pre-configured tech news feeds (Ars Technica, The Verge, TechCrunch, Hacker News, and more)
- Add/remove/toggle feeds
- OPML import/export
- Cross-feed article deduplication via URL normalization
- Compact always-on-top widget (420x680, resizable)
- Category toolbar with hover-expand, auto-scroll, and latest article counts sorted by activity
- Time-grouped article list (Latest, Today, Yesterday, This Week, etc.) with virtual scrolling
- Site favicons on articles with category icon fallback
- Dark / Light / System theme
- Keyboard shortcuts: arrow keys (categories), R (refresh), F (feeds), T (topics), S (settings), Escape (close panels)
- Non-blocking refresh with progress indicator
- Desktop notifications for new articles
- System tray with context menu
- React error boundaries for resilient UI
- SQLite database with WAL mode for performance
- Configurable article retention (1-30 days)
- Automatic cleanup of old articles and digests
- Bookmarks exempt from retention cleanup
- API keys encrypted at rest via Electron
safeStorage(OS keychain) - IPC input validation on all channels (type checks, bounds, whitelist)
- Settings key whitelist — only known keys can be read/written from renderer
shell.openExternalrestricted tohttp(s)://only- Feed URLs validated (HTTP/HTTPS only)
- AI classification results validated against known category slugs
- Webview session isolated via partition
- Context isolation enabled, no
nodeIntegration
| Component | Technology |
|---|---|
| Runtime | Electron 33+ |
| Frontend | React 18 + TypeScript + Tailwind CSS |
| Build | electron-vite (Vite for main & renderer) |
| Scrolling | @tanstack/react-virtual |
| RSS | rss-parser |
| AI (Cloud) | @anthropic-ai/sdk (Claude API) |
| AI (Local) | Any OpenAI-compatible REST endpoint |
| Database | better-sqlite3 |
| Scheduler | node-cron |
| Testing | Vitest |
| Packaging | electron-builder |
- Node.js 18+
- npm
git clone https://github.com/YacineAyari/TechPulse.git
cd TechPulse
npm installnpm run devnpm run build # Compile TypeScript + bundle
npm run package # electron-builder installernpm run test # Run unit tests
npm run test:watch # Watch modeClaude API (cloud):
- Open Settings (S)
- Select "Claude API"
- Enter your Anthropic API key
- Choose a model (Haiku, Sonnet, or Opus)
Local AI:
- Start a local runtime (e.g.
ollama serve) - Open Settings (S)
- Select "Local AI"
- Choose a preset or set a custom endpoint
- Click "Test Connection"
- Open Settings (S)
- Under Display > DNS, select AdGuard, Cloudflare Security, Quad9, or a custom DoH server
- Restart the app to apply
| Source | URL |
|---|---|
| Ars Technica | feeds.arstechnica.com |
| The Verge | theverge.com/rss |
| TechCrunch | techcrunch.com/feed |
| Hacker News | hnrss.org/frontpage |
| Tom's Hardware | tomshardware.com/feeds |
| Bleeping Computer | bleepingcomputer.com/feed |
| The Register | theregister.com/headlines.atom |
| 9to5Mac | 9to5mac.com/feed |
| Android Authority | androidauthority.com/feed |
| Phoronix | phoronix.com/rss.php |
| VentureBeat | venturebeat.com/feed |
| Wired | wired.com/feed/rss |
| MIT Tech Review | technologyreview.com/feed |
| KrebsOnSecurity | krebsonsecurity.com/feed |
MIT