I built a mood tracker. But what I actually want to write about isn't "I shipped an app" — it's how carefully a product should speak when it barely has any data. That's the question I sat with the longest.
Why Mood Weather
Most mood apps score your feelings. They turn a mood into a 1–10, draw a graph, and sometimes say things like "you're showing a tendency toward depression." I didn't want that. A day's mood feels less like a verdict and more like a passing state.
So I made the metaphor weather. Today is clear, yesterday was fog. Instead of "I'm a wreck," I wanted you to be able to say "today's weather is stormy." This isn't a logging app — it's an app for observing, carefully.
The hardest decision: the voice
What I deliberated on longest wasn't a feature. It was a single sentence. Do I say "you are like this," or "here's a signal I'm seeing"?
The less data you have, the more a conclusion becomes a lie. Telling someone "you're sensitive to caffeine" off three days of logs is just false. So I pinned the app's identity to one line — signal, not diagnosis. The copy, the screens, the stat cards all follow it. Even when it surfaces a connection, it shows the sample size as a plain number, like "3 of 4 days." It doesn't hide how small that is.
The 10-second check-in problem
My first input form was heavy: several sliders, number fields, a note. But in an app you use every day, friction is death. Users don't open it again on day two.
So I made the default path "save just the weather." Context (sleep, movement, and so on) is added only when you want to. On mobile, all six weathers fit at a glance and the save button is pinned to the bottom. And one line for the days you skip — a missed day isn't a failure, it's a blank.
The first 14-day wall
Patterns only show up once data accumulates. An "insight" before 14 days is just noise dressed up as truth.
So I locked the report until day 14. Instead of leaving that gap empty, I turned it into a sense of progress — 1/14, 2/14 — and from day three, a light preview. Give a small reward, but defer the conclusions. I chose saying less over building hooks to keep people around.
Local storage and backup
No login. Open the app and you're in; records stay on this device only. For an emotional journal, privacy is trust.
Local-only has a weakness, though — data can vanish. So I added JSON export/import as a safety net. I also added optional outside-weather capture: the location is used once to fetch the weather, and the coordinates aren't stored. Trust is the whole point of this app, so I was especially careful with that one line.
Going public
It's on Vercel. Still an experiment.
This app won't tell you who you are. It just shows you what your mind's weather has been like lately.
Link: https://mode-weather.vercel.app
That's the concept and the first deploy. I'm not trying to claim "this is the right answer." I made these decisions, and the real test starts when actual 14-day histories begin to accumulate. That result is for #2.


Top comments (0)