leits/MeetingBar
73.7
Strong · 30 September 2026
14.6k
lines of production code
Swift
primary language
2
measurements over time
What this system is
MeetingBar is a macOS menu bar application that aggregates calendar events from providers like Google Calendar and macOS Calendar to display upcoming meetings and facilitate quick joining. It features a modern SwiftUI interface with a visual timeline, precise notification scheduling, and customizable settings for event filtering and browser integration. The system supports extensive localization, secure credential management via keychain, and integrates with macOS Shortcuts for automation.
How it got here
2020–2021 — SwiftUI migration and internationalization
18 changes.
MeetingBar underwent a major architectural refactor to migrate from Storyboards to SwiftUI, accompanied by a modernized build system and centralized configuration. This period also established the project's foundational governance and introduced comprehensive localization support for multiple languages, alongside extensive test coverage for the new logic layer.
2022–2025 — architectural refactoring and localization expansion
20 changes.
MeetingBar underwent a significant architectural refactoring to centralize state management, decouple business logic, and introduce modern UI components like the day timeline and fullscreen notifications. This period also saw the addition of comprehensive unit tests and the expansion of internationalization support to include Turkish, Italian, Hungarian, Spanish, Slovak, Portuguese, Dutch, Korean, Tamil, and Simplified Chinese.
2026 — architecture unification and UI overhaul
12 changes.
This period focused on consolidating the application's internal architecture by replacing singleton-based settings with a centralized snapshot, refactoring calendar and notification providers for reliability, and introducing transactional provider switching. Concurrently, the user interface underwent a significant redesign, featuring a new structured onboarding wizard, a grouped sidebar preferences window, and enhanced diagnostics to improve usability and troubleshooting.
Features
Added Bulgarian language support
MeetingBar now supports the Bulgarian language. Users with their system language set to Bulgarian will see the application interface, including onboarding screens, preferences, status bar menus, and notifications, translated into Bulgarian.
MeetingBar/Resources /Localization /bg.lproj · high confidence
Added Croatian language support
MeetingBar now includes a Croatian (hr) localization, providing translated strings for the preferences interface, status bar menu, event details, and other UI elements for Croatian-speaking users.
MeetingBar/Resources /Localization /hr.lproj · high confidence
Added Hebrew language support
MeetingBar now includes a complete Hebrew translation for the user interface, preferences, and notifications, allowing Hebrew-speaking users to interact with the app in their native language.
MeetingBar/Resources /Localization /he.lproj · high confidence
Added Korean language support
MeetingBar now includes a complete Korean localization for the user interface, preferences, and status bar menus. Users can switch their preferred language to Korean in the General preferences to see all strings, including calendar selection, bookmark management, and meeting creation dialogs, translated into Korean.
MeetingBar/Resources /Localization /ko.lproj · high confidence
Added Portuguese (Brazil) language support
MeetingBar now includes a complete Portuguese (Brazil) localization, allowing users to see the interface, preferences, status bar, and notifications in their native language.
MeetingBar/Resources /Localization /pt-BR.lproj · high confidence
Added Portuguese (pt) localization
MeetingBar now includes a complete Portuguese translation for its user interface, covering onboarding flows, preferences, notifications, and error messages. Users with their system language set to Portuguese will see the app fully localized, including specific strings for calendar source selection, bookmark management, and advanced script settings.
MeetingBar/Resources /Localization /pt.lproj · high confidence
Added Simplified Chinese (zh-Hans) localization
MeetingBar now supports Simplified Chinese. Users can switch their preferred language in the General preferences to see the app interface, onboarding flow, and notifications translated into Chinese (Simplified Han script).
MeetingBar/Resources /Localization /zh-Hans.lproj · high confidence
Added Slovak language support
MeetingBar now includes a complete Slovak localization, allowing users to see the interface, preferences, and notifications in their native language.
MeetingBar/Resources /Localization /sk.lproj · high confidence
Added Spanish localization for MeetingBar
MeetingBar now includes a complete Spanish translation (es.lproj), covering the onboarding flow, preferences (General, Appearance, Services, Bookmarks, Calendars, Advanced), status bar menus, and notification messages, allowing Spanish-speaking users to interact with the app in their native language.
MeetingBar/Resources /Localization /es.lproj · high confidence
Added Tamil language support
MeetingBar now includes a complete Tamil localization, allowing users to see the interface, preferences, notifications, and status bar menus in Tamil. This new translation covers all core features including onboarding, calendar preferences, browser configuration, and bookmark management.
MeetingBar/Resources /Localization /ta.lproj · high confidence
Added Ukrainian language support
MeetingBar now includes a complete Ukrainian localization, allowing users to see the interface, preferences, and status bar messages in Ukrainian. This update adds the Ukrainian language option to the language selection dropdown and translates all core UI elements, including general actions, preferences tabs, appearance settings, service configurations, bookmarks, calendars, advanced script settings, and status bar event details.
MeetingBar/Resources /Localization /uk.lproj · high confidence
Dutch localization added for MeetingBar
A new Dutch (nl) localization file has been added, providing translations for the app's interface including preferences, status bar, bookmarks, and advanced settings. This enables Dutch-speaking users to see the full UI in their language, covering elements such as meeting notifications, browser configuration, and calendar selection.
MeetingBar/Resources /Localization /nl.lproj · high confidence
Hungarian localization added for MeetingBar
The Hungarian (hu) language pack is now available, providing translations for the onboarding flow, preferences (including the updated 'Links' tab and browser configuration), status bar options, and notification messages.
MeetingBar/Resources /Localization /hu.lproj · high confidence
Initial Norwegian Bokmål (nb-NO) localization added
MeetingBar now supports Norwegian Bokmål, providing a complete translation of the user interface, status bar menus, notification messages, and preferences for users in Norway. This includes specific strings for event statuses (such as tentative and declined), join actions, and configuration options for calendars and browsers.
MeetingBar/Resources /Localization /nb-NO.lproj · high confidence
Introduction of English localization strings for MeetingBar
MeetingBar now includes a dedicated English localization file (Localizable.strings) containing over 400 user-facing strings. This change introduces the text for the preferences interface, including new tabs for 'Meeting Links' and 'Display & Events', as well as settings for event visibility (such as hiding tentative or declined events), status bar appearance, and service-specific link opening modes (e.g., Zoom App, Google Meet PWA). It also adds strings for onboarding, notifications, and patronage options, enabling the app to display its UI in English rather than relying on hardcoded text.
MeetingBar/Resources /Localization /en.lproj · high confidence
Italian localization added for MeetingBar
MeetingBar now includes a complete Italian translation (it.lproj) for its user interface, covering preferences, status bar menus, bookmarks, and advanced settings. This allows Italian-speaking users to interact with the app in their native language.
MeetingBar/Resources /Localization /it.lproj · high confidence
New CI scripts for test result summaries and localization validation
Added two new shell scripts to the Scripts directory: test\_summary.sh, which parses Xcode result bundles to generate a Markdown table of test outcomes (passed, failed, skipped) for CI job summaries, and validate\_localizations.sh, which checks that all localization keys referenced in Swift source code are defined in the English Localizable.strings file to catch missing translations early in the build process.
Scripts · high confidence
New Changelog view for release notes
A new Changelog view has been added to the app, allowing users to review release history directly within the interface. The view displays a versioned list of changes starting from version 3.2.0 up to 5.0.0, covering new integrations (such as Google Calendar, Discord, and Jam), UI improvements (like full-screen notifications and visual timelines), and bug fixes. The content is dynamically filtered based on the user's current app version to show only relevant updates.
MeetingBar/UI/Views/Changelog · high confidence
New day timeline view and fullscreen notification UI
The menu now displays a visual timeline of the day, showing scheduled events as colored segments on a horizontal track with hour markers and a current-time indicator, replacing the previous list-based layout. Additionally, a new fullscreen notification view has been introduced to display meeting details (title, time, location) with options to dismiss or join the event, including support for opt-in notifications for events without meeting links.
MeetingBar/UI/Views · high confidence
New extension utilities for settings, localization, and browser launching
MeetingBar now includes a new set of extension files in the Extensions directory to support core application functionality. DefaultsKeys.swift centralizes all user preference keys, introducing new settings for per-provider browser configurations (providerBrowsers), opening modes, and script execution for event automation. String.swift adds helper methods for HTML tag stripping, URL decoding, and internationalization (loco), while also enabling clickable links in attributed strings. URL.swift provides a robust openIn method that allows opening meeting links in specific browser applications or via command-line processes, with fallback to the default browser. KeyboardShortcutsNames.swift defines the names for new global shortcuts, including those for creating meetings, joining events, and toggling title visibility.
MeetingBar/Extensions · high confidence
Project foundation and contributor documentation established
The repository now includes core governance and contributor documentation: an Apache 2.0 LICENSE, a SECURITY.md policy for reporting vulnerabilities, a CONTRIBUTING.md guide for local builds and workflows, a CONTACT.md replacing the previous Code of Conduct, and an .all-contributorsrc file to track and display contributor roles in the README. These files standardize how users and contributors interact with the project without changing application behavior.
(repo-wide) · high confidence
Turkish localization for MeetingBar
Added the Turkish language resource file (Localizable.strings) to provide a complete Turkish translation of the MeetingBar interface, covering preferences, status bar menus, calendar screens, and notification messages.
MeetingBar/Resources /Localization /tr.lproj · high confidence
Behavioural changes
Added English (Middle) localization strings for preferences
The application now includes a new English (Middle) localization file containing specific strings for the preferences interface. Users will see translated labels for 'Events without a meeting link' and 'calendar color' within the appearance settings, improving clarity for this language variant.
MeetingBar/Resources /Localization /enm.lproj · medium confidence
Added Xcode scheme for MeetingBar
The project now includes a shared Xcode scheme (MeetingBar.xcscheme) that defines build, test, launch, profile, analyze, and archive actions. This enables consistent configuration for running the app, executing tests with code coverage, and performing performance profiling directly within Xcode.
MeetingBar.xcodeproj/xcshareddata · high confidence
Calendar provider switching is now transactional with health tracking
The Calendar module now manages provider switching (e.g., between macOS Calendar and Google Calendar) as a single, atomic operation. When you switch providers, the app ensures the previous connection is properly signed out or cancelled before activating the new one, preventing duplicate background refreshes or stale data. Additionally, the app now tracks provider health, meaning if a switch fails or authentication expires, the interface can display the specific error (such as 'auth required') and preserve the last known good state instead of showing blank or inconsistent data.
MeetingBar/Calendar · high confidence
Centralized build configuration with strict concurrency and credential placeholders
The project now uses a centralized XCConfig structure to manage build settings. A new base configuration defines the default development team, includes placeholders for Google OAuth credentials (client number, secret, and keychain name), and enables strict Swift concurrency checking. Debug and Release configurations now simply include this base file, and a conditional include allows contributors to override the development team via a local DevTeamOverride file.
XCConfig · high confidence
Czech localization updated with new meeting actions and UI refinements
The Czech language resource file has been updated to reflect recent product changes, including new strings for dismissing and undismissing meetings, joining current versus next events, and handling tentative event statuses. It also incorporates refinements to the onboarding and preferences UI, such as renaming the 'Canceled' status to 'Declined', updating browser configuration labels, and adding specific notification messages for event start and end times.
MeetingBar/Resources /Localization /cs.lproj · high confidence
Enhanced diagnostics reports now include permission and health details
The diagnostics report generated for issue reporting now captures detailed application state and permission status. Users will see their calendar provider type (Calendar.app or Google Calendar), provider health indicators (such as stale data or authentication requirements), and specific permission states for Calendar access, Notifications, and Google authentication. This provides more context for troubleshooting sync and notification issues without requiring manual investigation.
MeetingBar/Utilities/Diagnostics · high confidence
Japanese localization for MeetingBar preferences and status bar
Added a new Japanese (ja.lproj) localization file containing 418 translated strings for the application's preferences panels (General, Appearance, Services, Bookmarks, Calendars, Advanced), status bar menu items, event submenu statuses, and onboarding screens, enabling Japanese-speaking users to interact with the full settings and notification interface.
MeetingBar/Resources /Localization /ja.lproj · high confidence
MeetingBar app architecture refactored with new state management and UI components
The MeetingBar app has undergone a significant architectural refactoring, introducing a new state management system with AppModel, AppState, and AppAction to centralize application logic. This change decouples the AppDelegate from direct business logic, moving responsibilities to dedicated components like LifecycleObserver for system events and WindowCoordinator for window management. The onboarding flow has been redesigned with a new OnboardingWindow and OnboardingHandler, while the preferences UI has been updated to use the new state management. Additionally, the app now supports AppIntents for macOS Shortcuts integration, allowing users to get event details and join meetings directly from Shortcuts. The patronage system has been migrated to StoreKit 2 for in-app purchases, and notification handling has been improved with a new NotificationScheduler and NotificationCenterDelegate. These changes aim to improve code maintainability, testability, and user experience.
MeetingBar/App · high confidence
Migrate to SwiftUI and modernize macOS integration
MeetingBar has been refactored to use SwiftUI, replacing the legacy AppDelegate and storyboard-based UI. This change introduces native Google Calendar integration via new URL schemes and keychain storage, updates the app to support modern macOS notification capabilities (including time-sensitive alerts), and adjusts file access permissions to allow read-write operations. Users will experience a more modern interface with improved calendar syncing and notification handling.
MeetingBar · high confidence
New utility modules and script handling improvements
MeetingBar introduces several new utility files to support core functionality: Constants.swift defines app-wide settings like browser configurations, event title formats, and language options; Helpers.swift provides utility functions for bookmark management, version comparison, and UI text rendering; I18N.swift handles localization with English fallback; Keychain.swift manages secure data storage; MeetingBarLogger.swift adds structured logging; and Scripts.swift improves AppleScript execution for meeting start events, including better error handling and parameter creation. These changes enhance the app's maintainability and user experience through better organization and robustness.
MeetingBar/Utilities · high confidence
Polish localization updates and additions
The Polish language resources have been updated with new strings for features such as tentative event settings, dismiss/undismiss actions, and browser configuration, while also fixing pre-existing duplicates and typos in the existing translations.
MeetingBar/Resources /Localization /pl.lproj · high confidence
Preferences window redesigned with grouped forms and sidebar navigation
The preferences interface has been rebuilt to use a native sidebar navigation (on macOS 13+) and a grouped form layout for all settings tabs, including General, Calendars, Meeting Opening, Menu Bar, Notifications, and Advanced. This change reorganizes settings into logical sections, such as grouping AppleScript hooks and regex filters in the Advanced tab, consolidating provider status into the Calendars tab, and standardizing the appearance of event and status bar options in the Menu Bar tab. The new layout improves clarity and consistency with macOS design patterns while maintaining support for macOS 12 via a legacy scrollable form.
MeetingBar/Preferences · high confidence
Redesigned first-run onboarding flow with explicit provider selection and authorization
The initial setup experience has been completely redesigned to guide users through a structured, multi-step wizard. Users now explicitly choose a calendar provider (e.g., iCloud, Google) on a dedicated source selection screen, followed by an automatic authorization step that handles success or failure states with clear feedback and retry options. The flow continues with calendar selection and essential preferences before completion. This new interface uses a consistent footer for navigation, a progress indicator, and a frameless window design for a modern look.
MeetingBar/Onboarding · high confidence
Redesigned status bar menu with meeting summary card and centralized state
The status bar menu now features a redesigned control surface that displays a visual summary card for the next or current meeting, including the event title, time range, provider icon, and a quick-join button. This new layout is driven by a centralized \StatusBarMenuState\ value type that snapshots application state and settings, replacing direct reads from \Defaults\ to improve consistency and testability. The menu also introduces clearer provider warnings (e.g., stale data, auth required) and respects user preferences for timeline visibility and event details within the menu structure.
MeetingBar/UI/StatusBar · high confidence
Refactored Google Calendar provider with improved token refresh and error handling
The Google Calendar provider implementation has been restructured to improve reliability during authentication and API interactions. The new code introduces explicit policies for handling HTTP status codes (such as 401 Unauthorized and 403 Forbidden) to automatically retry requests with forced token refreshes or clear stale credentials, reducing user-facing errors. It also centralizes error definitions and improves session management by properly canceling pending asynchronous operations during sign-out and handling token freshness checks more robustly.
MeetingBar/Calendar/Providers/Google · high confidence
Rewritten notification system with precise scheduling and action policies
The notification subsystem has been refactored to use a dedicated planning and execution pipeline. A new \NotificationPlanner\ generates precise system reminders for event start/end times, while a separate \NotificationActionRunner\ handles in-app behaviors like fullscreen overlays, auto-joining, and custom scripts. This separation introduces stricter policies: auto-join and script actions now strictly require a meeting link, and all-day events are excluded from timed system notifications (relying instead on the runtime to fire in-app actions during the event window). The system also now correctly handles all-day event ranges as exclusive at the end date and prevents duplicate notifications during calendar re-syncs by tracking processed events.
MeetingBar/Notifications · high confidence
Unified meeting provider metadata and opening preferences
MeetingBar now consolidates all meeting-provider information (such as Google Meet, Zoom, and Teams) into a single registry, simplifying how icons, detection regexes, and opening behaviors are managed. The app has migrated user preferences for per-provider browsers from individual settings keys to a unified map, ensuring existing choices are preserved. Additionally, the meeting opening logic now supports specific modes like Google Meet PWA and Zoom App, and includes a migration path to handle legacy configuration data seamlessly.
MeetingBar/Meetings · high confidence
Unify settings access via AppSettings snapshot
The application now uses a centralized \AppSettings\ value-type snapshot to manage all user-configurable preferences, replacing the previous singleton-based \SettingsStore\. This change consolidates settings for calendars, event display, status bar, menu, notifications, meetings, and advanced options into a single boundary that reads from \Defaults\, ensuring consistent access and simplifying how feature logic consumes configuration data.
MeetingBar/Settings · high confidence
Updated French localization strings for meeting actions and notifications
The French language pack has been updated to include new strings for dismissing and undismissing meetings, specific start/end notification timings (1, 3, and 5 minutes), and status bar labels for current and next meeting actions. It also adds translations for attendee statuses (tentative, declined) and refines existing notification text to be more specific.
MeetingBar/Resources /Localization /fr.lproj · high confidence
Updated German localization strings
The German language file (de.lproj) has been updated with new and revised strings to support recent feature additions, including specific event start/end notifications, dismiss/undismiss actions, tentative event settings, and various status bar menu items.
MeetingBar/Resources /Localization /de.lproj · high confidence
Upgrade to Xcode 16 project format and modernize build configuration
The project file has been upgraded to object version 71 (Xcode 16), enabling modern build features such as parallel independent target builds and file-system synchronized groups. This change introduces a dedicated test target (MeetingBarTests) and explicitly links system frameworks like ServiceManagement alongside Swift Package Manager dependencies (KeyboardShortcuts, Defaults, LaunchAtLogin, AppAuth, AppAuthCore). Additionally, the workspace reference is simplified to use a relative location, and legacy storyboard-based UI references are replaced by the new synchronized group structure.
MeetingBar.xcodeproj · high confidence
Fixes
Fix duplicate notifications for recurring EventKit events
Recurring calendar events from EventKit now generate unique internal IDs by appending the start timestamp to the calendar item identifier, preventing the deduplication logic from incorrectly collapsing distinct occurrences. This change stops duplicate notifications for recurring meetings while preserving the original identifier for user scripts.
MeetingBar/Calendar/Providers/EventKit · high confidence
Test coverage
Added comprehensive test coverage for settings adapters, calendar sync, and end-to-end flows; Added comprehensive unit tests for the status bar menu builder; Expanded test coverage for MeetingBar logic policies and link detection; New test helpers for AppModel and event store mocking.
Dependencies
Introduced Swift Package Manager structure for MeetingBarLogic
Added a new Package.swift manifest and Package.resolved lockfile to define the MeetingBarLogic library. This configuration sets the minimum platform to macOS 12, enables strict concurrency checking, and explicitly lists the source files included in the logic target (such as Diagnostics, Notifications, Calendar, Meetings, and UI/StatusBar components) while excluding app-layer resources. The lockfile pins specific versions for dependencies including AppAuth-iOS (2.0.0), Defaults (9.0.3), KeyboardShortcuts (2.3.0), LaunchAtLogin (5.0.2), and swift-syntax (601.0.1).
(dependencies) · high confidence
Housekeeping
Updated Xcode scheme ordering and visibility
The Xcode scheme configuration has been updated to include new schemes for 'AutoLauncher' and 'MeetingBar iOS', adjusting their build order hints. Additionally, several playground and PromiseKit-related schemes have been added with their visibility explicitly set to hidden.
MeetingBar.xcodeproj/xcuserdata · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 74 → 74 (-0.6)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 96 → 95 (-1.0)
- Architecture 95 → 98 (+2.9)
- Maturity 61 → 61 (+0.0)
- Readiness 90 → 85 (-5.0)
- Security 77 → 77 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
Resolved (4)
- Change coupling: AppDelegate.swift ↔ Notifications.swift (MeetingBar/App/AppDelegate.swift)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
New (22)
- ChangelogView.body (cognitive 21) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- ChangelogView.body (cyclomatic 22) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Coverage not measured — Swift suite
- Duplicate intent with divergent return types and naming. Both methods handle provider switching and sign-out logic, but one is on the Repository and one on the Sync manager. The return types ([MBCalendar] vs ProviderSelectionResult) suggest different responsibilities (data retrieval vs status/result), but the core action is identical.
- Duplicate method name with ambiguous scope. Both CalendarRepository and CalendarSync expose refreshSources(). It is unclear if CalendarSync.refreshSources() delegates to the repository or performs a higher-level sync operation. This creates confusion about where the refresh logic resides.
- Duplicated block (10 lines × 7) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (10 lines × 7) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (10 lines × 7) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (11 lines × 2) (MeetingBar/Preferences/AdvancedTab.swift)
- Duplicated block (11 lines × 4) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (11 lines × 4) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (15 lines × 3) (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Duplicated block (5 lines × 2) (MeetingBar/Preferences/BrowserConfigView.swift)
- Duplicated block (6 lines × 3) (MeetingBar/Onboarding/Onboarding.swift)
- Low cohesion: String (LCOM4 9) (MeetingBar/Extensions/String.swift)
- MethodTooLong: ChangelogView.body (MeetingBar/UI/Views/Changelog/Changelog.swift)
- Off-boarding risk: anonymized user #1
- Outdated: appauth-ios
- Outdated: defaults
- Outdated: keyboardshortcuts
- …and 2 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
leits/MeetingBar was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b51762b463deea2494157ce4fdc28cccc6f5bf98 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.