这是一个做给自己的提醒器。
我长期久坐写代码,经常一坐就是两三个小时忘了动,水杯就在手边也想不起来喝。市面上已有的提醒工具要么太吵(疯狂弹窗、声音关不掉),要么太重(要注册账号、要联网、要统计还要社交),要么就是太容易被无视——提醒多了就麻木了,直接关掉继续坐。
所以我写了这个,核心理念就一条:在尽量不打扰正常工作的前提下,让你注意到该起来活动了、该喝口水了。
它只做两件事:
- 定时提醒起身活动 — 默认每 50 分钟
- 定时提醒喝水 — 默认每 90 分钟
以及一点额外的温度:
- 惊喜提醒 🎲 — 每次弹窗的文案不是固定的,根据时段和语境从 40 条池子里随机抽。普通消息就是日常提醒,稀有消息带点温度,彩蛋偶尔冒出来让你笑一下。不是每一条都要你停下来读——但至少,每次弹窗不再是同一个你已经看麻木了的对话框。
应用基于 Tauri 2 + React + TypeScript。Rust 端负责托盘、系统通知、配置管理和调度器;React 端只负责设置窗口和提醒弹窗。纯本地运行,无需联网,没有账号。
- 久坐提醒(可配置间隔)
- 喝水提醒(可配置间隔)
- 工作时段配置(仅在上下午工作时段内提醒)
- 暂停提醒 1 小时
- 开机自启动
- 提醒声音
- 惊喜提醒(随机文案 + 稀有度权重)
- 统计面板(每日站立/喝水次数)
- 自定义文案
health-reminder/
├─ .github/workflows/ # CI 配置
├─ assets/ # 资源文件
├─ src/ # React 前端
│ ├─ main.tsx
│ └─ styles.css
├─ src-tauri/ # Rust 后端
│ ├─ src/main.rs # 调度器、配置、托盘、惊喜引擎
│ ├─ Cargo.toml
│ ├─ tauri.conf.json
│ └─ capabilities/
├─ index.html
├─ package.json
├─ vite.config.ts
├─ tsconfig.json
├─ CHANGELOG.md
├─ LICENSE
└─ README.md
| 模块 | 说明 |
|---|---|
AppConfig |
用户设置,持久化到本地 JSON |
SchedulerState |
提醒状态:下一次提醒时间、暂停、活跃弹窗 |
| 托盘 | 打开设置、暂停 1 小时、恢复提醒、退出 |
| 调度器 | 每 15 秒 tick,判断是否到提醒时间 |
| 惊喜引擎 | 上下文匹配 + 权重抽选,决定弹窗文案 |
| 系统通知 | 弹窗同时发送 Windows 通知 |
| 视图 | 说明 |
|---|---|
| 设置窗口 | 所有配置项在一个页面修改 |
| 提醒弹窗 | 显示提醒内容、三个操作按钮 |
保存到 %APPDATA%\Health Reminder\config.json,默认内容:
{
"standUpEnabled": true,
"standUpIntervalMinutes": 50,
"waterEnabled": true,
"waterIntervalMinutes": 90,
"morningStart": "09:00",
"morningEnd": "11:30",
"afternoonStart": "14:00",
"afternoonEnd": "17:30",
"autostartEnabled": true,
"soundEnabled": false,
"surpriseEnabled": true
}调度器不是长定时器,而是每 15 秒 tick 一次检查,像一个值班员:
- 检查当前是否为工作时段
- 检查是否处于"暂停 1 小时"
- 分别检查起身提醒和喝水提醒是否到期
- 两者同时到期时,先弹起身,处理完再弹喝水
- 休眠唤醒后检测时间跳跃 > 120 秒,跳过过期提醒,重新计算
默认 09:00–11:30 和 14:00–17:30。非工作时段不弹提醒,过期不补。
| 按钮 | 效果 |
|---|---|
| 我去活动了 / 我喝了 | 从点击时间重新计算下一次 |
| 10 分钟后提醒 / 15 分钟后提醒 | 仅延后本次提醒 |
| 跳过本次 | 从当前时间重新计算下一次 |
| 关闭窗口 | 等同于跳过本次 |
| 托盘暂停 1 小时 | 所有提醒暂停;恢复时不补发 |
开启后,每次弹窗会:
- 根据当前时间判断语境(早上/下午/傍晚/深夜/凌晨 + 工作日/周末)
- 从 40 条文案池中过滤出语境匹配的消息
- 按稀有度权重抽选:普通 80% → 稀有 15% → 彩蛋 5%
- 最近 8 条出现过的消息权重降低到 20%,避免连续重复
可在设置界面随时开关。
- Node.js (>= 18)
- Rust stable
- Microsoft WebView2 Runtime(Windows 11 自带,Windows 10 可能需要安装)
- Visual Studio Build Tools(含 C++ 桌面开发工具链)
npm install
npm run dev启动后主窗口不会自动显示,请从系统托盘右键打开设置。
npm run build打包产物在 %LOCALAPPDATA%\Temp\health-reminder-tauri-target\release\bundle\nsis。
Rust 编译目录默认输出到用户临时目录,避免杀毒软件对项目内新生成 exe 的拦截。
- 仅支持 Windows(通过
compile_error!在非 Windows 平台编译时阻断) - 不依赖网络运行
- 数据只保存在本地 JSON 文件
- 没有账号、同步、云端功能
- 开发模式下 Windows 通知可能显示为 PowerShell/开发进程名称(Tauri 官方说明)
MIT License — 详见 LICENSE。
