# 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 基建** 1. `manifest.json`(名称/图标/主题色/display: standalone)+ Service Worker 注册 2. 离线能力:预缓存题库 JSON + 首页壳 → 无网络可刷已缓存题,联网后同步 3. 安装引导(可选提示条) **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 安装验证、推送实测记录、频率限制用例)。