Configurable countdown timer in the macOS StatusBar. Fast preset switching, simple options, all UI/logic described for deterministic AI work.
- StatusBar icon with timer (rounded square, clock inside)
- Click icon → popover with two columns: Focus/Rest timers
- Gear button for options
- Options UI: About, Sound, Focus Timers (input), Rest Timers (input), Quit
- Inactive timer: primary System Theme color (dark), background system theme color (white)
- Active timer: purple border appears
- Clicking active timer stops timer
- StatusBar: show 00:00 when no active timer
- StatusBar timer displayed in outlined pill with perfect UX (no aliasing, no cut edges, matches reference)
- Popover timer buttons display values as 'Xs' for seconds, 'X' for minutes, for both Focus and Rest (parsing and display logic unified)
- Countdown timer, display in StatusBar
- Start timer from preset
- Auto-stop/reset on finish
- Timer logic now uses precise decrement (remainingSeconds -= 1), no double-tick bug, countdown is accurate
- Change Focus/Rest timer values via options (input string → array)
- Parse input strings to arrays
- Persist user settings (UserDefaults)
- About (app info)
- Sound (toggle)
- Quit (exit app)
- Notifications/sounds on timer end
- Ensure Xcode project is SwiftUI, macOS, AppDelegate present
- NSStatusItem created, icon set
- Popover on click
- ObservableObject, countdown logic, published state
- Two columns: Focus/Rest, preset buttons
- Timer display in rounded square
- Gear/options button
- Modal/sheet with:
- About
- Sound toggle
- Focus Timers input (comma-separated)
- Rest Timers input (comma-separated)
- Quit
- Parse input strings to arrays
- Save/load settings (UserDefaults)
- Timer logic bugfix: no double-tick, countdown is accurate
- UX review, bugfixes
- Release build
- Use explicit, deterministic logic for all UI/logic
- All state changes must be observable and testable
- UI structure must match attached reference image
- All options must be accessible via popover
- No hidden state, all config via UI