Most planners I have tried ask for too much before they give anything back. You make an account, you sync to a cloud you did not ask for, and then you get judged: streaks broken, tasks glowing red, a little counter reminding you how many days you missed. The tools that are supposed to reduce the friction of a day end up adding a layer of guilt on top of it.
I wanted the opposite. So I built Tiny Day, a cozy daily planner for Android. Your day, made manageable. No account, no cloud, no analytics.
The core idea: gentle and local
Two commitments shaped every decision.
The first is offline-first. Tiny Day is a React Native app built with Expo (SDK 57). There is no application backend at all. You brain-dump your day in plain language, the app shapes it into a timeline, and everything you type lives on your device. That is not a marketing angle bolted on afterward; it is the architecture. Expo Router owns navigation, Zustand stores own the state, and AsyncStorage persists it. When I say planning is deterministic and local, I mean the scheduler runs on your phone with your data and produces the same result every time. No round trip, no server, works on a plane.
The second is gentleness. Tiny Day never vibrates. It has no streaks. When you do not finish something, it never auto-carries it to tomorrow behind your back. The whole emotional posture of the app is captured in two lines it actually says to you: "Your day has been repaired," and at night, "You did enough for today."
How it works
The flow starts in the morning. You do not fill in a form field by field. You brain-dump, in plain language, and lib/parse.ts interprets that text into task cards, pulling out a name, a category, a duration, a priority, and time heuristics. From there lib/schedule.ts does a priority and energy pass and lays out a timeline. Crucially, it protects meals and deliberately keeps free time open. A planner that fills every minute is just a different kind of stress, so leaving gaps on purpose is a feature, not an oversight.
Priority in Tiny Day is three tiers, and they are shown as a glyph plus a label, never color alone:
- ▲ must gets a reminder plus one follow-up
- ● should gets a single reminder
- ○ optional stays silent
Notifications are local only, scheduled on the device through expo-notifications. There are quiet hours, and a privacy mode that shows a generic "Important reminder due now" instead of leaking the task name onto your lock screen. At most one gentle replan prompt. That is the ceiling on how much the app is allowed to nag you.
The Room is the part I am fondest of. It is a layered SVG scene (built with react-native-svg) with a window sky, a lamp glow, a tint overlay, and a tiny character. It has four time states plus a rain variant, it follows the real clock, and it brightens as you complete things and dims into lamplight at night. It is ambient feedback that carries no numbers and no pressure.
Then there is the feature that named the whole design philosophy: "My day went wrong." Real days fall apart. You wake late, a task runs long, you get too tired, an urgent thing lands. Instead of watching the plan turn into a wall of overdue items, you tap what changed. The repair engine in lib/repair.ts moves optionals, shortens flexibles, protects your ▲ musts and any fixed appointments, and inserts rest. Then it shows you exactly what it is about to change before it applies anything. You stay in control; the app just does the tedious reshuffling. And because repair is deterministic and local like the scheduler, it is fast and predictable.
The day closes with an evening review: a mood check-in, gentle stats, and leftovers triage where you decide, per item, whether something goes to tomorrow, to the backlog, or you simply let it go. Nothing moves on its own.
A few things I made sure not to skip. Accessibility is real: 44px and larger touch targets, dynamic type, reduce-motion and high-contrast toggles, and screen-reader labels. There is a Plan tab with tomorrow, an expandable week, a backlog, and a routine builder. And the Profile can load and remove reversible sample data so you can explore the app without polluting your own tasks.
One honest limitation
The natural-language parsing is a heuristic, not a language model. lib/parse.ts reads your brain-dump with rules for durations, categories, priority cues, and time hints. That is exactly why it can run fully offline and stay deterministic, which I consider a fair trade. But it means phrasing the parser has not seen can land in the wrong category or miss a time you clearly implied. The app leans on this by letting you edit any task in place or reschedule it to an explicit future date and time, so a miss is a quick correction rather than a dead end. Still, if you are expecting the free-form understanding of a cloud AI assistant, this is a simpler, more predictable engine, and I would rather be honest about that than oversell it.
There is also a practical packaging note: the current v1.1.0 APK is ARM64-only, which covers most modern phones and tablets but means a 32-bit-only device needs a separately configured build. Tiny Day targets Android 7.0 (API 24) and newer.
Try it
Tiny Day is open source under the MIT license. It is a fully offline React Native app: no account, no cloud, no analytics, and no vibration. If a planner that repairs your day instead of shaming you sounds like the kind of tool you have been missing, the code and the latest Android release are here:
https://github.com/royalpinto007/Tiny-Day
You did enough for today.
Top comments (0)