KATSU — Habits that end
App Store (iOS, free): https://apps.apple.com/app/id6800968856 Source: https://github.com/kisshiii/shipaton-habit
The problem
Most habit apps only make money if you never stop needing them. Streaks you can't afford to break, re-engagement pushes, a little guilt when you try to leave. The app's success and your success point in opposite directions.
What KATSU does
You set up to three routines with a time. Then you write, in your own words, what you want to hear on the day you skip one. Not a template. Not encouragement from a stranger. A short letter from the version of you who meant it.
When the time passes and the box isn't checked, that line arrives as a notification. It's hard to ignore your own voice.
When you do everything on your list 66 days in a row, KATSU gives you a certificate, asks whether you still need this, and shows you where to cancel. Leaving is the goal.
Why 66 days
The research median for a behaviour becoming automatic is about 66 days (Lally et al., 2010), with enormous individual variation. The popular "21 days" figure has no basis. The streak requirement is not from the research — it's our design decision, to keep the app from becoming an open-ended subscription. We say so plainly in the store listing rather than dressing a product choice up as science.
Design decisions that follow from the thesis
- Three routines maximum. Fewer is easier to finish every day. The limit is the message.
- No streak counter, no score, no graphs. Graduation requires consecutive days, but we never put the number on screen and never call a missed day a failure. Break it and the count quietly restarts.
- Check off any time that day. The notification only fires after the time has passed, so every check is structurally "late." Punishing lateness would contradict our own design.
- The app never verifies you. You can tap everything at midnight and lie to yourself. Nobody is watching — that's exactly why the words you wrote matter.
- No backend. Routines, checks and your words stay on the device. The only network traffic is the RevenueCat SDK for subscription status.
- Safety guardrail. Users are invited to write harsh things to themselves, so before any text is saved the app runs a local check for self-harm and suicidal expressions. On a match it declines to save, shows a short non-judgmental message linking to findahelpline.com, and lets the user carry on. It runs entirely on device and the result is never stored or transmitted. The line we drew: attacking what you did is in scope. Attacking who you are is not.
Built with
Expo (React Native), TypeScript, expo-notifications (local only), expo-sqlite / AsyncStorage, react-native-view-shot, expo-localization (English + Japanese), RevenueCat, EAS Build. No server.
Status
1.0 shipped to the App Store on September 13, 2026. 1.0.1 — consecutive-66-day graduation, the certificate, a redesign and a clearer plan screen — is in review as of September 23.
For the judges
The paid tier unlocks multiple saved messages and per-routine targeting. Redeem this offer code for free access: SHIPATON2026JUDGE
To see the notification arrive without waiting: set a routine for two minutes from now and leave it unchecked. Graduation requires 66 consecutive days, so it cannot be reached during judging — the store screenshots show that screen.
Built With
- eas
- expo-notifications
- expo.io
- ios
- react-native
- revenuecat
- sqlite
- typescript
Log in or sign up for Devpost to join the conversation.