We will be undergoing planned maintenance on Oct 7th 6:00AM UTC / Oct 7th 2:00AM ET

Inspiration

Every habit app I tried was built on a chain I was afraid to break. Miss one day and the number resets — and for me that was always the day I stopped opening the app. I wanted the opposite: something that showed me the shape of my year instead of a score I could fail.

What it does

CalHabit is a habit tracker built around a real calendar. Every day you complete a habit becomes a coloured dot, and a full year of every habit fits on one screen. Miss a day and it is simply an empty circle. No mascot, no guilt notifications, no gamification.

Each habit carries its own shape as well as its own colour — circle, square, heart, clover, sunburst, and nineteen more — so habits stay distinguishable at a glance and for colour-blind users. The marks carry that shape everywhere: the month grid, the year calendar, the home-screen widgets, and the cards you share.

Also in the app: numeric habits (8 glasses of water, 2 hours of deep work), per-habit statistics, a gallery of home-screen widgets (your week, your month, one habit's month, and a day-by-day chart), a shareable card for any month, and reminders. Thirteen languages, on iPhone, iPad and Android. No account required, no analytics, no tracking SDKs — the App Store privacy label reads Data Not Collected.

How I built it

Flutter, solo, in Tashkent, Uzbekistan. RevenueCat powers every purchase: entitlements, paywalls, offer codes, and restore. The calendar grid is custom-painted so a full year of dots renders without dropping frames, and the whole interface is set in JetBrains Mono — a monospace face aligns numerals into columns and gives the app a plain, instrument-like quality rather than a wellness-app one, which is the point for an app designed not to cheer at you.

Challenges I ran into

The name. I launched as "CalHabit – Habit Calculator" because it sounded distinctive. Nobody searches "habit calculator." Renaming to Habit Tracker across ten localisations was the single highest-value change I made.

The screenshots. Dark UI on a dark background, unreadable at thumbnail size — which is the size that decides most installs. I rebuilt the entire set: light frames, one headline each, calendar first.

Bids. Day one of paid acquisition I spent $1.49 of a $15 budget because my bids were below the auction floor. Apple's suggested bid is a floor, not a target.

Fonts. JetBrains Mono has no Hangul or kana. The app "worked" in Korean and Japanese because iOS silently fell back to a system font. Now I know, and the fallbacks are deliberate.

Accomplishments that I am proud of

The all-habits year view, where each day renders as a small pie divided into that day's completed habits' colours, so a month reads as a field of partial circles. It is the most divisive thing in the app and the thing I like most.

Shipping shapes for accessibility rather than decoration — habits were distinguishable only by colour, which fails colour-blind users.

And getting US tap-to-install from 17% to 36.8% in under two weeks by fixing the listing rather than spending more.

What I learned

Cheap installs are not the same as valuable ones. Kazakhstan gave me 50 of my 74 paid installs at $0.67 each and produced no revenue; the US and UK gave me 7 installs at $3.05 and produced both of the purchases I could trace to ads. I would not have believed that a week earlier, and only shipping early made it visible.

Europeans search "habit tracker" in English — every Italian and German install came from the English keyword, not the localised one. Russian speakers genuinely do search трекер привычек, and almost nobody bids on it.

What is next for CalHabit

Weekly-target habits, which came from a user reply: run three times a week, and the week counts as complete when you hit three, so missing Monday does not break anything. That fits the anti-streak premise better than anything on my own roadmap.

Then RevenueCat's Apple Ads attribution, so campaign-level revenue replaces inference. The 7-day free trial that used to sit on this list shipped on September 25; what I am watching now is how those trials convert.

Built With

Share this project:

Updates

Submission history