Softpop — a calm iOS app that learns how you relax
A native iOS app, live in the App Store. You pop soft, floating 3D bubbles with hand-tuned haptics and sound — no score, no timer, nothing to read. Quietly, the app notices how you pop (tempo, order, steadiness, pressure) and turns it into short, honest observations about your state and habits, compared only with your own baseline. Everything is analyzed on the device. Swift 6, SwiftUI, RealityKit, Core Haptics, StoreKit 2, on-device Foundation Models.
- Role
- Solo — product, design, implementation, tests, App Store release
- Stack
- Swift 6 · SwiftUI · RealityKit · Core Haptics · AVAudioEngine · Core Motion · SQLite (GRDB) · StoreKit 2 · Foundation Models
- Period
- 2026
The problem
People reach for their phone to calm down and end up scrolling, which does the opposite. The "antistress" toy apps are nice for a minute, then full of ads and forgotten. Journals and mood trackers ask you to read, type and think — exactly what a tired brain refuses to do.
I wanted something you can open with zero effort, that feels good in the hand, and that still gives you something back.
What Softpop does
- One gesture, no reading. You open the app and the bubbles are already there. You press, hold and release. No score, no level, no streak, no timer, no way to lose.
- It feels physical. Real 3D bubbles that drift, bump into each other, squish under your finger and ripple like water. Haptics and sound are tuned per bubble; every pop is a note that fits a soft chord, so the sound calms instead of exciting.
- Seven worlds. Glass, jelly, soap, marble, wood, metal and cloud — each with its own look, material and instrument.
- Music from motion. In song mode, bubbles bumping into each other play a melody note by note, and every pop adds a fitting note. You can load any MIDI file.
- It gives something back. Behind the scenes the app measures how you pop — rhythm, order, pressure, steadiness, movement — and after a few sessions shows short observations like "Faster than your usual today", each with "how do we know?" and "does this fit?".
Four of the seven worlds — glass, jelly, wood and metal. Each has its own material, lighting and instrument; the bubbles are real 3D objects rendered with RealityKit.
Press and hold: the bubble stretches and squashes under your finger and its surface ripples like water. The mesh is rewritten every frame from a pure ripple function.
The jelly world. A released bubble pops into small droplets, with haptics and a note tuned per bubble — no score, no timer, nothing to lose.
Reflections: short observations about how you pop, each compared only with your own baseline, with “how do we know?” and “does this fit?”.
The weekly card and the calendar of visits. All of it is computed on the device from your own sessions — there is no backend.
Softpop Plus, a StoreKit 2 subscription with a free trial. The scene stays free; Plus opens the full history, the weekly reflection and the personality report.
Where the engineering is
Honest by design. The research on touch behavior and mood is real but statistical, so the app never diagnoses. Every comparison is against your own baseline, not a population norm. Every sentence is an observation, and tests check the wording against a list of forbidden words — no "stress score", no medical claims. A link between what you do and what you say is shown only when it is strong enough in your own data.
Private by design. All raw touches and motion stay on the phone and are deleted after 30 days. There is no backend. The on-device language model (Apple Foundation Models) may only rephrase an observation from feature summaries — it never infers anything, and there is a template fallback.
A real 3D scene, kept testable. Rendering is RealityKit; the bubble surface is a mesh rewritten every frame from a pure ripple function. The physics and gesture logic live in a package that never imports RealityKit, so the field, the touch resolution and the pops are tested headless.
Clean architecture in Swift. Thirteen small Swift packages with one-way dependencies: domain → application → infrastructure (SQLite via GRDB, Core Haptics, audio, Core Motion, StoreKit 2) → presentation. The package graph itself enforces the boundaries. Swift 6 strict concurrency, SwiftLint clean, ~480 unit tests plus UI test journeys, CI with a coverage gate, decisions recorded as ADRs.
A real business model. The scene is free. Softpop Plus (StoreKit 2 subscription with a free trial) opens the full history, the weekly reflection, the calendar and a validated Big Five questionnaire (Mini-IPIP). English and Spanish.
How it was built
Solo and AI-native: I wrote the product concept, research and architecture first, then directed Claude Code as the implementation layer while owning the design, the tests and the quality bar. First commit on 5 September 2026; approved by App Review and live in the App Store on 30 September 2026.
It's also my proof that the same engineering standard carries over from web and AI backends to native mobile — and Alwenna is next, being prepared for release on iOS and Android.