# GeekRadar
**Repository Path**: lin_30_0/geek-radar
## Basic Information
- **Project Name**: GeekRadar
- **Description**: 极客雷达:多源科技日报(GitHub / HN / Lobsters / Reddit / Dev.to)→ 去重组刊 → 报纸式阅读。Multi-source daily tech digest — GitHub, HN, Lobsters, Reddit & Dev.to → dedupe → compose → newspaper-style reader.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-09-01
- **Last Updated**: 2026-09-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Go语言, React, daily-digest, geekradar, Postgresql
## README
# GeekRadar · 极客雷达
Daily tech digest for builders
Multi-source collectors → dedupe → compose → newspaper-style reader
首页:Spotlight 头条 + Open Source / Discussions 双栏精选
查看完整页面长图
---
GeekRadar 把 **GitHub、Hacker News、Lobsters、Reddit、Dev.to** 等信号聚合成**一期可读完的科技简报**——不是后台表格,也不是无限信息流。标题与摘要保持**原文混排**。
## Features
| | |
|---|---|
| **Multi-source ingest** | GitHub Search(A+B)、HN Firebase、Lobsters JSON、Reddit RSS、Dev.to API |
| **Dedup** | 规范化 URL → `sha256`;跨源归并;入刊冷却 **21 天** |
| **Compose** | Spotlight / Open Source / Discussions / Long Reads;讨论区多源交错 |
| **Reader UI** | 报纸排版、桌面双栏、往期加载更多、右下角回顶 |
| **Ops** | `collect` / `compose` CLI + HTTP 读 API;Postgres 真源 |
## Architecture
```text
Collectors (GitHub / HN / Lobsters / Reddit / Dev.to)
│
▼
Normalize + Dedup ──► PostgreSQL (items / editions)
│
▼
Compose Today Edition
│
▼
GoFrame API ──► React (Vite) Digest UI
```
| Path | Stack |
|------|--------|
| [`backend/`](./backend) | Go · GoFrame · PostgreSQL · Redis |
| [`web/`](./web) | React 19 · Vite · TanStack Query · Tailwind |
## Quick start
### Prerequisites
- Docker(Postgres 16 + Redis 7)
- Go 1.25+
- Node.js 20+(建议)
### 1. Database
```bash
cd backend
docker compose up -d
# 若曾用过旧 schema:docker compose down -v && docker compose up -d
```
默认:Postgres `localhost:5433`,Redis `localhost:6380`。
连接串见 [`backend/manifest/config/config.example.yaml`](./backend/manifest/config/config.example.yaml)。
### 2. Backend
```bash
cd backend
cp manifest/config/config.example.yaml manifest/config/config.yaml
# 可选:export GITHUB_TOKEN=ghp_xxx
make digest # collect + compose 今日刊
make run # http://127.0.0.1:8000
```
```bash
go run . collect
go run . compose
```
### 3. Frontend
```bash
cd web
npm install
npm run dev # http://localhost:5188 (/api → :8000)
```
## Configuration
`backend/manifest/config/config.yaml`(**勿提交含密钥的本地副本**):
```yaml
geekradar:
githubToken: "" # 或环境变量 GITHUB_TOKEN
cooldownDays: 21
reddit:
limit: 15
subreddits:
- programming
- LocalLLaMA
- selfhosted
- golang
- rust
```
## Collectors
| Source | Strategy |
|--------|----------|
| **GitHub** | A:近 7 天新建 `stars:>=10 fork:false`;B:近 1 天推送 `stars:20..500` |
| **Hacker News** | `showstories` + `top`/`best`;Show HN 可低分收录;热帖 ≥40 |
| **Lobsters** | [`hottest.json`](https://lobste.rs/hottest.json) |
| **Reddit** | 白名单 sub 的 Atom RSS |
| **Dev.to** | `GET /api/articles?top=1` |
**Edition sections**
1. **Spotlight** — 跨源头条
2. **Open Source** — GitHub + Show HN
3. **Discussions** — Lobsters / HN / Reddit(交错)
4. **Long Reads** — Dev.to
## HTTP API
Base:`/api/v1` · envelope:`{ code, message, data }`
| Method | Path | Description |
|--------|------|-------------|
| GET | `/health` | DB / Redis |
| GET | `/editions/today` | 今日刊 |
| GET | `/editions/{date}` | 按日 |
| GET | `/editions` | 往期 |
| POST | `/admin/collect` | 触发采集 |
| POST | `/admin/editions/compose` | 组刊发布 |
Swagger:`http://127.0.0.1:8000/swagger/`
## Project layout
```text
.
├── LICENSE
├── README.md
├── docs/images/ # README 截图
├── backend/
│ ├── internal/collect/ # github, hn, lobsters, reddit, devto
│ ├── internal/compose/
│ ├── manifest/config/
│ ├── manifest/sql/
│ └── docker-compose.yml
└── web/
└── src/
```
## Roadmap
- [ ] V2EX「分享创造」、Product Hunt、定时 cron
- [ ] LLM 摘要 / 打分 / 拒稿
- [ ] Stars 增量快照、「按来源浏览」
- [ ] 新闻源与 `news` 分区
## License
[MIT](./LICENSE) © GeekRadar Contributors
---
第三方内容版权归原作者与平台所有。请遵守各平台 API / ToS,并控制抓取频率。