// case study

Mudo: one person,
idea to App Store.

Mudo is a privacy-first mood and anxiety tracker for iOS - live on the App Store, currently at version 2.12. I built and ship it alone: product decisions, design system, engineering, subscriptions, and App Store operations. This is what it looks like when one person owns a product end to end.

Role

Everything - product, design, code, store ops

Platform

iOS 17+ (SwiftUI)

Status

Live on the App Store, v2.12

Stack

SwiftUI · Core Data + CloudKit · Foundation Models · StoreKit 2 · WidgetKit · App Intents

// the brief

Most mood trackers are bloated journals: forced accounts, ten-screen check-ins, data shipped to someone else's server, and "insights" that restate what you just typed. The brief I set for Mudo was the opposite - a check-in fast enough to survive a bad day, intelligence that runs entirely on the device, and an architecture where privacy isn't a policy page but a structural fact.

No client, no spec, no team to hand things to. Which is exactly the point of this case study: every decision below - product, technical, commercial - had to be made and owned by one person, the same way it would be on your project.

// the app today

Mudo check-in screen - one tap to log a mood from 15+ options
a check-in - designed to fit inside ten seconds
Mudo on-device AI insight card reflecting on a mood recovery
an AI insight - written entirely on the phone
Mudo weekly report comparing weekday and weekend moods
weekly reports - patterns surfaced from the data

// decisions that mattered

Privacy as architecture, not a marketing line

Mudo has no accounts, no analytics SDK, and no backend. Mood data lives in Core Data and syncs through the user's own iCloud via CloudKit - users get sync and backup without my servers ever existing. The only network call in the entire app checks the App Store for a newer version. When the listing says "private," that's a property of the architecture, not a promise in the copy.

On-device AI with a quality gate

Insight cards, weekly reports, and next-day follow-ups are written by Apple's on-device Foundation Models - nothing leaves the phone. But raw LLM output isn't shippable: every generated insight passes through a quality gate that scores it for substance and statistical support. If a card would only restate the user's mood back at them, it never shows - a curated template takes its place. The same fallback path serves every device without Apple Intelligence hardware, so the experience degrades gracefully instead of gating the app to the newest iPhones.

A strict friction budget

A mood tracker dies the day a check-in starts feeling like a chore. Every flow was designed against a budget: a check-in takes under ten seconds, and home-screen widgets log a mood through App Intents without opening the app at all. Streaks, achievements, and a notification system with its own routing layer handle the habit loop - capped and scheduled so they nudge instead of nag.

A real subscription business layer

Monetization runs on StoreKit 2: a subscription group with monthly and annual plans, free-trial introductory offers, a discounted promo tier, and a paywall flow that tracks conversion state across sessions - including the unglamorous edge cases, like making sure a prompt isn't recorded as "shown" before it actually passed its display checks.

Shipping discipline most contractors skip

Every release ships with prepared App Store Connect copy - promotional text, what's-new, keyword strategy - and deliberate calls like lowering the deployment target from iOS 18.4 to 17.0 to widen the addressable device base while keeping AI features hardware-gated. App Review compliance (no diagnostic claims, no overclaiming AI on unsupported hardware) is handled as part of the work, not discovered as a rejection.

// anatomy of an insight

Mudo's architecture is the privacy story. This is the path a single mood entry travels - and where it stops:

01

Check-in

A mood is logged in under ten seconds - or straight from a home-screen widget via App Intents, without opening the app.

02

On device

The entry lands in Core Data. There is no account, no analytics SDK, and no server for it to be sent to.

03

iCloud sync

CloudKit syncs and backs up through the user's own iCloud - sync and restore without my servers existing.

04

AI writes

Apple's on-device Foundation Models draft insight cards, weekly reports, and next-day follow-ups locally.

05

Quality gate

Every insight is scored for substance and statistical support; weak ones are swapped for curated templates - the same path serving devices without Apple Intelligence.

06

Delivered

Cards, reports, and follow-ups reach the user. At no point did their data leave the phone.

// what shipped

Sub-10-second mood check-ins

On-device AI insight cards with template fallbacks

Weekly reports and pattern timelines

Next-day follow-ups that continue the week's thread

Home-screen widgets with one-tap logging (App Intents)

iCloud sync via CloudKit - no account required

Streaks, achievements, and a capped notification system

StoreKit 2 subscriptions with trials and promo offers

Onboarding, data export, deep links, universal links

// results

<10s

Check-in budget

every flow designed against it

1

Network call

the App Store version check - that's all

0

Accounts or servers

data stays on-device, syncs via iCloud

v2.12

Current version

steady releases since launch

Mudo launched in October 2025 and reached v2.12 within its first year - subscriptions, widgets, and on-device AI shipping steadily through App Review, every release with prepared store copy and no team behind it. The numbers above aren't growth metrics; they're architectural guarantees. For a product whose users log their mental health, "one network call" is the feature.

// why this matters to you

Mudo is here because it proves a specific claim: I can take a product from nothing to live on the App Store and keep it shipping - design system, on-device AI, subscription infrastructure, release notes, App Review, all of it - without a team and without being managed.

If you have an app that needs to exist and no technical co-founder to build it, that's the exact gap I fill: one person, one conversation, a shipped product.