# 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

MIT Go React PostgreSQL

GeekRadar homepage — Spotlight, Open Source & Discussions

首页:Spotlight 头条 + Open Source / Discussions 双栏精选

查看完整页面长图

GeekRadar full page

--- 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,并控制抓取频率。