GitHub
用于抓取 AI 热门项目和热门 Agent Skills 的公共搜索结果与仓库元信息。
Projects / SkillsSystem architecture & data flow for AI Signal Desk
这个 AI 情报站的核心目标不是“功能多”,而是“每天稳定产出高信号信息,并且不需要手工维护”。所以我选择了把代码、数据、自动更新和部署放进同一条简单而稳的链路里。
下面这部分回答的是“谁负责什么”。你可以把它理解成从外部世界到最终页面的模块分工图。
用于抓取 AI 热门项目和热门 Agent Skills 的公共搜索结果与仓库元信息。
Projects / Skills提供高信号的社区讨论热度,补足“开源项目之外大家在聊什么”。
Social signal从 AI 相关社区里提取过去 24 小时更偏一线使用者视角的热点话题。
Community pulse来自 OpenAI、Anthropic、Google AI 等公开 Feed,用来提供稳定媒体与官方信号。
Media / official feeds分别由 fetch-github.ts、fetch-social.ts、fetch-skills.ts 负责抓取三类来源。
用统一 schema 把不同来源的数据压成一种结构,再做标签分类、热度计算和去重。
Normalize / tag / score生成 data/latest、data/daily 和 data/indexes,分别服务首页、历史页和趋势页。
如果某个来源失败,系统会尽量回退到上一次有效快照,而不是把整页打空。
Fallback & resilienceToday、History、Trends 直接读取仓库里的 JSON,不依赖数据库即可静态生成。
Static rendering每 6 小时定时跑一次数据更新,把新的 data 文件写回仓库。
Scheduled refresh代码和数据都沉淀在仓库里,形成唯一事实来源,方便回溯与迭代。
Code + data source of truth监听主分支变更自动构建和发布,保证新数据写回仓库后能自然转成新页面。
Deployment & hosting这部分回答的是“数据怎么流动”。它强调时间顺序,从外部来源开始,一直到用户打开网页看到最终结果。
GitHub、HN、Reddit、RSS 等公开来源先被抓取脚本读取,拿到原始项目、帖子、新闻与技能候选项。
不同来源的字段会被统一映射成同一种 signal 结构,便于后续排序、打标、渲染与历史沉淀。
系统为每条信息补上主题标签,并按热度、相关性、时效性综合打分,同时对重复信号做合并。
最新页面读 latest,历史页读 daily,趋势页读 indexes。这一步把“信息流”变成了“可持续浏览的知识结构”。
应用层不再直接抓外部接口,而是静态读取仓库里的 JSON,因此页面更稳定,访问也更轻。
一旦 GitHub 仓库有新数据或新代码,Vercel 就会重新构建并发布,最终用户看到的是最新但仍然稳定的静态页面。
这个站点的稳定性不依赖“所有来源都永远成功”,而依赖“即使某个来源失败,系统也还能给出可用结果”。
这套架构不是终点,而是一个很好的产品起点。它的价值在于:之后想加什么功能,都有明确挂载点。
如果你想从代码角度追进去,下面这些文件最能代表这个系统的核心结构。
负责从外部来源收集候选信号。
scripts/fetch-github.tsscripts/fetch-social.tsscripts/fetch-skills.ts
负责把候选数据加工成页面可直接消费的 JSON。
scripts/build-dashboard.tssrc/lib/normalize.tssrc/lib/schema.ts
负责渲染 Today / History / Trends,并把定时更新跑起来。
src/app/page.tsxsrc/app/trends/page.tsx.github/workflows/update-data.yml