Inspiration

Every habit app I have used shows me the same thing: my past. Streaks, calendars, "you're on day 12." That works while the streak is alive. The day it breaks, the app becomes a record of failure and I delete it.

But nobody tracks a habit because they want a nice-looking calendar. They do it because they believe that reading twenty pages tonight adds up to something. No app ever shows you that something.

So I built the opposite of a habit tracker: habit apps show you your past. This one shows your future.

What it does

You check off today's habits. Mirai Meter multiplies that by a year and shows you what it becomes.

Reading, 4× a week → 10 books a year — one shelf Waking up 90 minutes earlier → 365 hours — 15 full days Running 3km → 312km — Tokyo to Nagoya

Three design decisions carry the whole app:

1. The number is multiplication, not prediction. It is your own declared frequency blended linearly, over 28 days, into your actual completion rate. On day one it is entirely the promise you made to yourself; by day 28 it is entirely your real behavior. Nothing is forecast, so nothing can be a lie — and the number never jumps discontinuously on day two.

2. Every habit is measured in the unit that habit is actually for. This is the part I got wrong first and had to rebuild. I was converting everything into hours, and my own reaction to "strength training: 47 hours this year" was so what. Nobody lifts because they want to spend more hours lifting. So: running is distance or time, reading is books or pages, cooking at home is money saved, strength training and stretching are days sustained. If the number grows in a unit you don't care about, growth doesn't feel like anything.

3. Missing a day costs you almost nothing. The pace is a 28-day moving average, so one skipped day moves the number by 1/28th. Skip a month and it shrinks honestly, but the app never shows you a broken chain, a red badge, or a weekly report of what you failed to do. Unchecked habits stay on the home screen as dotted outlines — an open invitation, not an accusation. This is not just tone: Lally et al. (2010) found that missing a single day had no meaningful effect on habit formation, so an app that punishes you for it is punishing you for nothing.

The paid tier is one question the free tier doesn't answer: how many days until this is automatic? It uses the same 28-day blend as the free calculation — no separate coefficient, so the same person never sees two numbers moving at different speeds — starting from a per-habit estimate in repetitions, not days (Lally measured repetitions; a person doing something 3× a week is not 66 days from 66 repetitions). Everything free stays free: unlimited habits, all the projections, all the analogies. Pro only sells you analysis of yourself.

How I built it

  • Next.js 15 + React 19, wrapped as a native iOS app with Capacitor 7 — fully bundled, no remote server.url, so the app works with the network off.
  • RevenueCat (@revenuecat/purchases-capacitor) for the monthly (¥300) and yearly (¥1,800) subscriptions and the one-month free trial. Trial state and remaining days are read entirely from RevenueCat — the app keeps no purchase state of its own.
  • Codemagic builds and ships to App Store Connect, so the entire iOS pipeline runs without a Mac.
  • The math is pure functions with no framework in them — lib/future.mjs, lib/gain.mjs, lib/pro.mjs — covered by node --test. The store (lib/store.mjs) keeps only dates and a history of checked days: no counters are ever persisted. Streak length, elapsed days, and pace are recounted from the raw history on every render. A saved counter is a bug waiting for a timezone change; a recount cannot drift.
  • Habits and check-ins stay on the device. No account and no analytics; apart from purchases (Apple and RevenueCat), the only thing sent is the answer to an optional one-question survey. Fixed cost: zero.

Challenges I ran into

I designed the headline number backwards, shipped it, and had to tear it out. The home screen originally showed how much today moved your future — a delta. It reads well in a spec. In practice the delta shrinks toward zero for the person whose pace never changes, which is to say the app gave the least to the user doing the best. The reward pointed the wrong way. Reframing it as "if you keep this up" made it positive every single day, and made the number jump when you check a third habit.

Choosing a name meant choosing to lose search traffic. I measured the Japanese App Store with the iTunes Search API before writing any code. Thirteen new apps in the last 18 months named themselves with "XP", "level", or "status" — all thirteen are dead. The two that survived named one concrete image instead ("like a board game", "pixel-art planet"). So I named the thing concretely — and then found that my chosen name has literally zero competing results because it also has zero search volume. I kept it and moved the acquisition burden onto the subtitle and keywords, which target the habit-tracker shelf instead. That trade is written down so I can check later whether it was wrong.

Restraint has to survive contact with the review guidelines. I originally hid the Pro entry point until day 7 so first-day users wouldn't burn a trial on an empty dataset. That is a straightforward App Review 2.1 rejection — in-app purchases have to be findable. The fix wasn't to give up the intent but to keep the entry point always visible and change only how hard it sells.

Accomplishments that I'm proud of

The app tells you the truth even when the truth is small. There is no place in it where a number is inflated to make you feel good — the "money saved by cooking" figure prints its own source on screen, and the early-rising calculation subtracts the time you gave up by going to bed earlier, because shifting sleep isn't a gain. If the subtraction comes out at zero or less, the app refuses to create the habit at all. Writing code that declines to show a flattering number was the decision I'd defend hardest.

What I learned

Measuring the market before writing code changed what I built, not just how I marketed it. The thirteen dead "level up" apps are the reason there is no XP in this app — and cutting that out is the thing that made the concept specific enough to explain in one sentence.

And: the unit matters more than the number. Same data, same math, different unit — one version made me want to keep going and the other made me shrug.

What's next for Mirai Meter

  • Shipped to the App Store on 2026-08-17. Next is rebuilding around what the first users actually say
  • Reading the trial data in RevenueCat as an answer to one question: will anyone pay to be told how many days until a habit is automatic?
  • Android, from the same Capacitor codebase

Built With

Share this project:

Updates

Submission history