← David Wu4-week solo design + buildCase 01 · 2026
An offline-first iOS journal

LifeFlow.

A habit tracker that auto-fills your numbers, then asks you the question that's actually worth answering: how did today feel?

TL;DRA native iOS app that pulls your sleep, steps, and work hours from Apple Health automatically - then prompts a 60-second evening reflection. 100% on-device. One-time purchase, no subscription, no cloud upload.
Role
Solo
Designer + iOS dev
Timeline
4 weeks
concept → working build
Stack
Figma · SwiftData
Xcode · Codex
Year
2026
Spring
LifeFlow - two iPhone screens in dark mode showing the Diary view (180-day heatmap, folders) and the Home dashboard (Good Evening greeting, 6-month activity heatmap, work, sleep, and steps cards).
The value of a diary
is the reflection - not the data entry.

Most habit-tracking apps fall into one of two traps. They turn self-improvement into a video game with badges and streaks, or they turn it into manual data entry that feels like filing taxes. Neither one helps you actually understand yourself. LifeFlow takes the opposite stance: automate the numbers, protect the privacy, and put the cognitive effort where it earns its keep - on the reflection.

§ 01 - The problem

Why do people quit journaling apps?

To find out, I surveyed 17 people - students, busy professionals, and a handful of long-term journalers who had given up. The frustrations clustered into a clear pattern.

Bar chart: top frustrations with habit-tracking apps from 17 surveyed users. Takes too much time, feels like a chore, I forget important details, and don't know what to track all tied at 3 mentions each. Data spread across apps and Other at 2. Privacy concerns at 1.
Fig. 1. Top quit-drivers from the 17-user survey. Four frustrations tied at the top - and all four describe the same underlying problem: cognitive load.

The data shows two themes. First, cognitive load: logging takes effort, feels like a chore, is easy to forget, and asks users to decide what to track in the first place. Second, disconnection: the numbers live in Apple Health, tasks live in Calendar, mood lives nowhere - and no single surface stitches them together.

Privacy showed up too, but only once as a quit reason. The interesting finding came later: when users described their ideal alternative, privacy moved from background concern to non-negotiable precondition. That distinction - quit-driver vs. structural requirement - shaped two different parts of the design.

§ 02 - Research · what 17 surveys taught me

Four findings that shaped every decision after.

Before opening Figma, I went through every survey response and pulled out the patterns. Four findings did most of the work - each one closed off a design direction and locked in another.

65%

Wanted automation with a quick personal check-in

Not fully manual, not fully robotic. 11 of 17 respondents preferred a hybrid model - auto-track the numbers, ask a few short questions in the evening. This became LifeFlow's core interaction model.

Bar chart: preferred app interaction style. Hybrid auto + quick questions: 11 users. Fully automatic: 3. Manual entry only: 3.
Fig. 2. Pricing-style bar chart of preferred interaction model. The hybrid mode beat both extremes - by a factor of ~3.7×.
1.82/5

Location logging ranked dead last

Auto task and goal tracking topped the list at 3.94/5. The combined daily overview followed at 3.76/5. Location logging scored just 1.82/5 - so I cut it from V1 entirely. Doing fewer things well beats doing more things passably.

Bar chart: average interest rating out of 5 for proposed features, from 17 surveyed users. Auto Task and goal tracking: 3.94. Combined daily overview: 3.76. Focus / Deep-work timers: 3.47. Food intake logging: 3.41. Sleep tracking: 3.18. Location auto-logging: 1.82.
Fig. 3. Feature-interest ranking. The top three answered the question of what to build; the bottom entry answered what to leave out. The 1.82 ceiling on location tracking made the cut decision easy.
76.5%

Rated on-device privacy 4 or 5 out of 5

64.7% gave it a perfect 5/5.Privacy wasn't a feature request - it was a structural requirement. That locked in the architecture: everything stored on-device, zero cloud uploads, no servers. Privacy by construction, not by promise.

