Skip to content

feat: add custom calendar reminder for Google Calendar events#26078

Merged
eunjae-lee merged 27 commits intocalcom:mainfrom
Deepak22448:feat/google-calendar-custom-reminder
Jan 14, 2026
Merged

feat: add custom calendar reminder for Google Calendar events#26078
eunjae-lee merged 27 commits intocalcom:mainfrom
Deepak22448:feat/google-calendar-custom-reminder

Conversation

@Deepak22448
Copy link
Contributor

@Deepak22448 Deepak22448 commented Dec 20, 2025

What does this PR do?

Allows users to set default reminder notifications (10, 30, or 60 minutes) for events created via Cal.com bookings in Google Calendar. This addresses the issue where Google Calendar's default reminders don't apply to API-created events.

Changes:

  • Add customCalendarReminder field to DestinationCalendar model
  • Create reminder selector UI in destination calendar settings (Settings → Calendars)
  • Update GoogleCalendarService to apply custom reminders (popup + email)
  • Add TRPC endpoint for updating reminder settings

Visual Demo (For contributors especially)

Video Demo:

https://www.loom.com/share/212f7fb3beac49bdace349452730eec2

Mandatory Tasks (DO NOT REMOVE)

  • I have self-reviewed the code (A decent size PR without self-review might be rejected).
  • I have updated the developer docs in /docs if this PR makes changes that would require a documentation change. N/A - no docs changes needed.
  • I confirm automated tests are in place that prove my fix is effective or that my feature works.

How should this be tested?

  1. Connect a Google Calendar account
  2. Go to Settings → Calendars
  3. Set Google Calendar as your destination calendar
  4. A "Default reminder" dropdown should appear with options: 10, 30, or 60 minutes
  5. Select a reminder time and save
  6. Create a new booking
  7. Check the Google Calendar event - it should have both popup and email reminders set to the selected time

Expected behavior:

  • When a booking is created, the Google Calendar event includes custom reminders
  • Both popup and email notifications are set to the same duration

Checklist

  • I have read the contributing guide
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have checked if my changes generate no new warnings

@Deepak22448 Deepak22448 requested a review from a team as a code owner December 20, 2025 08:56
@vercel
Copy link

vercel bot commented Dec 20, 2025

@Deepak22448 is attempting to deploy a commit to the cal Team on Vercel.

A member of the Team first needs to authorize it.

@CLAassistant
Copy link

CLAassistant commented Dec 20, 2025

CLA assistant check
All committers have signed the CLA.

@github-actions github-actions bot added $20 calendar-apps area: calendar, google calendar, outlook, lark, microsoft 365, apple calendar community Created by Linear-GitHub Sync Low priority Created by Linear-GitHub Sync ✨ feature New feature or request 💎 Bounty A bounty on Algora.io ❗️ migrations contains migration files and removed ✨ feature New feature or request Low priority Created by Linear-GitHub Sync 💎 Bounty A bounty on Algora.io calendar-apps area: calendar, google calendar, outlook, lark, microsoft 365, apple calendar community Created by Linear-GitHub Sync $20 labels Dec 20, 2025
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 11 files

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="packages/trpc/server/routers/viewer/calendars/setDestinationReminder.schema.ts">

<violation number="1" location="packages/trpc/server/routers/viewer/calendars/setDestinationReminder.schema.ts:6">
P2: Schema validation is overly permissive - allows any value 0-60 but the feature only supports 10, 30, or 60 minutes. Consider using `z.enum()` or `z.union()` with literal values to restrict to valid options, which also provides better type safety and self-documents the allowed values.</violation>
</file>

<file name="packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsWebWrapper.tsx">

<violation number="1" location="packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsWebWrapper.tsx:18">
P2: Use `t()` for localization instead of hardcoded strings. Import `useLocale` and use translation keys:
```typescript
const { t } = useLocale();
...
showToast(t(&quot;reminder_updated&quot;), &quot;success&quot;);
```</violation>
</file>

<file name="packages/app-store/googlecalendar/lib/__tests__/CalendarService.test.ts">

<violation number="1" location="packages/app-store/googlecalendar/lib/__tests__/CalendarService.test.ts:461">
P1: Test data contradicts test purpose. The test claims to verify behavior &#39;when no custom reminder is configured&#39; but sets `customCalendarReminder: 10`. To test the default reminders scenario, this should be `null` or omitted.</violation>
</file>

