Connecting Google Calendar to your unified stream

If you've connected Gmail to Turtini, your primary Google Calendar is already feeding into your unified calendar — no second OAuth required. You can also connect additional Google accounts as calendar-only feeds (work + personal on one Turtini account).

How it works:

• The Gmail OAuth grant requests calendar.readonly scope alongside the Gmail scopes. Connecting Gmail flips `gmail_tokens/{uid}.calendarConnected` to true and you start seeing your Google events in /me/calendar immediately.
• The unified calendar pulls events in a [now-30d, now+90d] window by default. Recurring events are expanded into discrete instances so each occurrence shows individually.
• Events show with the source email ("from [email protected]") so you can tell which connected Google account contributed each event — especially useful once you've added more than one.

To check the connection:

• Open /me/calendar — the "Calendar feeds" banner at the top shows every Google account currently feeding events in. The primary account (the one tied to your Gmail integration) is marked "Primary — manages Gmail too"; any extras are tagged "Additional · calendar only."
• If a feed shows "Reconnect," its refresh token has been revoked (this happens automatically if you removed Turtini from that Google account at myaccount.google.com → Security → Third-party access).

To reconnect: click the Reconnect button next to the affected feed — runs you through OAuth again. Once reauthorized, that account's events reappear within seconds.

What's read vs. what isn't:

• Read: primary calendar of each connected account, in the [-30d, +90d] window, with title, start, end, location, status, and a deep-link URL.
• NOT read: secondary calendars, attendees, attachments, conferencing details. The reader is intentionally lean.
• External event links open in a new tab so clicking through to a Google Meet or Zoom doesn't lose your place in /me/calendar.

Multi-account: see "Adding a second Google calendar feed" for the full add/remove flow. Calendar feeds for additional accounts are stored at `users/{uid}/calendarFeeds/{feedId}` with per-feed refresh tokens; the Gmail token stays bound to the primary account only.