---
phase: 03-calendar-integration
plan: 06
type: execute
wave: 1
depends_on: []
files_modified:
- src/components/CalendarSettings.tsx
- src/app/api/calendar/google/oauth/route.ts
- src/app/api/calendar/apple/oauth/route.ts
autonomous: true
gap_closure: true
must_haves:
truths:
- "User can connect their Google Calendar account"
- "User can connect their Apple Calendar account"
- "User can view calendar events alongside tasks in weekly view"
- "User can manage calendar connection settings from the application"
- "User's tasks and calendar events are synchronized bidirectionally"
artifacts:
- path: "src/components/CalendarSettings.tsx"
provides: "Functional calendar connection UI with real OAuth triggers"
- path: "src/app/api/calendar/google/oauth/route.ts"
provides: "OAuth callback that properly saves connections"
- path: "src/app/api/calendar/apple/oauth/route.ts"
provides: "OAuth callback that properly saves connections"
key_links:
- from: "src/components/CalendarSettings.tsx"
to: "src/app/api/calendar/google/oauth/route.ts"
via: "connecting Google Calendar via OAuth flow"
pattern: "connect.*google"
- from: "src/components/CalendarSettings.tsx"
to: "src/app/api/calendar/apple/oauth/route.ts"
via: "connecting Apple Calendar via OAuth flow"
pattern: "connect.*apple"
- from: "src/components/CalendarSettings.tsx"
to: "src/app/api/calendar/sync/route.ts"
via: "triggering sync operations"
pattern: "sync.*api"
---
# Gap Closure: Calendar Connection UI and Management
## Objective
Enable functional calendar connection management UI that triggers real OAuth flows and manages connections properly.
## Purpose
Allow users to successfully connect, disconnect, and manage their calendar connections through the UI.
## Output
Fully functional CalendarSettings UI component with real OAuth triggers and connection management.
## Tasks
Implement Real Google Calendar OAuth Trigger
src/components/CalendarSettings.tsx
Enable the Google connection button to trigger actual OAuth flow:
1. Replace placeholder button functionality with actual redirect to Google OAuth authorization URL
2. Implement proper URL construction with client ID, redirect URI, scopes, and state parameters
3. Ensure proper error handling if OAuth initiation fails
4. Add loading states for OAuth redirection
5. Add proper accessibility attributes for screen readers
The implementation should:
- Construct proper Google OAuth authorization URL
- Redirect user to Google OAuth flow when clicked
- Include necessary OAuth parameters (client_id, redirect_uri, scope, state)
- Preserve user session during OAuth flow
Clicking "Connect Google Calendar" button redirects to actual Google OAuth page
Google Calendar connection button triggers real OAuth flow to Google
Implement Real Apple Calendar OAuth Trigger
src/components/CalendarSettings.tsx
Enable the Apple connection button to trigger actual OAuth flow:
1. Replace placeholder button functionality with actual redirect to Apple OAuth authorization URL
2. Implement proper URL construction with client ID, redirect URI, scopes, and state parameters
3. Ensure proper error handling if OAuth initiation fails
4. Add loading states for OAuth redirection
5. Add proper accessibility attributes for screen readers
The implementation should:
- Construct proper Apple OAuth authorization URL
- Redirect user to Apple OAuth flow when clicked
- Include necessary OAuth parameters (client_id, redirect_uri, scope, state)
- Preserve user session during OAuth flow
Clicking "Connect Apple Calendar" button redirects to actual Apple OAuth page
Apple Calendar connection button triggers real OAuth flow to Apple
Implement Calendar Disconnection Functionality
src/components/CalendarSettings.tsx
Enable proper disconnection of calendar accounts:
1. Implement actual database removal of CalendarConnection records when disconnected
2. Add confirmation dialogs for disconnection actions
3. Ensure tokens are properly removed from database (both access and refresh tokens)
4. Handle errors that might occur during disconnection
5. Add loading states during disconnection process
6. Update UI to reflect successful disconnection immediately
The implementation should:
- Make API call to remove calendar connection from database
- Display confirmation before removing connection
- Handle API errors gracefully
- Update component state to reflect disconnection
Clicking "Disconnect" button removes calendar connection from database and UI
Calendar connection disconnection works with proper database removal
Implement Manual Sync Triggering
src/components/CalendarSettings.tsx
Enable proper manual sync triggering from the UI:
1. Implement actual API call to trigger sync when "Sync Now" button is clicked
2. Ensure sync operation uses correct time range parameters
3. Add loading states during sync operation
4. Handle responses from sync endpoint properly
5. Update last sync time display after successful sync
6. Show error messages if sync fails
The implementation should:
- Make API call to /api/calendar/sync endpoint with proper parameters
- Handle sync results and update UI accordingly
- Show loading indicator during sync operation
- Update last sync timestamp display
Clicking "Sync Now" button triggers actual sync operation and updates last sync time
Manual sync button triggers real sync operation with proper API calls
## Verification
After completing these tasks, the following checks should pass:
- Clicking "Connect Google Calendar" button redirects to actual Google OAuth page
- Clicking "Connect Apple Calendar" button redirects to actual Apple OAuth page
- Clicking "Disconnect" button removes calendar connection from database
- Clicking "Sync Now" button triggers actual sync operation
- UI properly reflects connection and sync status updates
## Success Criteria
All gaps identified in the VERIFICATION.md for calendar connection management UI are resolved:
- Calendar connection buttons trigger real OAuth flows to respective providers
- Calendar disconnection completely removes connections from database
- Manual sync from UI triggers real sync operations
- UI properly reflects connection and sync states