Problem
Members must manually copy booking details into their calendar apps. There is no "Add to Calendar" button after a booking is confirmed, and no way to connect a Google Calendar account to auto-sync future bookings. The calendar sync backend (GF-BE-15) handles OAuth and sync logic but has no frontend connection.
Proposed Solution
Add calendar sync UI in two places.
1. Booking confirmation and detail page (frontend/app/bookings/[id]/page.tsx)
- Add an "Add to Google Calendar" button that triggers the OAuth connect flow if not already connected, or directly creates the calendar event if connected
- Add an "Add to Outlook" button that generates and downloads an
.ics file (this can be done client-side without any backend endpoint using the ics npm package)
2. Profile settings (frontend/app/profile/page.tsx or frontend/app/settings/page.tsx)
- Add a Calendar Sync section showing connection status
- Connect Google Calendar button → calls
GET /calendar-sync/auth/google to get the OAuth URL, then redirects the user
- Disconnect button → calls
DELETE /calendar-sync/disconnect
- Status indicator: "Connected ✓" or "Not connected"
Acceptance Criteria
Depends on: [GF-BE-15] Build Google Calendar OAuth and booking sync service
Problem
Members must manually copy booking details into their calendar apps. There is no "Add to Calendar" button after a booking is confirmed, and no way to connect a Google Calendar account to auto-sync future bookings. The calendar sync backend (GF-BE-15) handles OAuth and sync logic but has no frontend connection.
Proposed Solution
Add calendar sync UI in two places.
1. Booking confirmation and detail page (
frontend/app/bookings/[id]/page.tsx).icsfile (this can be done client-side without any backend endpoint using theicsnpm package)2. Profile settings (
frontend/app/profile/page.tsxorfrontend/app/settings/page.tsx)GET /calendar-sync/auth/googleto get the OAuth URL, then redirects the userDELETE /calendar-sync/disconnectAcceptance Criteria
.icsfile (client-side, no backend required)icsnpm package used for Outlook.icsgeneration