Two big-number stat cards on a black background: 76.5% rated 4 or 5 out of 5 for on-device privacy importance. 64.7% gave privacy a perfect 5/5.
Fig. 4. Privacy-importance ratings from the 17-user survey. The 64.7% perfect-score share is the number that mattered most - it told me the right pricing model existed before the right feature set did.
0

Respondents picked monthly subscription

Of the four pricing options offered, monthly subscription got zero votes. Free trial first led the field at 10 votes; one-time purchase came second at 4. Because LifeFlow runs 100% offline with no recurring server cost, a one-time-purchase model is actually viable - and aligns the business model with the privacy promise.

§ 03 - Three hard decisions

Where the conflicts forced a choice.

Every product is the sum of its trade-offs. These three were the ones that mattered most - each one cost something real, and each one was worth it.

01

Phone-only storage, no cloud sync

The conflict: Storing data only on the device means users can't log in from a web browser, can't sync to a second phone, and can't recover anything if the device is lost.

The choice: I went 100% offline. I sacrificed web access and multi-device sync to guarantee absolute privacy. For a personal diary, keeping thoughts off the internet matters more than cross-device convenience.

02

No streaks, no badges, no gamification

The conflict: Daily streaks, badges, and social sharing are the standard playbook for keeping people in the app. Removing them costs measurable engagement.

The choice: I removed all of it. Users want a helpful tool, not a slot machine. They don't need digital trophies - they need a calm space to think and to actually see the patterns in their own behavior. Engagement isn't the goal; insight is.

03

Stitch together data that lives in three different places

The conflict: Tasks live in Calendar. Sleep and steps live in Apple Health. Stress and mood live nowhere. No single surface connects all three - and Apple Health itself double-counts data between Watch and iPhone, which has to be cleaned.

The choice: I built a layer that pulls all three sources together, dedupes the overlaps, and fills the missing piece through a 60-second evening check-in. The user finally sees the correlation between their sleep, work, and mood - in one place.

§ 04 - What I built

Three surfaces, one philosophy: do the boring work for the user.

The whole product is built around a single architectural idea - a sovereign vault. The app runs entirely offline, uses on-device APIs to silently compile the day's metrics in the background, and only asks the user to do work that genuinely requires their attention. By the time you open LifeFlow at 10pm, most of the data entry is already done.

01

The home dashboard - a command center, not a casino

