2.2 KiB
2.2 KiB
E-06 · PWA + 推送提醒
| 字段 | 值 |
|---|---|
| 项目 | EnglishDrill · Desktop/english-drill(frontend + backend 定时任务) |
| 优先级 | P1 · M3 |
| 建议模型 | deepseek-v4.1-flash(主)/ gemini-3.8-flash(PWA 视觉验收) |
| 依赖 | 无 |
| 预估 | 2.5 天 |
一、背景(为什么做)
增长报告 P1 双项(docs/AGI增长点分析-2026-09-11.md #7 + #8):
UserProfile.notify_email字段存在但从未被读取(死字段)——提醒通道是空的;- 让网站装到主屏(PWA)打开率显著高于"再开浏览器输网址";两者共用 Service Worker 基建,一起做成本最低。
- 提醒钩子:连续天数将断 —— "你的 7 天连续记录今天就要断了"比"快回来学习"有效 10 倍。
二、目标(交付物)
A. PWA 基建
manifest.json(名称/图标/主题色/display: standalone)+ Service Worker 注册- 离线能力:预缓存题库 JSON + 首页壳 → 无网络可刷已缓存题,联网后同步
- 安装引导(可选提示条)
B. 推送提醒(Web Push)
4. VAPID 密钥对生成脚本 + 订阅管理接口(POST/DELETE /api/accounts/push-subscription)
5. 订阅存储(新表或扩展 profile:endpoint/keys/created_at)
6. 定时任务:每日扫"今天未学 + 连续天数≥3 将断"用户 → 发提醒(每用户每天最多 1 条,硬上限)
7. 关闭开关(尊重用户设置,一键退订真生效)
三、验收标准
- PWA 可安装(Lighthouse PWA 项通过或手动安装验证)
- 离线打开可答已缓存题;联网后记录不丢
- 推送订阅成功 → 测试推送可达(浏览器实测)
- 提醒任务:构造"将断签"用户 → 收到且当天仅 1 条
- 退订后不再收到
- 不滥用验证:普通用户连续多日仍只发 1 条/天
- 既有 E2E 全绿(SW 不干扰既有测试)
四、边界(不许做)
- 不做原生 App 推送(PWA 路线,成本优先)
- 不发营销内容(只发学习状态提醒)
- 不改动现有登录/学习主流程(SW 只做缓存层)
五、交接
写 PROGRESS_E-06.md(含 PWA 安装验证、推送实测记录、频率限制用例)。