in development
Bedcheck
An iOS accountability app for your bedtime, not your wake time. Escalating notifications, an integrated wake alarm, and HealthKit tracking — no streaks, scores, or shame metrics.
Swift 6 (strict concurrency) · iOS 26 · SwiftUI + @Observable · SwiftData · AlarmKit · ActivityKit · WidgetKit · HealthKit · AppIntents
- Built against AlarmKit on day one — before the docs existed. AlarmKit shipped in iOS 26 with little beyond one WWDC session, so I read the
.swiftinterfacedirectly to verify API shapes. Found that Xcode silently dropsNSAlarmKitUsageDescriptionfrom the generated Info.plist (not in its key allowlist), thatstopButtonwas quietly deprecated in 26.1, and that a missing Live Activity widget leaves alarms stuck as an empty Dynamic Island — all from device dogfooding, not documentation. - Three-rail reliability for the load-bearing feature. If the wake alarm fails, someone oversleeps — so it's layered: local on-device notifications, the system-scheduled AlarmKit alarm (fires through Silent/Focus/lock/force-quit), and a best-effort Live Activity. Each rail can fail without breaking the safety net. A documented "independence invariant" guarantees no server roundtrip is ever in the alarm's critical path.
- Known limitations treated as decisions, not embarrassments. A ~7,000-line spec written before code, with deviations tracked in a decisions log so docs never drift — and every accepted MVP failure mode documented with why it's acceptable and what fixes it in v1.1.