Reflectify 3-3-1: a journaling app that deliberately has…
Three gratitudes, three wins, one focus. Why the entries never leave the phone, why there is no model reading them, and what a constraint does to a product…
Reflectify 3-3-1 is an Android journaling app built around one structure: three things you are grateful for, three wins, one focus for tomorrow. That is the whole format, and the constraint is the product.
It is also the one app in my portfolio where I decided against adding AI, and I want to explain that properly rather than dress it up as a philosophy.
The obvious feature, and why it is not there
The obvious feature writes itself: send the entries to a model, get back mood trends, themes over time, a summary of your year. Every journaling app that raised money has it.
It requires shipping somebody's private journal to a third party. Not "anonymised", not "we do not train on it" — actually sending it, over the network, to a machine you do not control, in exchange for a summary they could mostly have written themselves.
The privacy policy for this app, hosted on my own site because the app has no website of its own, says the entries you write are used only to provide the feature you asked for and stay on your device. That sentence is either true or it is not. Adding sentiment analysis would have made it not true, and I would have had to rewrite the honest version into the vague version that every app in this category ships.
The feature was not rejected because AI is bad. It was rejected because I could not add it and keep the sentence in the privacy policy true.
Where AI would genuinely help, and where it would not
Being fair to the idea: there is a real version. On-device inference, models small enough to run locally, entries never leaving the phone. That is coming and I would use it.
But it is worth asking what the summary is actually for. The value in a gratitude practice is the act of writing it, not the analysis afterwards. A weekly digest telling you that you mentioned your family a lot is a feature that markets well and changes nothing about whether you journal tomorrow.
What the app does instead is much less impressive and more useful: it shows you what you wrote a year ago today. No model required, and the reaction it produces is the one the summary was trying to manufacture.
The 3-3-1 constraint is the whole design
Seven fields, fixed. Not a blank page.
A blank journal is the most intimidating interface in software, and it is why most journaling apps are downloaded, opened twice and abandoned. Three specific prompts and a limit is a five-minute task rather than an open-ended one, and the difference between a five-minute task and an open-ended one is whether it happens on a bad day.
The design consequence: no rich text, no attachments, no folders, no tags. Every one of those was considered and every one makes the blank page bigger. A product whose value is a constraint has to defend the constraint against its own feature requests, including the reasonable ones.
What being local actually costs
Honest accounting, because "your data stays on your device" has a price and most apps that say it do not mention theirs:
- No sync. Two devices means two journals. That is a real limitation and the most common request.
- A lost phone is a lost journal unless the user exported. So export is prominent rather than buried in settings, and it produces a plain readable file rather than a proprietary blob.
- No analytics on content. I have no idea what people write, which means product decisions come from interface behaviour and from asking, not from data.
The streak problem, and why I mostly avoided it
Every habit app has a streak, and streaks work — right up to the day somebody misses one. Then the counter resets to zero, and a person who journalled ninety times out of ninety-two is shown a number that says they have done nothing.
That is a design that punishes the exact user it should be encouraging, and it is the most common reason people abandon this category of app permanently. Missing a day is a reason to open it tomorrow; being told you are back to zero is a reason not to.
What the app shows instead is the count of entries and the year-ago entry. Both go up and to the right, neither can be lost, and neither creates a reason to fake an entry at 11:58pm to protect a number — which is the other thing streaks reliably produce, and which quietly corrupts the data the app exists to collect.
What "no account" removes, and what it costs
There is no sign-up. Nothing to create, no email to verify, no password to forget, and nothing to leak, because there is no server holding anything to leak.
The onboarding consequence is significant: the first screen is the first entry. Most journaling apps spend three screens on account creation and a tour before a person writes anything, and the drop-off happens in those three screens rather than in the writing.
The cost is the one I named earlier and will not soften: no sync, no recovery, and a lost phone is a lost journal unless the person exported. That is a real trade, and the mitigation is making export prominent and its output plain and readable — a file somebody can open in any text editor in ten years, rather than a proprietary blob that needs this app to mean anything.
A journal that outlives the app that recorded it is the actual goal. Very little else about the product matters more than that.
The lesson I took to other products
Decide what you will not collect before you build, and write it down where a user can read it. It is much easier to decide you do not want a piece of data than to remove it after a feature depends on it — and once it is in a published privacy policy, the decision defends itself against every future feature that would quietly contradict it.
That is the actual mechanism here. Not discipline. A sentence I would have had to go back and edit, which turned out to be a stronger constraint than any intention.
https://aoneahsan.com/blog/reflectify-ai-journaling-project