Inspiration

My wife told me I snore. I didn't believe her. The recordings disagreed.

So I went looking for an app that could tell me how bad it was. Every one I tried failed the same way: they flagged the air purifier, the humidifier, the dog, my wife breathing. A real bedroom is a noisy place, and none of these apps could tell snoring apart from everything else in it. The ones that worked better did it by streaming eight hours of bedroom audio to someone else's server — which is not a trade I wanted to make.

There was a second problem. A few months of my own data eventually sent me to a sleep study, where I was diagnosed with airway collapse. I now sleep with a mandibular device. That outcome only happened because I had months of consistent data to bring to a clinician. Most snoring apps give you a score and a spooky audio clip. They don't give you anything a doctor can use, and they don't tell you when your snoring is the kind that warrants a real evaluation.

Snore IQ is the app I wanted to exist: accurate in a real bedroom, private by construction, and honest about when it should hand you off to a professional.

What it does

Snore IQ listens for a full night and tells you whether you snore, how much, when, and what pattern it follows.

  • All-night detection. Eight hours of continuous audio classification, running while you sleep.
  • Noise rejection. It distinguishes snoring from fans, humidifiers, air purifiers, pets, traffic, and a partner's breathing.
  • Pattern classification. It separates supine-predominant snoring (worse on your back, often responsive to positional therapy) from non-positional snoring, which changes what's actually worth trying.
  • Grounded recommendations. Interventions are matched to the pattern in your data rather than served as generic sleep-hygiene advice.
  • Risk screening. STOP-BANG screening gates the recommendation engine. If your responses and your data suggest elevated sleep apnea risk, the app tells you to see a clinician instead of suggesting a pillow. This was a hard product requirement from day one.
  • Nothing leaves the device. No cloud inference, no audio upload, no account required to use the core feature.

Live on both iOS and Android.

How I built it

The detection core started as a pretrained audio classification model from Hugging Face, converted for on-device inference and adapted to the specific problem of picking snoring out of overnight bedroom audio. The app itself is built in Flutter, with platform channels for the audio and inference layer and ships on iOS and Android from a shared codebase.

The pipeline runs entirely locally:

  1. Continuous audio capture in a background/foreground service that survives a full night without the OS reclaiming it.
  2. Windowed feature extraction and inference on-device, with aggressive duty cycling so the model isn't running at full rate on silence.
  3. Event aggregation into sessions, with per-night timelines, intensity, and positional correlation.
  4. Classification and recommendation logic layered on top of the session data, gated behind STOP-BANG screening.

Monetization runs on RevenueCat, which handles entitlements, purchase validation, restore, and the tiered offering logic. The free tier gives three full nights of recording and analysis; premium unlocks unlimited recordings, trends, microphone sensitivity tuning, backup, report export, and configurable storage. Pricing is one-time rather than recurring — a 90-day pass, a capped early lifetime tier for the first 1,000 users, and standard lifetime access. Because inference is local, marginal cost per user is effectively zero, which is what makes one-time pricing viable where cloud-based competitors have to charge monthly.

Challenges I ran into

Battery. This was the whole engineering problem. Running inference for eight straight hours on a phone that has to still be usable in the morning is a completely different constraint from running a model in a demo. The first working version would have drained a phone overnight. Getting it to 8–13% overnight, depending on the device, took months of iteration on duty cycling, buffer sizes, wake-lock behavior, and how much work happens per audio window versus deferred to session end.

Real bedrooms. Clean training data doesn't survive contact with a humidifier. Reducing false positives from continuous mechanical noise — which shares more spectral character with snoring than you'd expect — was the difference between an app that produced useful nights and one that produced garbage.

Staying alive all night. Both platforms are actively hostile to long-running background audio work, for good reasons. Making the session survive eight hours across OS versions, low-power modes, and aggressive OEM battery managers took a lot of platform-specific work.

Saying "go see a doctor." The most important product decision was where to stop. It's tempting to let an app that detects snoring also tell you what to do about it, in every case. Building the STOP-BANG gate meant deliberately withholding recommendations from a subset of users and sending them to a clinician instead — the right call, and the one that made the product trustworthy.

App Store review. The iOS submission went through multiple review cycles, including a rejection tied to the in-app purchase submission structure, before being approved for distribution.

Accomplishments that I'm proud of

  • Eight hours of continuous on-device inference at 8–13% battery.
  • Shipped on both platforms — live in the App Store and on Google Play, not a prototype.
  • Months of real nightly use as the primary test bed, not a weekend demo.
  • The app produced data that led to an actual clinical diagnosis and a treatment I still use.
  • A recommendation engine that knows when to shut up and defer to a professional.

What I learned

Local AI isn't a philosophical preference, it's an engineering discipline. The model was the easy part — you can pull a good one off Hugging Face in an afternoon. Everything after that is battery, background execution, thermal behavior, and the unglamorous work of making inference cheap enough to run all night on a device someone needs the next morning.

I also learned that in health-adjacent software, the constraint you impose on yourself is the feature. Screening gates and honest handoffs to clinicians make the product better, not weaker.

And on privacy: once the inference is local, privacy stops being a policy you promise and becomes a property of the architecture. There's no server to breach because there's no server.

What's next

Apple Watch and Wear OS integration. This is the biggest one. A phone on the nightstand hears you, but a watch on your wrist knows your heart rate, movement, and sleep stage — and, critically, your body position. Right now positional analysis is inferred; with a wearable it becomes measured. Correlating snoring events against confirmed supine time, heart rate variability, and restlessness would turn a good snoring record into something much closer to what a sleep clinician actually wants to see. It also opens up silent haptic feedback: a gentle wrist buzz to prompt a position change during a supine snoring episode, without waking anyone.

Also on the roadmap:

  • Deeper positional and trend analysis across longer time horizons.
  • Richer export formats built for sharing with a clinician ahead of a sleep study.
  • Broader device coverage and further battery reduction on older hardware.

Built With

Share this project:

Updates

Submission history