Description
Investigate the design for the standalone pomodoro timer feature that will be introduced in Phase 2. The timer is independent of tasks initially — a complete pomodoro timer with configurable sprint, short break, and long break durations. This spike determines the timer state machine, persistence strategy for sprint completions, platform-specific behavior for background execution, and system tray integration on desktop.
Background
Foliary's vision is a pomodoro-first todo app, but Phase 2 starts with a standalone timer. Users need a working timer they can use on its own before connecting it to tasks in Phase 3. The timer must work across Android, iOS, and Desktop, which introduces platform-specific concerns for background execution and notifications.
Current Knowledge
- Foliary is a KMP app using Compose Multiplatform targeting Android, iOS, and Desktop (JVM)
- Desktop system-tray integration exists from Phase 0
- The app uses Orbit MVI for state management and Koin for DI
- Room is used for local persistence
- Phase 2 scope is a standalone timer — no task linkage yet
Scope
In scope: timer state machine (idle, sprint, short break, long break, paused), configurable durations, sprint completion persistence, platform-specific background execution (Android foreground service, iOS background tasks, JVM timer thread), system tray integration on desktop, notification behavior across platforms.
Out of scope: task-timer integration (Phase 3), UI implementation, cloud sync of timer data.
Outcomes
Description
Investigate the design for the standalone pomodoro timer feature that will be introduced in Phase 2. The timer is independent of tasks initially — a complete pomodoro timer with configurable sprint, short break, and long break durations. This spike determines the timer state machine, persistence strategy for sprint completions, platform-specific behavior for background execution, and system tray integration on desktop.
Background
Foliary's vision is a pomodoro-first todo app, but Phase 2 starts with a standalone timer. Users need a working timer they can use on its own before connecting it to tasks in Phase 3. The timer must work across Android, iOS, and Desktop, which introduces platform-specific concerns for background execution and notifications.
Current Knowledge
Scope
In scope: timer state machine (idle, sprint, short break, long break, paused), configurable durations, sprint completion persistence, platform-specific background execution (Android foreground service, iOS background tasks, JVM timer thread), system tray integration on desktop, notification behavior across platforms.
Out of scope: task-timer integration (Phase 3), UI implementation, cloud sync of timer data.
Outcomes