Bring your calendars
together.
Connect Tandem to Apple and Google. This one-time setup is for the person running this deployment.
Before you begin
Tandem needs an Apple Developer account with Sign in with Apple configured, and a Google Cloud project with a Calendar OAuth client. Calendar connections become available once their credentials are installed.
Apple web sign-in requires an Apple Developer Program membership and a primary App ID with Sign in with Apple enabled. Your personal Apple account alone does not provide these credentials.
No credentials are entered on this public page. Set them as Cloudflare Worker secrets from the project directory. They are never displayed in the browser.
1 Set up Sign in with Apple
- In your Apple Developer account, enable Sign in with Apple on a primary App ID.
- Create a Services ID, enable Sign in with Apple, and associate it with that primary App ID. The Services ID identifier becomes
APPLE_CLIENT_ID. - Under website configuration, register your deployment’s domain and this return URL:
https://tandem.raygen.dev/api/auth/callback/appleDomain: tandem.raygen.dev
- Create a Sign in with Apple key. Download the
.p8private key, and note your Key ID and Team ID. - Install the following secrets. Paste each value into Wrangler’s prompt; paste the complete PEM contents for the private key.
npx wrangler secret put APPLE_CLIENT_ID
npx wrangler secret put APPLE_TEAM_ID
npx wrangler secret put APPLE_KEY_ID
npx wrangler secret put APPLE_PRIVATE_KEYApple credentials identify this app. After signing in, each user separately connects iCloud Calendar with an app-specific password.
Apple’s web sign-in setup guide2 Connect Google Calendar
- Create or choose a Google Cloud project and enable the Google Calendar API.
- Configure Google Auth Platform branding and audience. For a personal app in testing mode, add your own Google account as a test user.
- Create an OAuth client with application type Web application. Add this exact authorized redirect URI:
https://tandem.raygen.dev/api/google/callback- Install your OAuth client ID and client secret:
npx wrangler secret put GOOGLE_CLIENT_ID
npx wrangler secret put GOOGLE_CLIENT_SECRETGoogle test-mode refresh tokens for Calendar access usually expire after seven days. Reconnect Google when prompted, or move the OAuth app to production and complete any required verification for your audience.
Google Calendar authorization setup 3 Choose your calendars
- Refresh this page to check that both providers are ready, then return to Tandem and sign in with Apple.
- At account.apple.com, open Sign-In and Security → App-Specific Passwords. Generate a password for Tandem. Your Apple account must have two-factor authentication enabled.
- Connect Apple Calendar with your Apple account email and the app-specific password. Connect Google Calendar and approve calendar access.
- Choose one writable calendar from each account, then start syncing. Check the first sync in both calendar apps.
If you change your deployment URL, update both provider callback URLs and BETTER_AUTH_URL in your Worker configuration.
What stays in sync
- Timing
- Google sends change notifications. A scheduled check runs every minute for iCloud and as a fallback for Google. Provider delays, rate limits, and large calendars can add time; this is near real-time sync.
- First connection
- The first sync merges existing events. Matching iCalendar UIDs identify the same event. Other events are treated as separate originals, even if their titles and times match.
- Event details
- Titles, notes, locations, start and end times, and all-day dates are synced. Provider-specific features, invitations, and attendees are not synced.
- Repeating events
- Supported recurring series sync as a series. Series with detached exceptions, such as moving one occurrence, are skipped with a visible error instead of being flattened or silently changed.
- Edits and deletions
- Once events are paired, edits and deletions propagate in both directions. When both sides change, the latest modification wins; Apple wins a timestamp tie. An edit wins over a simultaneous deletion.
- Pause and disconnect
- Pause a pair to stop syncing. Remove all calendar pairs before disconnecting an account. Removing a pair or account keeps events already copied to either calendar.
- Calendar choices
- Only writable calendars can be paired. A calendar can belong to one pair, and an account can have up to ten pairs. Calendars on your devices that aren’t stored in iCloud can’t be accessed.