2026
The scale lies a little every day. The trend tells the truth.
- Problem
- Water, sodium, time of day, and the scale itself push a daily weigh-in around enough that you read a one-pound bump as failure, while the trend you care about, weeks in the making, stays buried.
- Solution
- One bold smoothed curve cuts through the daily readings, claim and disclaim controls clean muddy multi-profile Health data, and milestones tied to real deadlines keep a months-out goal concrete.
- Stack
- SwiftUI and HealthKit on a read-only data architecture, a LOESS trend curve with gain and loss area fill, range buckets, composed pinch, scrub, and pan gestures, a spike-outlier filter, and a celebration layer that fires only on a real new low.
Most weight trackers pretend a single reading means something. It rarely does. The real virtue of a scale is the trend, and the trend hides under noise, hydration, time of day, even what the scale decides to say that morning. Improvements that take weeks or months to show get lost in the daily wobble. ClearWeight makes the trend the protagonist. A smoothed LOESS curve with gain and loss area fill, range buckets at longer windows, contextual tooltips, and a celebration layer that keeps you on track across multiple goals. One bold line that cuts through the noisy daily measurements so the trend is the thing you actually see.

The problem is perception
A daily weigh-in is noisy. Water, sodium, time of day, and the scale itself all push the number around enough to bury the signal a person actually cares about. Show someone the raw daily reading and they read a one-pound bump as failure. The product problem is not measurement. It is perception. ClearWeight's job is to make the underlying trend legible enough that a user trusts it over the number under their feet this morning.
“The scale lies a little every day. The trend tells the truth.”
Cleaning dirty data

In testing we saw how noisy HealthKit data gets when a dozen apps all write into it. Readings muddy across multiple profiles, and not all of it is even the same person. Giving the user the ability to claim or disclaim individual data points, and inferring their profile automatically, let us spot the outliers and pull them out of the trend. A cleaner read sitting on top of dirtier data.
Understanding the user
A user's goals get muddied by more than noisy data. A long-term goal is hard to stay motivated by when the finish line is months out and the daily view barely moves. Understanding what actually motivates someone, and letting them set sub-goals tied to real deadlines inside the larger goal, is what drove the milestones feature. Someone can pin a target to fitting into a dress by a wedding date, or hitting a health marker by the day itself, so progress toward the big goal stays concrete and the momentum holds.
Taste over algorithms

An early trend version used a 7-day rolling average that, on long windows with sparse readings, traced sharp V-shapes between distant points that read as "your weight crashed." The diagnosis came from putting ClearWeight screenshots beside a competitor's and asking what felt different. The answer was three problems at once: the wrong algorithm was being displayed (a better one was computed but unused), the smoothing bandwidth was too low, and there was no time-based minimum window for short series. Catching it took a human eye. The better curve was already being computed, it just was not the one on screen, and only seeing it next to a competitor made the problem obvious.
Outcomes

A trend-first weight tracker built end to end by one person across product, design, architecture, and implementation. A read-only data architecture that makes corrupting real Health data structurally impossible. A smoothed LOESS trend curve with honest gain and loss area fill, range buckets, and composed pinch, scrub, and pan chart gestures. A celebration layer disciplined to fire only on a real new low. A local spike-outlier filter that catches the cat-on-the-scale reading without discarding legitimate plateaus.
Next case study
Solo product build
MoveOn
