Skip to content

Repository files navigation

闻鼓而动

学会动作以后,每天坚持只需要按一下开始

放下手机 · 闭眼跟练 · 全程语音引导 · 自动排休息日

名字取自「闻鼓而进,闻金而退」——鼓声响起即前进。在这里,语音就是鼓声:听见指令就行动,闻鼓起练!


先说结论:这个 App 不适合谁

零基础请先跟视频学会动作。

每个动作开始前虽然有语音要点提示,但文字无法替代视觉学习。建议先去 B 站搜索动作名称(猫牛流动、死虫式、臀桥、俯卧撑等),跟着视频反复跟练,把动作刻进肌肉记忆。

学会以后,这个 App 才是它真正的价值所在。

学会动作以后,为什么你需要它

你是不是也这样:

  • 跟着视频练,每隔几十秒抬头看屏幕确认节奏,注意力全在看视频上
  • 自己练,数着次数想着下一组做什么,脑子比身体还累
  • 办了健身卡,去了三次就吃灰
  • 久坐腰痛,好两天又犯两天,知道该运动但就是坚持不下来

问题不在毅力,在于「坚持」这件事被设计得太反人性了。

这个 App 把训练简化成两个动作:打开 → 按开始。剩下的全部交给语音。

  • 全程语音播报动作名称、次数、要点,不用看屏幕
  • 语音节拍计数,不用自己数
  • 动作顺序、组间休息、时长全部自动编排,不用记
  • 开始以后手机往旁边一放,闭眼跟练就行
  • 自动判断今天是抗阻日还是放松日,不用自己算隔了几天
  • 训练完自动打卡记录,周统计一目了然

18 分钟,不用想任何事,跟着语音做完就行。

隔天抗阻:自动帮你排休息日

肌肉群恢复需要 48 小时。抗阻动作隔天做,拉伸动作每天坚持。

App 会自动判断:如果昨天完成了完整抗阻训练,今天就是放松日(只做拉伸,约 12 分钟);否则今天正常抗阻。晨练和晚练各自独立判定,互不影响。

也可以手动切换模式,系统建议优先,手动选择仅本次生效。


隐私:你的数据只存在你的手机里

这个 App 没有服务器,没有账号,没有云同步。

你的训练记录、个人设置、动作参数调整,全部存在浏览器的 localStorage 里。数据只存在于你的设备上,不会通过网络发送到任何地方。

这意味着:

  • 没有注册,没有登录 — 打开就用,不需要输入任何个人信息
  • 训练数据不上传 — 打卡记录、抗阻 / 放松标记、每周统计,都只在本地
  • 没有追踪,没有广告 — 不收集任何使用数据,不埋任何分析脚本
  • 清除浏览器数据 = 清除全部记录 — 换设备或清缓存后需要重新开始,因为没有云端备份
  • 可随时手动清除 — 在设置页点「重置」即可清除本页所有数据

如果你希望跨设备同步,那这个 App 不适合你。它被设计成一个纯粹本地的小工具,简单、私密、不联网。


特性

  • 全程语音引导 — TTS 中文播报动作名称、次数、要点提示,语音节拍计数,放下手机就能练
  • 两套训练方案 — 晨练 18 分钟(7 个动作)、晚练 20 分钟(8 个动作),覆盖热身 / 抗阻 / 拉伸完整流程
  • 隔天抗阻 — 自动判断抗阻日 / 放松日,肌肉群 48 小时恢复,拉伸每天坚持
  • 参数可调 — 每个动作的次数、时长、休息时间都能在设置里改,适配不同体能水平
  • 结束提醒音效 — 每个阶段结束前 5 秒滴滴提醒,最后 1 秒高音长嘀,不用盯时间
  • 环境音 — 内置轻节拍 / 晨曦和弦 / 雨声三种氛围音,训练时自动播放(可选)
  • 本地打卡 — 自动记录每次训练数据,区分抗阻 / 放松,统计每周抗阻运动时长
  • PWA 离线可用 — 添加到手机主屏幕,断网也能用,像原生 App 一样全屏运行
  • 零后端零追踪 — 无服务器、无注册、无登录、无数据上传、无分析脚本,训练记录只存在你的设备上
  • 自动匹配时段 — 可设置按时间段自动进入对应训练,早上打开直接进晨练

