
Morningpass
iOS alarm that rings until you finish chained wake-up challenges
- Role
- Solo: design, iOS, backend
- When
- Jul – Aug 2026
- Status
- Built for iOS 26, pre-release
- Highlight
- ~37K lines of Swift, solo
Demo · recorded in the iOS Simulator
Overview
What it is
Morningpass is a native iOS 26 alarm app. It schedules real system alarms with AlarmKit, then asks you to finish an ordered chain of wake-up challenges before the wake session counts as done. The code defines 24 challenge kinds, 2 of them for accountability, from math and shake to push-ups, Stroop games and AI-checked photos.
I built all of it alone: the design, the SwiftUI app, the widget and Screen Time extensions, two Supabase Edge Functions, a marketing site and the Xcode Cloud setup. Around it sit a Screen Time based Morning Block that shields distracting apps after the alarm, sleep and energy insights, and a subscription flow.
Why it’s interesting
- AlarmKit always shows Apple's slide-to-stop UI, so Stop runs an App Intent that hands off to the app, which opens the challenge chain.
- The chain, mission payload and progress are persisted, and nudge alarms are scheduled if you idle, so killing the app cannot skip the challenges.
- Screen Time support spans four targets: the app, a DeviceActivity monitor and two Shield extensions, sharing config through an app-group store.
- Challenges use Vision, CoreMotion, the pedometer, GPS and barcode scanning, and photo challenges are verified by Gemini behind a Supabase Edge Function.
- Sleep is inferred on device from phone stillness, with a step-history fallback and HealthKit when granted, so no wearable is needed.
- 24
- wake-up challenge kinds
- ~37K
- lines of Swift, written solo
- 4
- app extensions: a widget and 3 for Screen Time
Architecture
How it fits together
Screens
A closer look
Marketing site. The static landing page I built in the same repo.
1 / 1Tap a screenshot to enlarge it.
Features
Everything it does
Alarms
- System alarms — Scheduled, cancelled and observed through AlarmKit, with a streak card on the alarm list.
- Alarm wizard — Time, challenges, schedule with weekday chips or one-time, then a review step.
- Alarm protection — Lock changes in the last hour, keep ringing during challenges, force-stop exit lock.
- Idle re-ring — A stalled challenge re-rings after a configurable timeout.
- Accountability buddy — Deadlines and friend approval, processed by a cron-triggered Supabase function.
Challenges
- Basics — Math at three difficulties, shake, steps, and QR or barcode scanning with a printable QR.
- Get out of bed — GPS distance walk, step outside and a mirror selfie.
- Move your body — Push-ups, squats and jumping jacks tracked with Vision and motion data.
- Wake your brain — Stroop ink color, reaction speed, color switch and rule switch.
- Routine photos — Made bed, shower, water, teeth and more, verified by Gemini.
- Animated explainers — Every challenge has a detail sheet with its own animation.
Morning Block
- Shielded apps — Choose apps, categories and websites to shield for a set time after the alarm.
- Shield actions — Tapping a shield only closes the blocked app.
- Commitment Mode — Blocks app deletion while a wake challenge is active.
- Pre-alarm lock — Blocks deleting the app in the hours before an alarm.
Insights
- Sleep and energy — Sleep summary, estimated energy curve and wind-down window.
- Sleep debt and need — Debt, need, tonight's plan and a consistency ribbon.
- Data sources — Phone stillness, step history, and read-only HealthKit when granted.
- Morning recap — A sleep recap sheet and recommendations after waking.
Onboarding and billing
- Onboarding funnel — Wake goal, diagnosis questions, cost reveal, plan chart, hold-to-commit, permissions.
- Subscriptions — Superwall paywall with a native fallback, plus a gate for expired subscribers.
- Cancellation flow — A retention flow with a grace period.
- Widget — A Tomorrow widget showing wake time and streak, opening Morning Review.
Tech stack
What it's built with, and why
App
- Swift 6 and SwiftUI
- The whole app, with strict concurrency checking, targeting iOS 26.1.
- SwiftData
- Stores alarms and their challenge chains.
- App Intents
- The Stop action that hands off from the system alarm to the app.
System frameworks
- AlarmKit
- Schedules, cancels and observes real system alarms.
- FamilyControls, DeviceActivity, ManagedSettings
- Morning Block and Commitment Mode across four targets.
- Vision, CoreMotion, CoreLocation, AVFoundation
- Push-up, shake and step tracking, GPS walks and barcode scanning.
- HealthKit and WidgetKit
- Read-only sleep data and the Tomorrow widget.
Backend
- Supabase Edge Functions
- Two Deno functions, 465 lines: photo verification and accountability deadlines.
- Postgres migrations
- Three SQL migrations, including the accountability cron.
AI
- Gemini
- Checks resized photos for routine challenges; routed via OpenRouter per a code comment.
Payments & analytics
- Superwall
- Remote paywall, with a native fallback view in the app.
- PostHog
- Product analytics from the iOS app.
Tooling
- XcodeGen and Xcode Cloud
- A post-clone script generates the project and resolves packages in CI.
- XCTest
- 46 unit test files and 7 UI test files driven by launch-argument seeds.
