# Subscription Reminder v1.0 — 交付说明

按《App 需求清单 v1》第 6 名「订阅到期提醒（个人订阅管家，创意库 i219）」开发的第一版。
产物：`~/workspace/your_files/SubscriptionReminder-v1.0.apk`（15.6 MB，debug 签名，可直接装）
源码：`~/workspace/subscription-reminder-android/`

- 包名：`com.subscriptionreminder.app`
- 版本：versionCode 1 / versionName 1.0，minSdk 24 / targetSdk 34
- 技术栈：Kotlin + Jetpack Compose 纯原生（无 WebView），SQLite 本地存储，英文 UI
- 权限（aapt 实测）：仅 `POST_NOTIFICATIONS` + `RECEIVE_BOOT_COMPLETED`，**未申请 INTERNET**——"纯本地、隐私优先"在权限层面可验证，不是文案口号

## 需求复核结论（开工前搜索复核）

**洼地判断未反转，照计划开工；但竞争密度比清单估计的更高，差异化必须打得更狠。**

- 需求侧被 2026 年多篇评测反复验证：美国家庭平均 8.2 个订阅、实际月花约 $219 而自估只有 $86（ReSubs 评测引用的数据）；"不绑卡/隐私优先"已是订阅管理类里一个被单独成篇评测的明确品类（getfinny、subnesio、Medium 隐私向横评等），2026 年 4 月 Plaid 数据事件又给"不绑银行"添了一把火。Rocket Money 必须绑卡 + $6–12/月，是最主要的反面参照。
- 供给侧比清单的「中」同质化判断更挤：隐私向竞品已有 SubScale、ReSubs、Finny、RecurStop 等，但其中多数是 iOS 优先（Bobby、SubTrack'd、Chronicle 均为 iOS）或 Web 产品；Android 原生、纯离线、无账号的直接竞品主要是 Tilla、Subby、ReSubs。因此本版把差异化落在三件竞品结构上难跟的事：① 零联网权限（连备份/同步都不做）；② 无广告、无埋点；③ 核心功能（登记+提醒+年度总花费）全免费、无条数上限。文案上首页顶条、汇总页、About 页三处都把 "No bank login · 100% offline · Private by design" 打在最前面。

## 功能清单（第一版只做这 2 个）

1. **手动登记订阅**（纯本地）：名称、金额、币种（20 种）、周期（周/月/季/年）、下次扣费日（日期选择器）、提醒提前天数（0/1/3/7 天）、备注。列表按扣费日排序，带"今天/明天/in N days/overdue"状态标识；详情页可编辑、删除，以及「Mark as charged」一键把扣费日滚动到下一周期。绝无绑卡、银行登录、账号注册入口。
2. **扣费前提醒 + 年度总花费汇总**：
   - 提醒：每条订阅一个本地闹钟，扣费前 N 天上午 9:00 推送（AlarmManager 非精确闹钟，不申请精确闹钟权限）；数据变更、App 启动、设备重启后自动重排，自带"自愈"；Android 13+ 未授权通知时首页有横幅引导开启。
   - 汇总页：按币种分组的年度总花费（大字展示）+ 月均 + 未来 30 天内扣费清单 + 按年成本排序的明细。跨币种不做汇率换算，分币种列示并在页脚明说。

## 未做（按 v1 范围砍掉）

订阅制付费墙 / 条数上限、云同步与账号、CSV 导入导出、试用期（trial）状态管理、涨价提醒、多语言 UI、桌面小部件、release 签名包。

## 已知问题

- 仅完成编译打包 + APK 结构/权限校验（环境无模拟器/真机），未做真机实测；建议首验一条链：新增订阅（提醒设 0 天、扣费日设明天）→ 等次日 9:00 看通知，或把扣费日改近后重启手机验证重排。
- 年度总花费是按"当前金额 × 年内扣费次数"的估算，不处理月中起订的按比例折算；跨币种不换算（有意为之，避免假精确）。
- 非精确闹钟在强省电 ROM 上可能有分钟级漂移；提醒是天粒度设计，可接受。
- 扣费日过期后不会自动滚动（避免误滚），列表会标 overdue，需用户点「Mark as charged」或改日期——About 页已写明这一交互。
