最近做了一个小项目 —— CF Friends,一个 Codeforces 好友关注桌面应用。今天来介绍一下它。

为什么做这个

刷 Codeforces 的朋友应该都有这样的体验:刷题之余,总想看看好友们最近在干什么——谁上分了、谁又在偷偷刷题、今天谁最卷。网页版虽然能看到好友列表,但要一个个点进去看 Rating 历史、提交记录,实在麻烦。

于是就有了这个桌面应用:把所有好友的数据聚合到一个界面里,打开就能看到谁在卷、卷了多少、趋势如何

功能一览

👥 好友管理

  • 手动添加/删除好友,或从 Codeforces 关注列表一键同步
  • 右键好友可修改备注、删除,或设为特别关注(置顶 + 星标高亮)
  • 底部”仅刷新特别关注”按钮:只刷新重点好友,省 API 配额

📊 好友详情

每个好友点进去是一个完整的分析面板:

  • Rating 历史曲线、比赛记录、提交记录
  • 做题热力图(90 天),一眼看出谁最近在发力
  • 标签维度分析:雷达图看能力分布、难度分布直方图、判定结果饼图,还能自动识别弱项
  • 所有链接都可点击跳转到 Codeforces 对应页面

🏆 排行榜与动态

  • 近两天做题排行 + Rating 排行,前三名有奖牌显示
  • 连续做题 Streak 排行
  • 动态 Feed:聚合所有好友的 Rating 变化和 AC 记录,实时追踪”谁在卷”
  • 每天还有「今日谁最卷」AC 排行榜

👨‍👩‍👧 团队

  • 创建团队(最多 3 人),点击展开看今日最卷 / 今日最拉战况
  • 团队周报/月报:按团队统计做题量、Rating 变化、活跃度热力图,自动生成总结

⏱️ 比赛

  • 拉取 CF 比赛列表:赛前倒计时、进行中高亮、点击跳转
  • 进阶功能:比赛评级预测——比赛进行中实时预测好友的 Rating 变化,看谁能翻盘

📈 好友对比

  • 双人 Rating 曲线对比(带比赛时间轴)
  • 做题统计对比表格
  • 支持一键跳转比赛链接

其他细节

  • 桌面通知:Rating 变化、比赛开始、刷题里程碑都会提醒
  • 数据导出:排行榜、对比、团队报告支持导出 CSV 和图片
  • 深色/浅色/跟随系统三种主题
  • 悬浮导航面板、窗口大小记忆、开机自动刷新
  • CF API 请求自动重试(指数退避),网络出错有明确提示

技术栈

技术
框架Electron 31 + electron-vite
前端React 18 + TypeScript 5
路由React Router
图表Recharts
存储electron-store(本地持久化)
测试Vitest

使用

git clone https://github.com/LLLLLei073/cf-friend-tracker
cd cf-friend-tracker
npm install
npm run dev

在设置页填入你的 Codeforces HandleAPI Key / API Secret(在 Codeforces API 设置页 获取),保存后会自动同步好友列表并刷新数据。

项目地址

🔗 https://github.com/LLLLLei073/cf-friend-tracker

如果你也在刷 Codeforces,欢迎 Star / 提 Issue 反馈想法。之后我可能会写几篇开发过程中的技术细节(比如 CF API 的限流处理、Recharts 热力图的实现),欢迎关注。

写在最后

其实最开始只是想视奸一下队友的情况,后面队长给我提了建议才加上那么一堆乱七八糟的ai功能,如果不喜欢那就受着😡