Strict native dark mode (#000000 background, #1C1C1Epanels) to reduce eye strain. The 6-month heatmap replaces the “streak” pattern - instead of a number to protect, it's an honest visualization of consistency over time. Below it, four auto-populated metric cards (Work Time, Tasks Today, Sleep, Steps) pull from HealthKit. A single neon-green accent does the work of pointing the eye at what matters; the rest of the UI gets out of the way.

LifeFlow home dashboard on iPhone in dark mode. Good Evening greeting, day-logged badge, 6-month activity heatmap with neon-green-to-yellow gradient cells, four metric cards: Work Time 4h 12m (+12% from yesterday), Tasks Today 12/15, Sleep 7h 45m, Steps 8,432. Quick Actions row below: Tasks, Log Day, Schedule, Thoughts. Tab bar: Home, Trend, Diary, Setting.
Fig. 5. Home dashboard. The heatmap is the spine of the screen - it's not a streak you can break, just a picture of your last six months.
02

The correlation engine - data is useless without synthesis

Standard trackers show isolated data points: here's your sleep, here's your steps. The Trends page is built to help you see how those points relate. A segmented control flips between Daily, Weekly, Monthly, and 6-month views, and the chart types are deliberately different per data set so a drop in deep sleep visually lines up with the productivity dip the next afternoon. The user does the interpretation; the app surfaces the comparison.

LifeFlow Trends page on iPhone. D/W/M/6M segmented control at top with D selected. Sleep card showing bed time 11:30 PM, wake up 8:15 AM, 7h 45m. Time at Work card showing arrive 08:45 AM, depart 04:57 PM, 8h 42m (+27 min). Activity card with 8,540 steps and 65 min exercise time, biking and strength training entries. Feeling Today: Amazing. Tasks Completion: 12/15. Schedule entry: Product Strategy Sync 10:00–11:30 AM with 'Review design system specs' subtask.
Fig. 6. Trends page. The segmented control compresses four time scales into one surface, and the chart types are intentionally varied so the eye can pattern-match across categories.
03

The guided debrief - eliminating blank-page syndrome

The single highest point of friction in journaling is the empty text box. When users do need to enter manual data, the cognitive load has to be near zero. The Evening Entry flow breaks logging into seven micro-steps that start with low-effort interactions - tapping a pre-filled location, confirming what got done, picking a mood from a slider - and only ease into the freeform writing once the user is already engaged with the surface.

Five-screen iPhone flow showing the LifeFlow Evening Entry: (1) Diary view with 128 entries this year, Memory Map, and folder list. (2) Suggested Place - pre-filled location chips (ASU Poly, Work, Gym), Current Location and Manual Location buttons. (3) Goals - confirm what got done, with checkbox items. (4) Activities - 8,540 steps taken, 65 min workout time, biking and strength training rows. (5) Feelings - sliders for Mood, Stress, Energy.
Fig. 7. The full Evening Entry flow. Each step is one decision. The user is committed by step three; the open-ended writing happens late, when the cost of stopping is highest.
§ 05 - Aligning price with privacy

Why a one-time purchase is the only honest pricing model here.

Standard habit trackers run as data-mining operations dressed up as wellness apps. The recurring subscription exists to justify the recurring server cost, which exists to support the data collection, which is the actual product. When I asked the 17 respondents which pricing model they'd accept, the monthly subscription got zero votes - the only option that did.

Bar chart: pricing preference from 17 surveyed users. Free trial first: 10. One-time purchase ($9.99): 4. Free limited version: 3. Monthly subscription: 0.
Fig. 8. Pricing preferences from the 17-user survey. The free trial led the field - but the zero on monthly subscription was the clearer signal, and it's what unlocked the architectural decision below.

Because LifeFlow operates entirely on-device, there are no servers to pay for. No data pipeline, no auth backend, no analytics warehouse. That structural choice unlocks an honest pricing model: a single “buy it for life” purchase, optionally preceded by a free trial to satisfy the most-cited preference. The user owns the app, the data stays on their phone, and the incentives finally line up - the company has nothing to gain from siphoning information it doesn't need.

The lesson here. Pricing isn't a marketing decision; it's an architectural one. The minute you commit to recurring revenue, you commit to recurring server costs, which commits you to features that justify those costs. The decision to charge once, at the start, made every other decision easier.

§ 06 - What's next

From four-week prototype to shipped app.

LifeFlow is a real Xcode build - not a Figma mockup. SwiftData is wired up, HealthKit reads real metrics, and the screens you saw above render from the same SwiftUI views shown in the Xcode preview below.

Xcode workspace screenshot. Project navigator on the left shows IRONCLAD project structure with Core, Models, Services, Views (Diary, EveningLog, Home, Settings, Shared, Trends) and Assets.xcassets. The editor shows MainTabView.swift with a SwiftUI preview ModelContainer setup using SwiftData. Right panel shows a live preview of the home dashboard rendering on iPhone 17 Pro: Good Evening, 1-month activity heatmap, Deep Work 3h 5m, Tasks Today 7/1, Sleep 7h 22m, Steps 8,234, Quick Actions row, and tab bar. Build Succeeded indicator at top.
Fig. 9. The Xcode workspace, showing the SwiftData preview container alongside the live SwiftUI render of the Home screen. Build Succeeded in the top chrome - the screens above are not mockups.

The path from here to the App Store has three concrete phases.

The biggest lesson from this project: intentional constraint is a design tool, not a limitation. Forcing the app to be 100% offline forced me to be disciplined about information architecture in a way I would have skipped if cloud sync were on the table. Every screen had to serve the immediate, local needs of the user - because there was no “sync later” to fall back on.