【文章标题】:Show HN: Kadō – open-source habit tracker, with non-binary habit score, for iOS 【文章标题】:展示HN:Kadō——开源的iOS习惯追踪应用,采用非二元习惯评分系统

【文章正文】: A privacy-first habit tracker for iPhone and iPad. 一款以隐私为先的iPhone和iPad习惯追踪工具。

Non-binary habit score · Offline-first · Open source (MIT) · No account, no subscription, no telemetry. 非二元习惯评分·离线优先·开源(MIT协议)·无需账户/订阅/数据收集

Kadō is an iOS habit tracker with three commitments: Kadō作为iOS习惯追踪器做出三项承诺:

  • A score, not a streak. The habit score — inspired by Loop Habit Tracker on Android — is a non-binary exponential moving average of your completions. One missed day doesn’t wipe your progress. You see a trend, not a fragile chain.

  • 采用评分制而非连续打卡。受Android平台Loop Habit Tracker启发,习惯评分采用非二元的指数移动平均值计算。遗漏一天不会清零进度,您看到的是趋势曲线而非脆弱的打卡链条。

  • Your data stays yours. No account, no analytics, no third-party SDKs. Storage is local (SwiftData), sync is optional through your own iCloud (CloudKit private database). Export is lossless, in JSON or CSV, whenever you want it. See PRIVACY.md .

  • 数据完全自主。无需账户/分析工具/第三方SDK。本地存储(SwiftData),可选iCloud同步(CloudKit私有数据库)。支持随时无损导出JSON或CSV格式。详见PRIVACY.md文件。

  • Native to Apple. SwiftUI, @Observable , SwiftData, CloudKit, WidgetKit, App Intents — no cross-platform layer, no third-party dependencies.

  • 纯苹果原生技术栈。采用SwiftUI/@Observable/SwiftData/CloudKit/WidgetKit/App Intents,无跨平台层/第三方依赖。

Why another habit tracker? The market gap is spelled out in docs/PRODUCT.md: the reference open-source tracker (Loop) is Android-only; the reference iOS tracker (Streaks) is closed source and uses a binary streak; the most visible modern iOS open source attempt (Teymia) is freemium. Kadō takes Loop’s algorithm to native iOS — MIT, free, no account, no subscription. 为何再造习惯追踪器?如docs/PRODUCT.md所述市场空白:标杆开源应用Loop仅限Android;iOS标杆应用Streaks闭源且采用二元打卡制;知名现代iOS开源尝试Teymia采用免费增值模式。Kadō将Loop算法移植至原生iOS平台——MIT协议/完全免费/无需账户/无订阅。

Features: 核心功能:

  • Today view — habits due today, tap to complete, long-press for partial / note / timer, drag to reorder (the order syncs via iCloud).

  • 今日视图:展示当日待办习惯,点击完成/长按记录部分完成/备注/计时/拖拽排序(顺序通过iCloud同步)

  • Habit detail — monthly calendar with month-by-month navigation, current streak, best streak, habit score with an info popover explaining the math. Edit any past day straight from the calendar, including days before the habit existed.

  • 习惯详情:支持逐月浏览的月历视图,显示当前连续记录/最佳记录/习惯评分(含数学公式说明弹窗),可直接编辑日历中任意历史日期(包括该习惯创建前的日期)

  • Per-day notes — a short note on any day’s completion, carried through export and import.

  • 每日备注:为任何完成日添加简短注释,支持导入导出保留

  • Overview — habits × days matrix with score-shaded cells, the Loop / Way of Life pattern with Kadō’s score DNA. Completions logged off-schedule show up too, instead of hiding as rest days.

  • 总览视图:习惯×日期矩阵带评分色阶,融合Loop/Way of Life设计理念与Kadō评分基因。非常规时段完成的记录也会显示(而非隐藏为休息日)

  • Flexible schedules — daily, N days per week, specific weekdays, every N days (the cycle re-anchors on each completion, so finishing early never costs you a day). Binary, counter, or timer habit types.

  • 灵活排期:支持每日/每周N天/特定工作日/每N天(周期在每次完成时重置锚点,提前完成不会损失天数)。支持二元/计数/计时型习惯

  • Day starts at — push the day rollover as late as 6 AM, so late-night logging still lands on the day you mean. Changing it never re-buckets history.

  • 自定义日切时间:最迟可设为凌晨6点,深夜记录仍归属预期日期。修改设置不会重排历史数据

  • Widgets — Home Screen (small / medium / large) and Lock Screen (rectangular / circular / inline). Quick-complete via AppIntent .

  • 小组件:主屏幕(小/中/大尺寸)+锁屏(矩形/圆形/内联样式),支持通过AppIntent快速完成

  • Siri and Shortcuts — complete a habit, log a value, or ask for a score and streak, hands-free. Also available as Home Screen actions and Shortcuts automations.

  • Siri与快捷指令:免提完成习惯/记录数值/查询评分与连续记录,支持主屏幕动作与快捷指令自动化

  • Reminders — per-habit local notifications with recurring schedules and check / skip quick actions.

  • 提醒功能:每个习惯可设置循环本地通知,含检查/跳过快速操作

  • iCloud sync — optional, opt-in, goes only through the user’s private CloudKit database. Settings shows live sync state, including when sync isn’t working.

  • iCloud同步:可选功能,仅通过用户私有CloudKit数据库同步。设置页实时显示同步状态(含异常情况)

  • JSON and CSV export / import — lossless backup of your data, in both formats, round-trip tested. Open a CSV backup in Numbers or Excel, edit it, bring it back in.

  • JSON与CSV导入导出:双格式无损备份数据(经往返测试),可在Numbers/Excel编辑CSV备份后重新导入

  • Tip Jar — entirely optional, unlocks nothing. The whole app stays free, with no ads, no subscription, and no tracking.

  • 小费罐:完全可选,不解锁任何功能。应用永久免费,无广告/订阅/追踪

  • Accessibility — Dynamic Type up to XXXL, VoiceOver labels on every surface, full Dark Mode.

  • 无障碍支持:XXXL级动态字体/全界面VoiceOver标签/完整深色模式

  • Localization — English and native French (not machine-translated).

  • 本地化:英语与原生法语(非机翻)

