Skip to content

Spike: pomodoro timer design #156

Description

@MessiasLima

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

  • Document the timer state machine with all states and transitions
  • Define configurable sprint, short break, and long break durations and their defaults
  • Determine how sprint completions are persisted locally
  • Document platform-specific background execution strategy for each target (Android, iOS, Desktop)
  • Define how the timer integrates with the existing desktop system tray
  • Specify notification behavior for timer events (sprint complete, break over)
  • Create implementation tickets based on spike findings

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions