Calendar Sync
Feature Detail
Description
This feature enables peer mentors and coordinators to connect their device calendar (iOS Calendar / Google Calendar) to Meander, allowing planned activities and events to appear as calendar entries and enabling import of calendar events as activity registrations. The integration works bidirectionally: activities registered in Meander can be pushed to the device calendar, and upcoming calendar events can be surfaced as prompts to log an activity. This reduces duplicate effort for users who already plan their peer mentor work in a personal calendar.
User Flow
Analysis
HLF specifically identified calendar synchronization as a follow-up mechanism for improving peer mentor engagement — coordinators need confidence that scheduled activities actually happen, and calendar integration creates a natural accountability loop. For peer mentors who are already disciplined calendar users, syncing removes the cognitive overhead of maintaining two separate records of the same appointment. This feature also supports the notification scenarios area: a calendar event approaching without a corresponding activity registration can trigger a gentle reminder, increasing overall reporting completeness without requiring coordinators to manually chase up individual peer mentors.
Implemented using the flutter_local_notifications and device_calendar Flutter packages. iOS requires NSCalendarsUsageDescription permission; Android requires READ_CALENDAR and WRITE_CALENDAR permissions, both requested at runtime with clear rationale dialogs. The CalendarSyncService mediates between the device calendar API and the Meander REST API. A CalendarIntegrationAdapter abstracts platform differences between iOS EventKit and Android CalendarProvider. Bidirectional sync is implemented as a background job (see Background Sync feature) that runs on a configurable interval. Conflict resolution favors the Meander record as the source of truth. OAuth-based Google Calendar integration is handled separately from device calendar and requires a Google Cloud project with Calendar API enabled. Sync state is persisted locally to avoid redundant API calls.
Components (118)
Shared Components
These components are reused across multiple features
User Interface (12)
Service Layer (34)
Data Layer (22)
Infrastructure (38)
User Stories
No user stories have been generated for this feature yet.