Release History: 版本历程:

VersionHighlights
1.0首发版本——评分系统,今日/总览/详情视图,小组件,iCloud同步,提醒,JSON导出,英法双语
1.1新增Siri与快捷指令;日历直接编辑历史日期
1.2每日备注;回溯补录;月份导航
1.3拖拽排序习惯;温和的一次性评分提示
1.4提升iCloud同步可靠性——修复iPad崩溃问题,真实同步状态显示
1.5小费罐(StoreKit 2实现),完全可选不解锁功能
1.6自定义日切时间;修复每周N天评分问题;总览视图显示非计划完成记录
1.7CSV往返导入导出;“每N天”模式在完成时重置周期锚点

Not planned. A native Apple Watch app and HealthKit auto-completion were scoped for v0.3 and have been descoped — no user has asked for either since launch. Both stay listed in docs/ROADMAP.md under “Descoped”, and would be reconsidered on real demand. 未规划项:原生Apple Watch应用与HealthKit自动完成原定v0.3版本现已取消——发布后无用户需求。两者仍列于docs/ROADMAP.md”Descoped”章节,将根据实际需求重新评估。

Next — Live Activities and Dynamic Island for timer habits, then the remaining v1.x polish (themes, biometrics, categories, backup files). Full roadmap in docs/ROADMAP.md. 下一步——为计时习惯添加Live Activities与Dynamic Island支持,继而完善v1.x剩余功能(主题/生物识别/分类/备份文件)。完整路线图见docs/ROADMAP.md。

Tech Stack: 技术栈:

  • SwiftUI with @Observable (iOS 17+) for state — no Combine.

  • 状态管理采用SwiftUI+@Observable(iOS17+),未使用Combine

  • SwiftData for local persistence, with VersionedSchema +SchemaMigrationPlan wired from day one.

  • 本地存储使用SwiftData,自初始版本即配置VersionedSchema+SchemaMigrationPlan

  • CloudKit via SwiftData (cloudKitDatabase: .private(…) ) for multi-device sync.

  • 通过SwiftData的CloudKit私有数据库实现多设备同步

  • WidgetKit + an App Group JSON snapshot for extension surfaces (the widget process never opens SwiftData — see CLAUDE.md for why).

  • 小组件采用WidgetKit+App Group的JSON快照机制(组件进程绝不直接访问SwiftData,详见CLAUDE.md说明)

  • App Intents for widget quick-complete, Siri, and Shortcuts.

  • 小组件快速完成/Siri/快捷指令通过App Intents实现

  • StoreKit 2 for the Tip Jar.

  • 小费罐采用StoreKit 2

  • Swift Testing for unit tests, XCTest for UI tests and for the App Store screenshot run.

  • 单元测试用Swift Testing,UI测试与应用商店截图流程用XCTest