The context
Four things that normally live in four different apps: habits, focus, money and reading. Switching apps all day is enough friction to abandon all four. Lume puts them behind one interface, with a dashboard that answers the question that matters in the morning: what do I do now.
- Modules
- 4
- Works offline
- 100%
01
Local first, cloud second
Global state is a useReducer persisted to localStorage, and syncing to Firestore is optional — it kicks in when there is a session. In practice: the app opens and works with no network, without waiting on authentication, with no loading screen. Sign in and your data follows you to another device; do not, and you keep using it.
The reverse order (cloud first, cache second) is more common and would have been easier to write, but it turns every app launch into a bet on the connection. For a habit app that has to open in two seconds in the morning, that kills the very habit it exists to build.
02
Gamification that does not become a chore
Habits earn levels and coins, spent in an in-app store. It is a well-worn mechanic, and its risk is well known: it becomes one more obligation. The choice was to keep the interaction cost at a single tap — the daily check-in is a button on the dashboard, not a form.
The year heat map and the current streak exist for the same reason: they show progress without asking for anything. The user fills in nothing to see them.
03
A theme that follows the system
CSS theme tokens for light and dark, with system-ui — SF Pro on Apple devices, the native font everywhere else. It is a personal app opened several times a day: feeling native matters more than having a visual identity of its own.