Since this is your first cubic review, here's how it works:

  • cubic automatically reviews your code and comments on bugs and improvements
  • Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
  • Ask questions if you need clarification on any suggestion

Reply to cubic to teach it or ask questions. Re-run a review with @cubic-dev-ai review this PR

@github-actions github-actions bot added $20 calendar-apps area: calendar, google calendar, outlook, lark, microsoft 365, apple calendar community Created by Linear-GitHub Sync Low priority Created by Linear-GitHub Sync ✨ feature New feature or request 💎 Bounty A bounty on Algora.io labels Dec 20, 2025
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="packages/app-store/googlecalendar/lib/__tests__/CalendarService.test.ts">

<violation number="1" location="packages/app-store/googlecalendar/lib/__tests__/CalendarService.test.ts:720">
P1: Test data contradicts test purpose. This test is meant to verify default reminders are used when **no** custom reminder is configured (`customCalendarReminder: null`). Changing it to `10` means a custom reminder IS configured, which invalidates the test&#39;s stated purpose. Either revert to `null` to test the default-reminder scenario, or update the test name and assertion to test the custom-reminder scenario.</violation>
</file>

Reply to cubic to teach it or ask questions. Re-run a review with @cubic-dev-ai review this PR

@Deepak22448
Copy link
Contributor Author

@dhairyashiil can you please review my PR ?

@volnei volnei requested a review from a team as a code owner December 27, 2025 02:35
@eunjae-lee eunjae-lee added run-ci Approve CI to run for external contributors and removed run-ci Approve CI to run for external contributors labels Jan 8, 2026
eunjae-lee
eunjae-lee previously approved these changes Jan 8, 2026
Copy link
Contributor

@eunjae-lee eunjae-lee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution ! It works well.

@eunjae-lee
Copy link
Contributor

need more approval from other team. i'll ping them.

@Deepak22448
Copy link
Contributor Author

Thanks @eunjae-lee.

Changed from static to instance methods with getInstance() pattern as requested in review.
…pak22448/cal.com into feat/google-calendar-custom-reminder
@Deepak22448
Copy link
Contributor Author

Hi @eunjae-lee and @keithwillcode ,

I’ve addressed all the review comments and updated the changes accordingly. Could you please take another look and review when you get a chance?

Thanks!

@eunjae-lee
Copy link
Contributor

I’ve addressed all the review comments and updated the changes accordingly. Could you please take another look and review when you get a chance?

Hi @Deepak22448 sorry for not providing enough feedback.

#26751

here's a PR that contains more guide on how to properly create repositories / services using dependency injection. Could you follow that guide?

- Remove getInstance() singleton pattern
- Add DI tokens, module, and container
- Update GoogleCalendarService and tRPC handler to use DI
@calcom calcom deleted a comment from github-actions bot Jan 12, 2026
@calcom calcom deleted a comment from github-actions bot Jan 12, 2026
@calcom calcom deleted a comment from github-actions bot Jan 12, 2026
@Deepak22448
Copy link
Contributor Author

Hi @Deepak22448 sorry for not providing enough feedback.

#26751

here's a PR that contains more guide on how to properly create repositories / services using dependency injection. Could you follow that guide?

@eunjae-lee Thanks for the guidance! I've now refactored the code to follow the dependency injection pattern

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 19 files

@eunjae-lee eunjae-lee added run-ci Approve CI to run for external contributors and removed run-ci Approve CI to run for external contributors labels Jan 12, 2026
Copy link
Contributor

@eunjae-lee eunjae-lee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fantastic. thanks for your contribution !

@eunjae-lee eunjae-lee merged commit 2881961 into calcom:main Jan 14, 2026
69 of 76 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🙋 Bounty claim 💎 Bounty A bounty on Algora.io calendar-apps area: calendar, google calendar, outlook, lark, microsoft 365, apple calendar community Created by Linear-GitHub Sync devin-conflict-resolution ✨ feature New feature or request Low priority Created by Linear-GitHub Sync ❗️ migrations contains migration files ready-for-e2e run-ci Approve CI to run for external contributors size/L $20

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[CAL-4716] Missing Notifications for Events

6 participants