GCal Desk is built for the gap between a browser tab and a native calendar app: Google Calendar remains the source of truth, but the daily workflow gets a dedicated window, menu bar presence, account controls, native reminders, and quick event creation.
Project Reference
The app is developed in the local ../gcal repository and packaged as a macOS Electron app named GCal Desk.app.
The Problem
Google Calendar works well as the canonical calendar, but it is easy to lose as another browser tab. A browser tab does not behave like a workday utility: it does not naturally live in the menu bar, it shares profile clutter with unrelated browsing, and account switching often means opening extra tabs or losing your current calendar route.
Using Apple Calendar as an intermediary would add another sync layer. For this tool, that would be the wrong source of complexity. The goal is not to copy Google Calendar into a separate calendar system; the goal is to make Google Calendar behave like a focused Mac app.
What It Does
GCal Desk opens Google Calendar in a dedicated Electron window with its own profile at ~/Library/Application Support/GCal Desk. Closing the main window hides the app to the macOS menu bar instead of quitting, so Calendar stays available without staying in the foreground.
The app adds menu and menu bar controls for the main Calendar view, native Agenda, Quick Add, meeting links, and Google account slots. The selected account is saved and restored, and switching preserves the current Calendar route when possible.
Account Switching
The account switcher targets Google Calendar's own /calendar/u/N/ account routes. It keeps up to five account slots available and learns account labels when Google exposes them through the active session. Keyboard shortcuts cover direct account selection, previous and next account movement, and adding another Google account in the same pane.
That keeps multi-account calendar work in one window without turning every account into a separate browser tab.
Native Calendar Helpers
The app can use the Google Calendar API for native agenda, desktop reminders, and quick event creation. Those features require a Google OAuth Desktop client JSON, while the main Calendar window can still load Google Calendar without API credentials.
OAuth runs through the system browser with a local 127.0.0.1 callback. Tokens are stored under the app support directory, and the Google Calendar website sign-in remains separate from API authorization.
Menu Bar Behavior
The menu bar item gives Calendar a persistent app affordance. Click, double-click, or choose Show GCal Desk to restore the window. Choose Quit GCal Desk, or use the app quit shortcut, when you actually want to exit.
This is a small detail, but it changes how the app fits into the workday. Calendar can stay near the surface without competing with whatever browser session is currently active.
Install Shape
The local packaging flow builds the Electron app, creates the macOS bundle, and installs it into /Applications/GCal Desk.app with:
./scripts/install.sh
open "/Applications/GCal Desk.app"
API features need a Google OAuth Desktop client JSON. In development, the file can live at config/google-oauth-client.json; installed builds can prompt for that JSON and copy it into the app support directory.
Observations
The useful boundary in this app is that Google remains the source of truth. GCal Desk does not try to become a new calendar backend, a sync bridge, or a replacement for Calendar's web UI. It adds the native pieces that make the workflow faster on macOS while leaving ownership of events and accounts with Google Calendar.