A macOS application that automatically monitors your calendar for upcoming Zoom meetings and offers to join them automatically when they start.
- Calendar Integration: Monitors all your calendars for upcoming meetings
- Smart Detection: Intelligently extracts Zoom URLs from event locations, notes, and URL fields
- User Consent: Always asks permission before auto-joining meetings
- Precise Timing: Joins meetings exactly at start time
- Background Monitoring: Continuously polls calendar every minute for new meetings
-
Calendar Access & Permissions
- Uses
EventKitto access Calendar and Reminder data - Requests proper permissions on first run
- Requires user authorization for both Events and Reminders
- Uses
-
Event Polling System
- Polls calendar every 60 seconds for upcoming meetings
- Looks ahead 15 minutes to catch meetings that are about to start
- Maintains a processed events cache to avoid duplicate prompts
-
Zoom URL Detection
- Multi-stage URL extraction from:
- Event location field
- Event notes/description
- Event URL field (if available)
- Uses sophisticated regex patterns to identify Zoom meeting URLs
- Supports various Zoom URL formats (zoom.us, company.zoom.us, etc.)
- Multi-stage URL extraction from:
-
User Interface
- Native macOS alert dialogs for meeting join prompts
- Shows meeting title and asks for auto-join permission
- Handles user responses and schedules auto-join accordingly
-
Auto-Join Scheduler
- Calculates precise time until meeting start
- Uses
DispatchQueueto schedule URL opening at exact start time - Opens Zoom URLs using
NSWorkspace.shared.open()
Sources/JustJoinTheMeeting/
└── main.swift # Complete application logic
The application follows a functional approach with these key functions:
requestAccess(): Handles Calendar/Reminder permission requestsstartPolling(): Begins the calendar monitoring loopcheckForUpcomingMeetings(): Core polling logic that scans for eventsextractZoomURL(): Intelligent Zoom URL extractionpromptToJoin(): User consent dialog managementscheduleAutoJoin(): Precise meeting join scheduling
- macOS 13.0+: Required for the Swift runtime and EventKit APIs
- Calendar Access: User must grant permission to access Calendar data
- Zoom Client: Zoom application must be installed for URLs to open properly
-
Clone the repository:
git clone <repository-url> cd JustJoinTheMeeting
-
Build the application:
swift build
-
Run the application:
.build/debug/JustJoinTheMeeting
-
Grant Permissions:
- The app will prompt for Calendar and Reminder access on first run
- These permissions are required for the app to function
- Start the Application: Run the built executable
- Grant Permissions: Allow access to Calendar and Reminders when prompted
- Background Monitoring: The app runs in the background, checking every minute
- Meeting Detection: When a Zoom meeting is found within 15 minutes, you'll see a dialog
- Auto-Join Decision: Choose "Yes, Auto-Join" to automatically join at start time
- Automatic Opening: At meeting start time, Zoom will open with the meeting URL
The application provides extensive logging to help debug issues:
- Timestamp: All log messages include ISO8601 timestamps
- Event Details: Logs show found events, calendars, and time ranges
- URL Extraction: Details about Zoom URL detection process
- User Interactions: Records of dialog responses and auto-join decisions
- Timing Information: Shows seconds until meeting start and scheduling details
Example log output:
[2024-04-29T16:30:45Z] Starting polling
[2024-04-29T16:30:45Z] Checking for upcoming meetings
[2024-04-29T16:30:45Z] Found 3 calendars
[2024-04-29T16:30:45Z] Found 1 events in the time range
[2024-04-29T16:30:45Z] Checking event: Weekly Team Meeting
[2024-04-29T16:30:45Z] Found Zoom URL in notes: https://zoom.us/j/123456789
-
No meetings detected:
- Verify Calendar permissions are granted
- Check that Zoom URLs are present in event location, notes, or URL fields
- Ensure meetings are within the next 15 minutes
-
URL not detected:
- The app looks for URLs containing "zoom" in various fields
- Supported patterns:
https://zoom.us/j/...,https://company.zoom.us/j/... - Check that the URL format matches expected patterns
-
Permissions issues:
- Go to System Preferences > Security & Privacy > Privacy
- Ensure the app has access to Calendar and Reminders
- Re-run the app if permissions were recently granted
-
App not running in background:
- The app must stay running to monitor calendar
- Consider running from Terminal to see log output
- Use
nohupfor true background execution
For detailed debugging, run from Terminal to see all log output:
.build/debug/JustJoinTheMeetingswift build -c releaseThe project includes VSCode configuration in .vscode/launch.json for debugging with the Swift extension.
Recent fixes applied to resolve functionality issues:
- Fixed time range bug: Changed from 60-minute to 15-minute lookahead window
- Improved URL extraction: Enhanced regex patterns for better Zoom URL detection
- Fixed optional handling: Properly handle optional
eventIdentifiervalues - Added immediate join: Handle meetings that have already started
- Enhanced logging: More detailed debug information throughout the flow
Feel free to submit issues and enhancement requests. When contributing:
- Maintain the existing code style and logging patterns
- Test with various calendar and Zoom URL formats
- Ensure proper error handling and user feedback
- Update documentation for any architectural changes
[Add your preferred license here]