快速开始

1. 部署

git clone https://github.com/touchren/exercise-helper.git
cd exercise-helper

# 用任意静态文件服务器
python3 -m http.server 8080

浏览器打开 http://localhost:8080 即可。

2. 手机使用

  1. 手机浏览器访问你的部署地址
  2. 按开始,确认语音播报正常
  3. 添加到主屏幕(iOS:Safari 分享 → 添加到主屏幕;Android:Chrome 菜单 → 添加到主屏幕)
  4. 从主屏幕打开,全屏体验

3. 开始训练

  1. 选择「晨练助手」或「晚练助手」
  2. 点击「开始」
  3. 关掉静音,调大音量
  4. 放下手机,跟着语音练

iOS 用户注意:手机侧边静音键打开时,网页 TTS 会被静音。训练前请关闭静音。


训练流程

晨练 — 早起 18 分钟温和训练

唤醒脊柱、激活核心、温和拉伸。3 个抗阻动作(死虫式 / 臀桥 / 俯卧撑)计入每周有效运动时长,合计约 8 分钟。

序号 动作 类型 规格 休息
1 猫牛流动 热身 8 次循环
2 死虫式 抗阻 10 次/侧 × 3 组 组间 30 秒
3 仰卧单膝抱胸 拉伸 30 秒/侧
4 臀桥 抗阻 10 次 × 3 组 组间 30 秒
5 婴儿式 拉伸 30 秒
6 俯卧撑 抗阻 10 次 × 3 组 组间 30 秒
7 狮身人面式 拉伸 60 秒 训练结束

晚练 — 饭后半小时 20 分钟锻炼

强化后链、拉伸胸肩、巩固核心。3 个抗阻动作(单杠离心下放 / 自重深蹲 / 鸟狗式)合计约 8 分钟。

序号 动作 类型 规格 休息
1 猫牛流动 热身 8 次循环
2 靠墙天使 激活 15 次 × 1 组
3 单杠离心下放 抗阻 3 次 × 3 组 组间 45 秒
4 门框胸肩拉伸 拉伸 20 秒 → 休息 15 秒 → 40 秒
5 自重深蹲 抗阻 12 次 × 3 组 组间 45 秒
6 站立股四头肌拉伸 拉伸 30 秒/侧
7 鸟狗式 抗阻 10 次/侧 × 3 组 组间 30 秒
8 婴儿式 拉伸 40 秒 训练结束

抗阻动作最后一组做完后不设休息时间,直接接拉伸动作。


技术架构

exercise-helper/
├── index.html              ← 选择页(首页 / 闻鼓而动入口)
├── app.js                  ← 选择页逻辑(卡片渲染、自动匹配、时间段设置)
├── workouts.js             ← 运动注册表(名称、路径、时间段默认值)
├── storage.js              ← 选择页 localStorage 配置
├── styles.css              ← 选择页样式
├── sw.js                   ← Service Worker(选择页)
├── manifest.json           ← PWA 清单
├── icon.svg                ← 应用图标
├── morning/                ← 晨练训练页
│   ├── workout-data.js     ← 动作定义 + 步骤序列构建器
│   ├── engine.js           ← 训练状态机 + 计时编排
│   ├── audio.js            ← TTS + 音效 + 环境音
│   ├── storage.js          ← 设置 + 打卡记录
│   ├── settings.js         ← 设置页交互
│   ├── records.js          ← 记录页交互
│   ├── app.js              ← UI 控制器、屏幕导航、Wake Lock
│   └── ...                 ← index.html / styles.css / sw.js / manifest.json
├── evening/                ← 晚练训练页(结构同 morning/)
├── .gitignore              ← Git 忽略文件
└── README.md               ← 项目说明

技术选型

关注点 方案 为什么
框架 无框架,Vanilla JS 零构建、零依赖,静态文件直接部署
语音 Web Speech API 浏览器原生,免费,中文支持好
音效 Web Audio API 动态生成,不需要音频文件
离线 Service Worker + PWA 首次加载后断网可用,可安装到主屏幕
存储 localStorage 零配置,数据 100% 本地,不联网不追踪
屏幕常亮 Wake Lock API + canvas 兜底 HTTP 下也能用

