Ommo — breathing you feel.
A native iOS breathing app built around one idea: a session you can feel with your eyes closed. Haptics lead the rhythm; a generative orb and a synthesized soundscape follow on the same clock.
What made it interesting
Three senses have to agree, frame for frame, or the illusion breaks. The app is built around a single session clock that drives all three:
- Haptics. Per-phase Core Haptics patterns whose tap rate rides the breath — accelerating into the inhale, easing through the exhale, with a soft thump at each turn. The sync target is ±50 ms, so it stays honest with the screen off.
- Visual. The orb is a stateless SwiftUI view rendered frame by
frame from a
TimelineViewoff the same clock — generative, not a video, and no Metal required. - Audio. A warm drone synthesized live with AVAudioEngine (detuned oscillators and filtered noise that breathe with the session). No bundled audio files.
The breathing, haptic, and audio engines are Swift 6 actors; the UI stays on the main actor under strict concurrency. The technique recommendation is deterministic and rules-based — no LLM — and the app is fully offline: no accounts, no backend, no third-party SDKs.
Stack
- Swift 6.2 · SwiftUI · SwiftData
- Core Haptics · AVFoundation (procedural audio)
- StoreKit 2 · iOS 26 · iPhone and iPad