TodayOnlyToDo
Most to-do apps become a permanent backlog you scroll past for weeks.
A small offline Android to-do app that deliberately can't hold yesterday's tasks. Everything clears at the start of a new day, so the list never becomes a backlog.
What I built
- Built the app fully offline, with local persistence that survives restarts but clears on a new day.
- Used MVVM to keep the date logic, storage, and UI state in separate, testable pieces.
Key decision
Hard-scope to today. Tasks persist locally (offline, survive restarts), but the view only ever shows the current date, and a date check on launch clears anything older. MVVM keeps the date logic, storage, and UI state separated so the 'what day is it' rule lives in one place.
What this project taught me
- Removing features can be a product decision too: a deliberately restrictive rule ('today only') creates clearer behavior than giving the user unlimited flexibility.
The full reasoning
The problem, options, and constraints
Problem
A to-do list that keeps everything turns into a list you stop reading. Last week's unfinished items sit at the bottom, and nothing gets done because the list itself is discouraging.
Observation
I wanted a to-do app that didn't turn into another permanent backlog. The 'today only' rule forces me to decide what actually matters now instead of endlessly moving unfinished tasks forward.
The question
What if the list simply couldn't hold yesterday: a clean slate every morning, with 'today' as the only scope?
User need
Someone needs to capture what they'll do today, check it off, and start tomorrow fresh, with no sync, no account, and it working with no signal.
Constraints
- Small solo project
- Fully offline: no network at all
- Local persistence that survives app restarts but clears on a new day
Options considered
| Option | Trade-off |
|---|---|
| A normal persistent to-do list with a 'today' filter | Familiar, but the backlog still exists and still weighs on you; the filter is cosmetic |
| Hard-scope to today: previous days clear automatically | Opinionated and loses history, but the constraint is the entire point |
Architecture
Add task --> local store { text, done, date = today }
App launch --> if stored date < today: clear --> fresh list
View --> tasks where date == today, offline, no networkThis page explains the why. GitHub has the proof of what was built.
View full repository