自定义训练

修改动作参数

打开设置页,可以直接调整:

  • 每个动作的次数 / 时长
  • 组间休息时间
  • 结束提醒提前秒数
  • 语音速度 / 音量
  • 环境音类型 / 音量

所有修改保存在本地,不影响其他用户。

新增训练方案

  1. workouts.js 添加一条记录:
{
  id: 'noon',
  name: '午间拉伸',
  subtitle: '全程8分钟 · 放松肩颈',
  description: '午休时放松肩颈和腰背',
  path: './noon/',
  schedule: { enabled: false, start: '12:00', end: '14:00' }
}
  1. 复制 morning/ 目录,修改 workout-data.js 中的动作定义
  2. 完成

部署

方式一:静态文件服务器

python3 -m http.server 8080
# 或 nginx / caddy / 任意静态服务器

方式二:Docker

# 用 caddy
docker run -d --name caddy -p 80:80 \
  -v /path/to/exercise-helper:/usr/share/caddy \
  -v /path/to/Caddyfile:/etc/caddy/Caddyfile \
  caddy:latest

方式三:GitHub Pages

Fork 本仓库,开启 GitHub Pages,即可免费获得一个在线地址。


常见问题

Q: iOS 上语音没有声音? A: 检查手机侧边静音键是否打开。iOS 的静音开关会同时静音网页 TTS。关闭静音后重新开始训练。

Q: 可以离线使用吗? A: 可以。首次加载后 Service Worker 会缓存所有资源,之后断网也能正常使用。

Q: 数据会上传到服务器吗? A: 不会。这个 App 没有服务器。所有设置和训练记录都存在浏览器的 localStorage 里,数据只存在于你的设备上,不会通过网络发送到任何地方。没有注册、没有登录、没有云同步。清除浏览器数据或换设备后记录会丢失,因为没有云端备份。

Q: 和跟着视频练有什么区别? A: 视频跟练适合学动作,这个 App 适合学会了以后坚持。视频需要一直抬头看屏幕确认节奏,注意力被打断;语音引导让你全程闭眼专注动作本身,开始以后不用碰手机,节奏由系统控制。一个用来学,一个用来练。

Q: 动作标准吗? A: 动作清单参考了柳叶刀腰痛系列研究的建议(稳定训练 + 力量训练 + 牵伸训练的组合),由 AI 辅助细化。但这个 App 不适合用来学习标准动作。 建议先去 B 站搜索各动作名称,跟着视频反复练习标准姿势,学会以后再用这个 App 日常坚持。动作要点会在训练前语音播报。


科学依据

柳叶刀腰痛系列研究(2018)

《柳叶刀》2018 年发表的腰痛系列研究对 41 项随机对照试验的网络荟萃分析显示:

  • 稳定训练 + 力量训练的组合是缓解腰痛最有效的运动干预方式(P-score 96%)
  • 有氧运动、力量训练、牵伸训练单独使用也显著优于不运动
  • 推荐非药物干预作为一线方案:教育 + 自我管理 + 恢复正常活动 + 运动

来源:The Lancet, 2018, Comparative effectiveness of exercise interventions for low back pain

柳叶刀 WalkBack 研究(2024)

2024 年柳叶刀发表的 WalkBack 随机对照试验证实:

  • 规律运动可显著降低腰痛复发风险(风险比 0.72)
  • 干预组腰痛复发的中位天数为 208 天,对照组仅 112 天

来源:The Lancet, 2024, WalkBack RCT

本项目的训练设计

基于上述研究,两套训练方案均采用「稳定 + 力量 + 牵伸」的组合模式:

  • 抗阻动作(死虫式 / 臀桥 / 俯卧撑 / 单杠离心下放 / 自重深蹲 / 鸟狗式)对应力量训练和核心稳定
  • 拉伸动作(猫牛流动 / 仰卧单膝抱胸 / 婴儿式 / 狮身人面式 / 门框胸肩拉伸 / 站立股四头肌拉伸)对应牵伸训练
  • 每周 3 次以上、每次约 8 分钟抗阻,即可达到柳叶刀建议的有效运动量

贡献

