[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1v84idsoefixl":3},{"code":4,"message":5,"data":6,"timestamp":51},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":21,"summary_md":22,"topic":23,"github_topics":26,"license":47,"homepage":48,"updated_at":49,"history":50},"DuarteSantos8\u002FopenGym",5,"Open-source gym & body-weight tracker, now in the App Store (iPhone + Apple Watch) and as an Android APK. Plan routines, log workouts, see which muscles are trained, import from Strong\u002FHevy\u002FFitNotes. Self-host it or use it on the phone alone.","JavaScript",15464,2036,13954,97,[16],{"id":17,"title":18,"points":19,"comments":19,"posted_at":20},49814241,"OpenGym, A self-hosted gym and body-weight tracker (AGPL)",1,"2026-09-23","自托管的力量训练与体重记录工具，适合希望训练数据留在自己手里的健身者。","## 解决什么问题\n认真练力量的人，几年训练记录往往困在某个订阅制 App 里：数据在厂商服务器上，既带不走，也说不清哪天会随公司一起消失。openGym 做的事情和这类 App 一样——排训练计划、跟练、记录每组重量和体重——但部署在你自己的机器上，数据放在你能打开、能导出的目录里。\n\n## 有什么不同\n与主流训练记录 App 相比，这里最直接的取舍是运维成本：你需要自己跑起来，README 也是围绕这一点写的，而不是宣称功能全面超越。真正有辨识度的是训练逻辑的深度——计划级和动作级都可配置进阶规则（线性、Greyskull、双重与三重进阶），对掉次数和停滞有明确的降载处理；杠铃片计算基于你实际拥有的片重；肌肉图谱分三档显示容量、恢复和遗漏。迁移路径也做得较实：支持从 FitNotes、Strong、Hevy 和 Apple Health 导入，并能一键导出全部 JSON。同步采用按字段合并，两台设备同时编辑不会互相覆盖，这在自托管的小项目里并不多见。\n\n## 适合谁\n适合每周练几次杠铃或哑铃、能自己跑容器、并且在意训练历史归属的人。也适合想要可配置进阶方案、超级组、递减组，而不是社交动态或教练市场的人。不想维护服务器的，可以只用 App Store 版或 Android APK，当作离线单机应用。想要教练指导、饮食记录或社区功能的人应另寻工具，这些不在本项目范围内。\n\n## 上手成本\n需要一台装有 Docker 的主机，并愿意持续更新，或者直接使用 iOS 和 Android 安装包作为离线应用。可以先在在线 demo 里试用。许可证是 AGPL-3.0，如果你打算修改后作为网络服务运行，需要留意这一点。README 对功能写得很细，但几乎没有提到硬件要求、备份方案和升级迁移；建议把运维成熟度当作尚未验证，在托付多年训练记录前先测试恢复流程。动作库规模很大，但准确度无法从 README 判断。\n\n## 点评\n这是一个非常年轻的项目：2026 年 7 月创建，一个月内涨了约 1.4 万 star，冲到 JavaScript 月榜第 5，而 Hacker News 上的帖子几乎没有讨论度。这个组合说明它更多是被趋势推起来的，还不是一个成熟产品。不过 CI、测试覆盖率、上架 App Store、结构化同步这些工程信号，比大多数 90 天的新仓库扎实，这是加分项。对于要长期依赖的记录工具，稳妥的做法是先在一台会备份的机器上跑起来，导入少量历史数据，等自己验证过导出与恢复之后，再决定是否全面迁移。",{"slug":24,"name":25},"productivity","效率与系统工具",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"apple-watch","bodyweight","docker","fitness","fitness-tracker","gym","health","ios","mcp","nodejs","passkeys","progressive-web-applications","pwa","react","self-hosted","self-hosting","vite","webauthn","weightlifting","workout-tracker","AGPL-3.0","https:\u002F\u002Fopengym.ch","2026-10-24T14:36:14Z",[],1792867575]