macOS menu bar app that reminds you to get off your chair and move.
- Countdown timer in the menu bar with a progress ring icon
- Interval selector (60 or 120 min) exposed in the popover header
- Pause and resume without losing elapsed progress
- Walk history with a month calendar grid and per-day counts
- Liquid glass popover panel backed by
NSStatusItem, pane-aware sizing - Native notifications when the timer expires, repeating at interval until reset
| Timer | Calendar |
|---|---|
![]() |
![]() |
- macOS 26.0+
- Swift 6.3+
# format sources
swift-format format --in-place --recursive Sources/ Tests/
# build
swift build
# build, sign, and run
script/build_and_run.shSigned bundle lands in dist/ModernWidget.app.
| Mode | Description |
|---|---|
run |
Default. Build and launch the app |
debug |
Launch in lldb |
logs |
Launch and stream process logs |
telemetry |
Launch and stream subsystem logs |
verify |
Launch and verify process started |
script/build_and_run.sh debug
script/build_and_run.sh logsSources/ModernWidget/
├── Models/App/ # entry point, app delegate
├── Models/MenuBar/ # panel placement model
├── Models/Reminder/ # countdown state, schedule, snapshots
├── Models/WalkHistory/ # month grid and retention rules
├── Services/
│ ├── MenuBarController # NSStatusItem + popover panel
│ ├── ReminderEngine # countdown logic, persistence
│ ├── ReminderNotifier # macOS notification delivery
│ └── WalkHistoryStore # walk log
└── Views/
├── MenuBarContentView # popover body
├── MenuBarIconView # status bar icon + title
├── ProgressRing # countdown ring
└── CalendarView # month grid with counts
- Timer counts down from the selected interval (default 60 min)
- Menu bar shows a progress ring and remaining time
- When the timer hits zero, a notification fires: "get off chair. short walk now."
- Notification repeats at the interval until reset
- Reset logs a walk to history and restarts the countdown
- State persists across app restarts via
UserDefaults
MIT