欢迎提交 Issue 和 PR。

  • 发现 Bug → 提 Issue
  • 有新动作想法 → 提 Issue 讨论
  • 想贡献代码 → Fork → 修改 → 提 PR

License

MIT


附录:训练清单原文

以下为 AI 辅助生成的训练清单原文,供参考。

晨练清单

早起12分钟温和训练(实际约18分钟,取较高值)

执行逻辑:热身→抗阻→拉伸→抗阻→拉伸→抗阻→拉伸收尾
3个抗阻动作(计入每周有效运动时长):死虫式、臀桥、俯卧撑
4个拉伸放松(脊柱养护):猫牛流动、仰卧单膝抱胸、婴儿式、狮身人面式
抗阻动作最后一组做完以后不设休息时间,直接接上拉伸动作

序号  标准名称              训练规格              休息时间    核心动作要点
1     猫牛流动(Cat-Cow)   6-8次循环            开始训练    四点跪撑,双手在肩正下方、双膝在髋正下方;全程用鼻子拱背呼气、塌腰吸气;缓慢活动整条脊柱,幅度适中不猛甩
2     死虫式(Dead Bug)    8-10次/侧 × 3组      组间45秒    全程仰卧,腰背完全贴紧地面;对侧手脚同步缓慢伸展、收回;腰椎不许拱起,动作匀速不甩动
3     仰卧单膝抱胸          每侧保持25-30秒       不休息      仰卧,双手轻抱单膝拉向胸口;对侧腿自然伸直贴地;温和牵拉下腰背,请勿暴力猛拉
4     臀桥(Glute Bridge)  8-10次 × 3组         组间45秒    仰卧屈膝,脚跟踩地与肩同宽;收紧臀部向上顶髋至肩-髋-膝呈一条斜线;顶峰停留1秒;臀部发力,请勿用腰顶起
5     婴儿式(Balasana)    静态保持30秒         不休息      跪姿,双膝分开,臀部缓慢坐向脚跟;上身前趴,额头贴垫;放松腰背、髋部及大腿前侧
6     俯卧撑                8-10次 × 3组         组间45秒    手略宽于肩,手肘斜向后45°,身体从头到脚保持一条直线;下放吸气2秒,推起呼气;杜绝塌腰、撅屁股
7     狮身人面式            静态保持20-30秒       训练结束    俯卧,手肘落在肩膀正下方,前臂贴地;骨盆贴紧垫子,胸口向前上方打开;不刻意挤压腰椎

晚练清单

饭后半小时后20分钟锻炼

执行逻辑:热身→激活→抗阻→拉伸→抗阻→拉伸→抗阻→拉伸收尾
3个抗阻动作(计入每周有效运动时长):单杠离心下放、自重深蹲、鸟狗式
抗阻动作最后一组做完以后不设休息时间,直接接上拉伸动作

序号  标准名称              训练规格              休息时间    核心动作要点
1     猫牛流动(Cat-Cow)   6-8次循环            开始训练    四点跪撑,全程用鼻子拱背呼气、塌腰吸气;缓慢活动整条脊柱
2     靠墙天使              15次 × 1组           不休息      后背贴墙,手臂90度贴墙滑动;下背贴墙,不耸肩不挺腰
3     单杠离心下放          3-5次 × 3组          组间45秒    跳上单杠,缓慢下放3-5秒;核心收紧,不塌腰不晃荡
4     门框胸肩拉伸          20秒→休息15秒→40秒   不休息      前臂贴门框,手肘与肩同高;胸口打开,不耸肩不挺腰
5     自重深蹲              10-12次 × 3组        组间45秒    双脚与肩同宽,臀部后坐;腰背挺直,膝盖与脚尖同向
6     站立股四头肌拉伸      每侧保持30秒         不休息      同侧手抓脚踝,膝盖向后;骨盆中立,不前倾不歪胯
7     鸟狗式                8-10次/侧 × 3组      组间30秒    对侧手脚同步伸展,至与背部齐平;骨盆不歪斜,核心收紧
8     婴儿式(Balasana)    静态保持40秒         训练结束    双膝与髋同宽,臀部坐向脚跟;额头贴垫,放松腰背髋部

About

专为久坐办公族设计的晨练/晚练 PWA,隔天抗阻 + 每日拉伸,语音引导,打开即用,无需安装

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages