-
-
Hundrd : Live Long & Strong
-
Home on a mobile screen: your consistency, current streak and today's challenges side by side, each one tap from done.
-
To-do: daily, weekly and monthly lists with a calendar next to them, kept separate from your streaks.
-
Stats: your longest streak, total check-ins, consistency over time and how each challenge is going.
-
Hundrd is now on the web at hundrd.app, with the same account and the same streak as on your phone.
-
Hundrd Icon
-
Frameless Mobile Home Page
Hundrd
Most habit apps cheer when you check in and say nothing when you miss a day. That's backwards, because the missed day is when a habit dies.
Hundrd is a longevity habit app built on one idea. A real, sourced why gets you to start a challenge. An AI accountability coach gets you to keep going. The coach shows up everywhere the app touches your habits: the check-in, the challenge screen, reminders, and the curator that suggests what to try next. Miss a day and it tells you. Save a streak and it means it.
It runs on Android, iOS, desktop, and the web from one Kotlin codebase.
Inspiration
I got tired of apps that bend the truth. Streaks that count days you didn't do. Longevity apps that say a 12-minute walk added 47 minutes to your life, with no source.
What it does
- Challenges. Pick from a curated library or make your own, with schedules, targets, and a focus timer. A short fit quiz suggests the right version of each challenge for you.
- An AI coach that reacts to what really happened. It calls out a miss, cheers a save, and is told never to invent longevity claims.
- An AI curator that turns "I want to sleep better" into real challenges. You can speak to it.
- Routines. Today's challenges appear as bubbles. Tap one to check in, or drag it away to skip today.
- Offline check-ins. Ticks save instantly, even with no signal, and sync later. If the server refuses one, the tick visibly undoes itself and tells you why.
- A biological-age estimate based on the PhenoAge model. Anyone can take the questionnaire. The blood-marker version is premium.
- An anonymous, AI-moderated community. You post under a handle, not your name, so it doesn't turn into a show.
- Hundrd in your AI assistant. An MCP server at mcp.hundrd.app lets you check in, view your challenges, and talk to your coach from AI assistants. Every request only sees your own data.
- Streaks and consistency are calculated when you open them, never stored. A stored number will drift from reality over time.
- Available in English, German, Spanish, and Hindi.
How I built it
Kotlin Multiplatform + Compose Multiplatform, with almost all UI shared across four platforms. Supabase is the source of truth. Each device keeps a local copy of your data plus a queue of pending writes. That makes the app fast and lets check-ins work offline. If the device and server disagree, the server always wins. AI runs through Supabase Edge Functions.
RevenueCat runs billing on iOS and Android.
- free trials and introductory offers
- monthly and quarterly plans
- Apple win-back offers for people who cancelled
- AI usage limits for each plan, so the expensive part of the app has an honest price
The design is neo-brutalist and built by hand: thick black outlines, hard shadows, flat soft colours, and buttons that press down. No gradients, no photos, no emoji. Every screen uses the same component set and adapts from phone to wide screen. On wide screens, the bottom bar becomes a side rail.
Challenges I ran into
Building with AI. I built Hundrd with AI coding agents, often several at once. They are fast, but "it compiles" is not "it works", and an agent will happily stop at compile. An early version built cleanly on all four platforms and was still broken. So I set a rule: no feature is done until it runs against the live backend and I have seen it with my own eyes. Running agents side by side also taught me to give them clear boundaries. Two of them once changed the same database at the same moment, and one change quietly never landed.
AI inside the app. The coach and curator run on large language models, and models drift. Old prompts can start saying things you never approved. At one point the AI kept promising users a "journey to 100". I can't promise anyone extra years, so I removed that phrase everywhere and the prompts now forbid it. I also learned to watch cost and errors from day one. A model update once broke every AI feature at the same time, and good logs made it a quick fix.
Four platforms, one codebase. Sharing code across Android, iOS, desktop, and the web saves a lot of time. But each platform still breaks in its own way. Android has build steps that catch things the compiler misses. iOS has its own linker and packaging rules. The web build had problems the phone apps never showed, like the browser Back button. Every screen also has to work on a small phone and a wide monitor, so I designed each one for both from the start.
Testing what really matters. Green tests are not the same as a working app. I tested every feature against the real backend, not fake data. For screens behind a login, I rendered the real screen off-screen and checked the picture. For offline check-ins, the hard part was the quiet failures: a tick that looks saved but never reaches the server. Those needed their own checks, because "no error" and "correct" look the same.
Store submissions and rejections. My first iOS build was rejected because it crashed on launch. The cause was hidden deep in the build: RevenueCat was included twice, once through the Kotlin library and once as a Swift package. Removing the extra copy fixed it, and the next review passed. EU distribution also needed extra trader verification from Apple, which took longer than the code did. On Google Play, I moved from internal testing to open testing to production step by step. Each rejection taught me something I now check before I submit.
What I learned
The honest version of a feature is almost always harder to build, and always worth it. A stored streak is easy; a calculated one takes work. An offline tick that might be wrong is easy; one that visibly undoes itself takes work. "You'll live longer" is easy; saying only what you can source takes work. That's the only version I'd ship to someone making real decisions about their health.
What's next
- Health Connect and HealthKit, to fill in blood markers for the bio-age estimate automatically
- More languages
- More ways to keep habits with friends, so you're accountable to people as well as the coach
Built With
- cloudflare-pages
- cmp
- compose
- compose-multiplatform
- kmp
- koin
- kotlin
- kotlinx-serialization
- ktor
- postgresql
- revenuecat
- room
- supabase