-
-
APP ICON
-
One grid for every habit: each habit gets its own colour and its own shape
-
Log: one tap marks a day; numeric habits count up to their daily target
-
Year calendar, all habits: each day is a small pie of the habits you completed
-
Year calendar, one habit: twelve months in that habit's colour and shape
-
Numbers: current and best streak, completion, and a gauge against your best
-
Insights: every habit compared day by day, and which one carries the month
-
Reminders: up to three a day per habit, on the days you pick
-
Home-screen widgets: your week, your month and today at a glance
-
Share card: any habit's month or year, ready for your story
-
CalHabit+: monthly, annual with the first week free, or lifetime
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.
Log in or sign up for Devpost to join the conversation.