A native macOS menu bar application that displays unmissable meeting reminders with support for EventKit (macOS Calendar), Google Calendar, and Microsoft Outlook.
- Menu Bar Integration: Lives in your menu bar, always accessible
- Floating Reminders: Unmissable overlay windows that appear even in fullscreen apps
- Multiple Calendar Sources: EventKit (macOS Calendar), Google Calendar, Outlook
- Smart Meeting Links: Automatically detects and extracts Zoom, Google Meet, Teams, Webex links
- Battery Efficient: Uses NSBackgroundActivityScheduler for minimal battery impact
- Customizable Timing: Configure when reminders appear before meetings
- Snooze & Dismiss: Full control over your reminders
- macOS 14.0 or later
- Xcode 15.0 or later
- Swift 5.9 or later
CalendarReminder/
├── App/ # App entry point and lifecycle
│ ├── CalendarReminderApp.swift
│ ├── AppDelegate.swift
│ └── Info.plist
├── Core/ # Business logic
│ ├── Models/ # Data models
│ ├── Services/ # Calendar, OAuth, Notifications
│ └── Storage/ # SwiftData, Keychain
├── UI/ # User interface
│ ├── MenuBar/ # Status bar controller
│ ├── Reminder/ # Reminder window
│ └── Settings/ # Settings views
└── Resources/ # Assets and sounds
# Install dependencies
swift package resolve
# Build
swift build
# Run
swift run-
Open the project in Xcode:
open CalendarReminder.xcodeproj
-
Build and run (⌘R)
Since this uses SPM, you can create an Xcode project:
swift package generate-xcodeprojOr use Xcode's native SPM support by opening Package.swift directly.
On first launch, the app will request calendar access. You can also manually grant access:
- Open System Settings
- Go to Privacy & Security → Calendars
- Enable access for Calendar Reminder
Access settings via the menu bar icon:
- General: Sound notifications, launch at login
- Calendars: Connect calendar sources (EventKit, Google, Outlook)
- Timing: Configure reminder timing (1-15 minutes before meetings)
- EventKit integration with macOS Calendar
- SwiftData models and storage
- Floating reminder windows (NSPanel)
- ReminderScheduler with battery-efficient monitoring
- Meeting link parser (Zoom, Meet, Teams, Webex)
- Dismiss, Snooze, Join Meeting actions
- Settings UI
- Menu bar integration
- Keychain for secure token storage
- Google Calendar OAuth and API integration
- Microsoft Outlook OAuth and API integration
- Calendar source management UI
- Comprehensive testing
- Performance optimization
- Uses
NSBackgroundActivitySchedulerwith 5-minute intervals - Local caching to minimize API calls
- Only refetches on calendar changes
- Uses
NSPanelwith.floatingwindow level - Configured for fullscreen compatibility (
.fullScreenAuxiliary) - Visible on all desktops (
.canJoinAllSpaces)
- Business logic separated from platform code
- Protocol-based architecture for calendar sources
- Future Windows support planned
- CalendarCoordinator.swift: Orchestrates all calendar sources
- ReminderScheduler.swift: Core scheduling logic
- ReminderWindow.swift: Floating window implementation
- EventKitManager.swift: macOS Calendar integration
- CalendarReminderApp.swift: App entry point
- Implement
OAuthProviderprotocol inCore/Services/OAuth/ - Create manager in
Core/Services/Calendar/(e.g.,NewCalendarManager.swift) - Add conversion to
CalendarEventmodel - Update
CalendarCoordinatorto include new source - Add UI in
CalendarSourcesView.swift
- Create test calendar events in macOS Calendar
- Verify reminders appear at configured time
- Test dismiss, snooze, join meeting actions
- Verify fullscreen compatibility
- Check battery usage in Activity Monitor
swift test- Windows support using WinUI
- Custom snooze durations
- Multiple reminder times per event
- Calendar filtering by calendar name
- All-day event handling
- Recurring event optimization
- Quick meeting notes
- Meeting statistics and analytics
This is a personal project, but suggestions and feedback are welcome!
Copyright © 2026. All rights reserved.
- Check System Settings → Privacy & Security → Calendars
- Restart the app after granting permissions
- Verify calendar events exist in the next 24 hours
- Check reminder timing settings
- Ensure app is running (menu bar icon visible)
- Check Activity Monitor for CPU usage
- Disable unused calendar sources
- Report if consistently >5% battery impact
For issues or questions, please check:
- System Settings → Privacy & Security → Calendars
- Console.app for error logs (search "CalendarReminder")
- Activity Monitor for performance issues