How luobinger/perkradar works
PerkRadar aggregates fixed public deal feeds into a local SQLite-backed board. Its main workflow runs scheduled or manual refreshes, parses and classifies source items, retains valid results, and serves searchable/filterable deal and health data; users can save favorites and claimed items in browser storage. A separate documented capability publishes merged snapshots for a static viewer. The graph reflects README behavior and shown imports/calls; scheduler, storage, and snapshot publishing internals were not sampled, so those links rely on README statements where indicated.
Main entry points: deal-board.tsx Deal board UI · refresh.ts Refresh orchestration · sources.ts Source fetching · board.ts Board state assembly
Components 26
Collection and refresh
- Refresh scheduler
src/lib/scheduler.ts - Manual refresh API
src/app/api/refresh/route.ts - Refresh orchestration
src/lib/refresh.ts - Source fetching
src/lib/sources.ts - Fixed source definitions
src/lib/source-defs.ts - Feed parsers
src/lib/parse
Deal data and status
- Retention rules
src/lib/retention.ts - Deal classification
src/lib/classify.ts - SQLite database
src/lib/db.ts - Board state assembly
src/lib/board.ts - Health and freshness
src/lib/health.ts
Web board and access
- Deals API
src/app/api/deals/route.ts - Health API
src/app/api/health/route.ts - Authentication
src/lib/auth.ts - Session API
src/app/api/session/route.ts - Home page
src/app/page.tsx - Deal board UI
src/components/deal-board.tsx - Board data client
src/lib/board-client.ts - Search and filters
src/lib/filter-deals.ts - Browser preferences
src/lib/personal-storage.ts
Static snapshot viewer
- Snapshot publisher
src/lib/snapshot-publish.ts - Published snapshot files
- Snapshot model
snapshot-viewer/model.ts - Static viewer
snapshot-viewer/viewer.ts
Other components
- Browser user
- Public feeds
Connections 32
- Refresh scheduler → Refresh orchestration: triggers rounds
README.md - Manual refresh API → Authentication: checks access
src/app/api/refresh/route.ts - Manual refresh API → Refresh orchestration: runs refresh
src/app/api/refresh/route.ts - Refresh orchestration → Source fetching: fetches sources
src/lib/refresh.ts - Source fetching → Fixed source definitions: uses definitions
src/lib/board.ts - Source fetching → Public feeds: requests feeds
README.md - Source fetching → Feed parsers: parses responses
README.md - Refresh orchestration → Deal classification: classifies items
src/lib/refresh.ts - Refresh orchestration → Retention rules: applies retention
src/lib/refresh.ts - Refresh orchestration → SQLite database: stores round data
src/lib/refresh.ts - Board state assembly → SQLite database: reads deal data
src/lib/board.ts - Board state assembly → Deal classification: classifies titles
src/lib/board.ts - Deals API → Authentication: checks access
src/app/api/deals/route.ts - Deals API → Board state assembly: gets board state
src/app/api/deals/route.ts - Health API → Authentication: checks access
src/app/api/health/route.ts - Health API → Board state assembly: reads board state
src/app/api/health/route.ts - Health API → Health and freshness: reports health
src/app/api/health/route.ts - Session API → Authentication: creates sessions
src/app/api/session/route.ts - Home page → Authentication: checks page access
src/app/page.tsx - Home page → Board state assembly: loads board
src/app/page.tsx - Home page → Deal board UI: renders board
src/app/page.tsx - Deal board UI → Browser user: shows and filters
README.md - Deal board UI → Board data client: polls board data
src/components/deal-board.tsx - Deal board UI → Search and filters: filters deals
src/components/deal-board.tsx - Deal board UI → Browser preferences: loads preferences
src/components/deal-board.tsx - Board data client → Deals API: requests pages
README.md - Deal board UI → Manual refresh API: requests refresh
README.md - Snapshot publisher → Source fetching: collects feed results
README.md - Snapshot publisher → Published snapshot files: publishes snapshots
README.md - Static viewer → Snapshot model: loads and presents
snapshot-viewer/viewer.ts - Snapshot model → Published snapshot files: reads snapshot data
README.md - Browser user → Static viewer: views published deals
README.md