↳ Case Study · App Design & Code-Based Prototype · Personal Project

Habit Journal

A journaling and habit tracking app built for overthinkers.

Try the prototype below.


My Role
Design & Build
Product · Interaction · Front end
Project Type
Solo Project
Built With
Claude, React
Timeline
2 Months

Background

Habit Journal is a journaling and habit tracking app I designed and prototyped using Claude and React. Users log what they did in a day and how they felt, and the app looks for correlations so users can see how different activities affect their mood.

This prototype was built using Claude's cheapest $20 Pro subscription, in 2 months, meaning this prototype cost $40 to make. My goal was to minimize token usage and keep costs low while creating a code-based prototype that would streamline developer handoff.

The category of wellness apps is centered around engagement. They often contain streaks, daily use incentives, reminders that pull you back in. Those mechanics work for plenty of people, but for the user I built this for, they backfire, which is where this project comes from.

The User

The User

I designed this for people who are analytical to the point of perfectionism, organized, prone to overthinking. This kind of person may seem contradictory, but that's human nature. They're drawn to self-tracking, yet also not suited for how most self-tracking apps are built.

For this user, streaks and structured rituals either don't motivate or only motivate temporarily. Instead of helping, they add another arena where one can fail.

Primary user

The Overthinker

Analytical · Organized · Self-critical
Drawn to habit tracking because they are interested in self improvement and find patterns and data interesting. They are analytical to the point of perfectionism. This makes common engagement mechanics unsuitable for them, since failure feels much worse to a perfectionist. More Info
Core Need To learn how their habits affect with how they feel on an individual level, learning things about themselves that they can't using population-wide advice.
Core Frustration Every app they try eventually becomes one more thing they are failing at.
Problem Statement

Analytical, self-critical people are drawn to self-tracking, yet are incompatible with how it is usually built. The engagement mechanics that work for some people are, to them, a source of stress, one more thing one didn't do correctly.



Guiding Principles

1

Let users be the decision makers

The app shows what habits correlate with certain feelings. It doesn't tell you what to do about it, or imply there is a correct way of doing things you missed.

2

No streaks

Nothing in the product manufactures failure for a day you didn't log in to the app. The target user has enough self-motivation to return to the app on their own, and doesn't want to feel punished for having a busy day or an off day.

3

Don't dumb it down

The target user is analytical and wants to see the details, to understand how the app works. This means the app doesn't hide information or assume a simpler interface is better. In the Insights tab, insight types don't appear and disappear depending on whether or not there is info. The full scale of what the app tracks is always visible.

Decision One

What I removed and why

Streak counters are the industry default and are very effective for some people. However, they aren't a good choice for the app's target user.

For the perfectionist, it manufactures a moment of failure when you break a streak, which, when combined with their perfectionist tendencies, creates a negative experience that affects their overall impression of the app - this user doesn't want to do something if it isn't done perfectly. Making it opt-in doesn't fix it. Testing found that self-reported perfectionists would opt into the streaks thinking it would motivate them, then have it backfire when life inevitably got in the way.


Original two-part daily flow

An example of a streak counter

Original two-part daily flow

The alternative this app uses, a progress bar

What I built instead

Instead of streak counters, I used a progress bar counting days logged against the number of days needed to show correlations in data. This encourages users to use the app at their own pace without the failure messaging of a potential missed streak. I was inspired by Duolingo's progress bar for cards that didn't yet have enough data to show a metric. Although Duolingo has some design choices that go against this app's design philosophy, this section was aligned with the design principles because it removed the failure conditions and allowed for user choice.

Decision Two

Two Part vs. One Time Flow

The original design was a two-part daily flow: morning check-in and evening reflection. It was meant to help users notice and record how their mood changed throughout their day depending on what they did.

In practice, users would miss one step and break the flow. If they skipped the morning, the evening had nothing to reflect against. If they skipped the evening, the day's log felt incomplete. Whatever half they completed felt diminished.

Logging twice a day daily isn't realistic for most people, so this wasn't an edge case. For an analytical, self-critical user, any chance for them to say "I did part of it wrong" is exactly what the app should avoid.

Original two-part daily flow

The first part of the original two part flow, where users check in mornings and evenings

Original two-part daily flow

The new flow, which works any time

Decision Three

Minimalism vs. Transparency

When doing UI design, it's typically better to keep interfaces simple and hide unnecessary information. In this case, this would mean hiding data insight cards until they have enough data. There are several to scroll through. Removing the unused ones would be cleaner, less cluttered. I chose not to follow this rule of thumb. Every possible insight card is always visible, whether or not there is enough data to populate it.

The reason is the user. Someone analytical isn't bothered by more information, but they are bothered by not knowing how things work. Someone analytical watching cards appear and disappear starts wondering why. Starts trying to reverse-engineer what triggers each one. Starts checking obsessively. A stable UI where every possible insight is visible removes that interaction. Then the user sees what the app can tell them and can tailor their usage to see the insights they're most interested in.

Minimalist Design

A minimalist design that hides cards lacking data. Leaves users wondering how the app works and what next steps to take.

Informative Design

The cards tell users what to do in order to view analytics. Builds trust and lets them plan next steps.

Conclusion

Every decision in this project traces back to the target user, and to one thing about that user: they are analytical to the point of perfectionism, and they need something different from the mechanics that make most wellness apps engaging.

No streak counter

Removed the mechanic that manufactures failure on missed days.

One entry, any time

Removed the two part flow that made partial completion feel bad. Whatever you record is now useful on its own.

Every card always renders

Decided against the disappearing UI elements that create questions for analytical users. What the app can analyze is always visible.

Next project
[Next Project Name]
View case study