最近做了一个小项目 —— 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 Handle 和 API Key / API Secret(在 Codeforces API 设置页 获取),保存后会自动同步好友列表并刷新数据。
项目地址
🔗 https://github.com/LLLLLei073/cf-friend-tracker
如果你也在刷 Codeforces,欢迎 Star / 提 Issue 反馈想法。之后我可能会写几篇开发过程中的技术细节(比如 CF API 的限流处理、Recharts 热力图的实现),欢迎关注。
写在最后
其实最开始只是想视奸一下队友的情况,后面队长给我提了建议才加上那么一堆乱七八糟的ai功能,如果不喜欢那就受着😡
评论