-
-
Onset turns the iPhone into a 60-second FAST stroke check: Face, Arms, Speech, Time.
-
If in doubt, call: one-tap ambulance call, live timer since last known well, the call button on every step.
-
Each person's own normal, weekly check-ins and a trend chart — Onset Family, powered by RevenueCat.
-
How each sign is measured: ARKit face mesh, CoreMotion arm drift, on-device speech, onset time.
-
App icon (1024×1024).
-
Home screen, no device frame (1179×2556).
Inspiration
When someone has a stroke, every minute without treatment destroys about 1.9 million neurons (Saver, Stroke, 2006). One in four adults over 25 will have a stroke in their lifetime (World Stroke Organization). Paramedics use a simple test — FAST: Face, Arms, Speech, Time — but at home, in the moment, people freeze. They're not sure what a "droop" looks like, they wait to see if it passes, and they don't know when it started.
Every one of those questions is something an iPhone can actually measure. So I built Onset: the phone becomes the instrument.
What it does
Onset runs the FAST test in about a minute, with sensors instead of guesswork:
- F — Face. The TrueDepth (Face ID) camera tracks the face mesh through ARKit. Onset records the face at rest and in a big smile and measures how much weaker one side of the mouth moves.
- A — Arms. The phone lies flat on the palm, arm straight out, eyes closed, for 10 seconds per arm. CoreMotion measures how far the phone tilts away from where the arm started — a weak arm sinks and rotates. Spoken prompts guide the person because their eyes are closed.
- S — Speech. The person repeats a standard sentence ("You can't teach an old dog new tricks"). On-device speech recognition scores how much of it came through clearly.
- T — Time. Onset asks when they were last seen normal and turns it into a live paramedic card with a running timer, because treatment options depend on that time.
- It also asks about the two signs FAST misses — sudden Balance loss and Eye/vision changes (BE-FAST) — plus sudden severe headache or confusion.
If anything is found, the screen says so plainly and puts a one-tap call button for the local ambulance number (998 in the UAE, 112 in Turkey and Europe, 911 in the US…). The call button is on every screen of the check.
Personal baselines. No face, arm or voice is perfectly symmetric, so comparing everyone to an average creates false alarms. Onset lets you record each person's normal on a good day. Every later check compares against their own face, arms and voice — which makes a small change visible.
How I built it
- SwiftUI, iOS 17+, fully native.
- ARKit face tracking (TrueDepth) — left/right mouth blend-shape activations at rest and at peak smile, with an asymmetry score.
- CoreMotion — gravity-vector drift per arm and a tremor measure.
- Speech framework — on-device recognition, word-level accuracy against the target sentence (1 − word error rate), pace.
- AVSpeechSynthesizer for voice prompts, Swift Charts for the trend, UserNotifications for weekly check-in reminders.
- RevenueCat for the Family plan (details below), using the RevenueCat Test Store so the purchase flow works end to end without an App Store listing.
- Everything stays on the phone: no account, no server, no analytics.
Monetization — and the one thing we never charge for
The emergency check is free for everyone, forever. Charging in the moment someone might be having a stroke would be wrong, and it would also be bad product.
What people will pay for is the ongoing care around it, for the people most at risk — usually our parents. Onset Family (monthly or yearly subscription via RevenueCat, entitlement family) adds:
- up to 6 family members, each with their own saved normal,
- weekly 20-second check-ins with reminders, compared against that normal,
- a trend chart that shows when a smile is getting weaker week by week — worth showing a doctor,
- paramedic cards with blood thinners and conditions ready.
The buyer is the adult child; the value is peace of mind about a parent. The free tier (yourself + unlimited emergency checks on anyone) is what makes people trust the paid one.
Challenges
- Asymmetry is normal. Healthy faces aren't perfectly symmetric, so a fixed population threshold would flag them. The answer was the personal baseline: compare a person against themselves, not a population.
- Measuring an arm with a phone. The pronator-drift test is visual for paramedics; turning it into a number meant using the gravity vector's angle from the starting pose rather than raw acceleration, which is too noisy.
- Eyes closed. The arm test needs the person's eyes closed, so every step speaks its instructions and signals start and finish with haptics.
- Honesty. This is a screening aid, not a diagnosis. The app says that clearly, errs on the side of "call", and never tells anyone they're fine — only that no FAST signs were found and to keep watching.
What I learned
How much useful clinical signal is already inside a phone — and how much of building a health tool is deciding what not to say.
What's next
Arabic and Turkish, a lock-screen shortcut and Siri intent ("Hey Siri, stroke check"), sharing the paramedic card to family automatically, and validating thresholds with clinicians.
Onset is not a medical device and does not diagnose. If you think someone is having a stroke, call emergency services immediately.
Built With
- arkit
- avfoundation
- coremotion
- revenuecat
- speech
- swift
- swift-charts
- swiftui
- truedepth
- usernotifications
- xcode
Log in or sign up for Devpost to join the conversation.