5 min read
Most habit apps decide when "today" ends the same way most web servers do: at midnight, in whatever timezone the server happens to run in — usually UTC. That is an invisible assumption almost nobody notices, right up until it quietly breaks a streak they did nothing wrong to lose.
Server time is convenient to build against and completely irrelevant to when your day actually starts and ends. If an app logs a completed habit against "today" using UTC midnight as the cutoff, it is silently assuming every user lives at UTC+0. Almost nobody does.
It rarely shows up as an obvious bug — more like a streak that resets for no visible reason. The people who hit it most: frequent travelers crossing timezones mid-trip, remote workers logging habits from a different country than the one they signed up in, night-shift workers whose natural "day" runs well past midnight, and digital nomads who might be in three timezones in a single month.
Someone in Tokyo (UTC+9) completes their evening habit at 11pm local time. In UTC, that same moment is already 2pm the next calendar day. An app tracking "today" by UTC midnight would file that completion against tomorrow, not tonight — leaving tonight looking incomplete and, depending on the app's rules, quietly ending a streak that, from the user's own evening, was never actually broken.
The fix is not complicated in principle: store each user's IANA timezone (the standard identifiers like "Europe/Paris" or "Asia/Tokyo" that also account for daylight saving automatically), and compute every "today" boundary, streak calculation, and daily reminder from that stored timezone instead of the server's own clock.
It is easy to overlook precisely because it only ever shows up as an edge case — until it is your edge case, at which point a broken streak feels arbitrary and a little unfair, because it was.
Every Iniscia profile stores its own timezone, and every "today" boundary — for checking off a habit, for the dashboard, for the daily reminder — is computed from it, not from server time. It is a small detail. It only matters the moment it doesn't work, which is exactly why it is worth getting right before that moment happens to you.
Free to start, honest streaks, no fake progress.
Start free