Skip to content

Repository files navigation

TechPulse

A desktop widget that aggregates RSS feeds from tech news sites and classifies articles using AI. Built with Electron, React, and TypeScript.

Electron React TypeScript Tailwind CSS

Features

AI-Powered Classification

  • 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

User Topics & AI Digests

  • 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

In-App Article Reader

  • 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)

Feed Management

  • 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

Smart UI

  • 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

Data Management

  • 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

Security

  • 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.openExternal restricted to http(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

Tech Stack

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

Getting Started

Prerequisites

  • Node.js 18+
  • npm

Install

git clone https://github.com/YacineAyari/TechPulse.git
cd TechPulse
npm install

Development

npm run dev

Build

npm run build      # Compile TypeScript + bundle
npm run package    # electron-builder installer

Test

npm run test       # Run unit tests
npm run test:watch # Watch mode

AI Setup

Claude API (cloud):

  1. Open Settings (S)
  2. Select "Claude API"
  3. Enter your Anthropic API key
  4. Choose a model (Haiku, Sonnet, or Opus)

Local AI:

  1. Start a local runtime (e.g. ollama serve)
  2. Open Settings (S)
  3. Select "Local AI"
  4. Choose a preset or set a custom endpoint
  5. Click "Test Connection"

DNS Ad-Blocking

  1. Open Settings (S)
  2. Under Display > DNS, select AdGuard, Cloudflare Security, Quad9, or a custom DoH server
  3. Restart the app to apply

Default Feeds

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

License

MIT

About

RSS feed aggregator powered by AI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages