Loading...
Help Center / Getting Started / Calendar App Overview

Calendar App Overview

Calendar App Overview

Keep your work life and personal calendar perfectly in sync β€” shifts, time off, interviews, and every important deadline in one unified view.


What Is the Calendar App?

The Calendar app bridges MangoApps Workforce with the external calendars your employees already use every day. It automatically pushes work shifts, approved leave, company holidays, training deadlines, interviews, 1:1 meetings, and more directly into Google Calendar, Microsoft Outlook, or any iCal-compatible client. Instead of manually copying schedules between systems, employees connect once and stay in sync.

Core Value Proposition:

  • πŸ”„ Automatic Sync β€” Work events flow to your personal calendar without lifting a finger
  • 🌐 Multi-Provider Support β€” Google Calendar, Microsoft Outlook, and iCal/CalDAV all supported
  • πŸ“‹ Unified Work View β€” Shifts, leave, holidays, interviews, training, tasks, and meetings in one calendar
  • πŸ” Privacy First β€” Events default to private visibility with encrypted credential storage

At a Glance

πŸ”— Providers πŸ“… Event Types ⚑ Sync Modes πŸ“± Platforms
3 (Google, Outlook, iCal) 10+ (Shifts, Leave, Holidays, Training, Interviews, Tasks, Meetings, and more) 3 (Scheduled, Real-Time, Webhook) Web, Mobile

Perfect For:

  • 🏭 Shift Workers β€” See upcoming shifts alongside personal commitments to avoid conflicts
  • 🏒 Office & Hybrid Teams β€” Keep 1:1 meetings, reviews, and training on your Outlook or Google calendar
  • πŸ§‘β€πŸ’Ό Recruiters & Hiring Managers β€” Interview schedules sync directly to external calendars with candidate details
  • πŸ“Š Managers & HR β€” Company holidays, business deadlines, and performance cycles visible at a glance

How It Works

Calendar Sync Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    CALENDAR SYNC ARCHITECTURE                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  MANGOAPPS   β”‚    Push Events           β”‚  EXTERNAL CALENDAR     β”‚  β”‚
β”‚  β”‚  WORKFORCE   β”‚ ─────────────────────▢   β”‚                        β”‚  β”‚
β”‚  β”‚              β”‚                          β”‚  β€’ Google Calendar      β”‚  β”‚
β”‚  β”‚  β€’ Shifts    β”‚                          β”‚  β€’ Outlook / O365      β”‚  β”‚
β”‚  β”‚  β€’ Leave     β”‚    Webhook Triggers      β”‚  β€’ iCal / CalDAV       β”‚  β”‚
β”‚  β”‚  β€’ Holidays  β”‚ ◀─────────────────────   β”‚    (Apple, etc.)       β”‚  β”‚
β”‚  β”‚  β€’ Training  β”‚                          β”‚                        β”‚  β”‚
β”‚  β”‚  β€’ Meetings  β”‚                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                      β”‚
β”‚                                                                        β”‚
β”‚  ─────────────────────── SYNC ENGINE ───────────────────────────────   β”‚
β”‚                                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚  SCHEDULED   β”‚   β”‚  REAL-TIME   β”‚   β”‚  WEBHOOK LISTENERS      β”‚    β”‚
β”‚  β”‚  Every 10min β”‚   β”‚  On change   β”‚   β”‚  Google Push / Outlook  β”‚    β”‚
β”‚  β”‚  (cron job)  β”‚   β”‚  (job queue) β”‚   β”‚  Subscriptions          β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Connection Flow (Employee)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ OPEN    │──▢│ CHOOSE      │──▢│ OAUTH LOGIN  │──▢│ GRANT        │──▢│ SYNCING β”‚
β”‚ Calendarβ”‚   β”‚ Provider    β”‚   β”‚ Google /     β”‚   β”‚ Calendar     β”‚   β”‚ Active  β”‚
β”‚ App     β”‚   β”‚ (3 options) β”‚   β”‚ Outlook      β”‚   β”‚ Permissions  β”‚   β”‚         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚                                                        β”‚
                    β”‚  iCal Path                                             β”‚
                    └──▢ Copy Feed URL ──▢ Paste in Calendar App β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Event Aggregation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  EVENT SOURCES β†’ UNIFIED CALENDAR                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                    β”‚
β”‚  Work & Scheduling ──┐                                            β”‚
β”‚   β€’ Shifts           β”‚                                            β”‚
β”‚   β€’ Availability     β”œβ”€β”€β”                                         β”‚
β”‚                      β”‚  β”‚                                         β”‚
β”‚  Time Off ────────────  β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚   β€’ Leave Requests   β”‚  β”œβ”€β”€β–Άβ”‚  CalendarEvents   │──▢ JSON API     β”‚
β”‚   β€’ Holidays         β”‚  β”‚   β”‚  Service          │──▢ iCal Feed    β”‚
β”‚                      β”‚  β”‚   β”‚  (Aggregator)     │──▢ Push Sync    β”‚
β”‚  Recruiting ──────────  β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚   β€’ Interviews       β”‚  β”‚                                         β”‚
β”‚                      β”œβ”€β”€β”˜                                         β”‚
β”‚  Development ─────────                                            β”‚
β”‚   β€’ Training         β”‚                                            β”‚
β”‚   β€’ Tasks            β”‚                                            β”‚
β”‚                      β”‚                                            β”‚
β”‚  Management ──────────                                            β”‚
β”‚   β€’ 1:1 Meetings     β”‚                                            β”‚
β”‚   β€’ Review Cycles    β”‚                                            β”‚
β”‚   β€’ Business Events  β”‚                                            β”‚
β”‚                      β”‚                                            β”‚
β”‚  Wellness β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚   β€’ Benefits Events                                               β”‚
β”‚   β€’ Onboarding                                                    β”‚
β”‚                                                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Features

πŸ”— Multi-Provider Calendar Integration

Connect to the calendar service your team already relies on.

Provider Auth Method Real-Time Sync Push Notifications iCal Feed
Google Calendar OAuth 2.0 (via SSO config) βœ… βœ… (Webhooks) β€”
Microsoft Outlook OAuth 2.0 (Entra ID / Graph API) βœ… βœ… (Subscriptions) β€”
iCal / CalDAV Signed URL token β€” β€” βœ…
  • Google and Outlook use the same SSO configuration the employee logged in with for a seamless experience
  • iCal generates a signed, read-only feed URL that works with Apple Calendar, Thunderbird, or any calendar client
  • Credentials are encrypted at rest using Rails encrypted attributes
  • Each user can connect one integration per provider per business

πŸ“… Supported Event Types

The Calendar app aggregates events from across the platform into a single calendar view.

Event Type Color Source Always Available
Work Shifts 🟒 Green Scheduling module βœ…
Time Off / Leave πŸ”΅ Blue Leave Management βœ…
Company Holidays 🟑 Yellow Business holidays βœ…
Training & Development 🟣 Purple Training app Feature-dependent
Interviews πŸ”΄ Red Recruiting / Job Board Feature-dependent
Tasks & Deadlines πŸ”΅ Teal Tasks app / EPMS Feature-dependent
Business Events ⚫ Dark Performance cycles Feature-dependent
1:1 Meetings 🟣 Deep Purple EPMS Meetings Feature-dependent
Wellness & Benefits πŸ’š Green Benefits Management Feature-dependent
Onboarding Checkpoints πŸ‘€ Blue Onboarding Hub Feature-dependent

Feature-dependent event types appear automatically when their corresponding marketplace app is enabled.

⚑ Sync Engine

Three layers of synchronization keep calendars current.

Sync Mode Trigger Latency Use Case
Scheduled Sync Cron job every 10 minutes ≀ 10 min Baseline sync for all integrations
Real-Time Sync Shift/leave created or updated Seconds Immediate push on schedule changes
Webhook Sync Google/Outlook push notification Seconds External calendar changes trigger re-sync
  • CalendarSyncAllJob runs on a 10-minute cron, queuing individual CalendarSyncJob workers for each integration that is due
  • Each integration tracks last_sync_at and respects configurable sync frequency (default: 30 minutes)
  • Sync jobs use exponential backoff retry (up to 3 attempts) and automatically discard unrecoverable errors like revoked tokens
  • Push notification channels are automatically renewed by CalendarPushNotificationRenewalJob

πŸ“± iCal Feed (Subscribe URL)

For users who prefer a read-only subscription without OAuth:

  • A signed URL is generated per user using Rails.application.message_verifier(:calendar_feed)
  • The feed serves standard .ics format with events from the past 30 days to 90 days ahead
  • Events include emoji prefixes for quick visual identification (πŸ’Ό Shift, πŸ–οΈ Leave, πŸŽ‰ Holiday, πŸ“š Training, etc.)
  • Works with any calendar client that supports iCal subscriptions β€” Apple Calendar, Thunderbird, Yahoo Calendar, etc.

πŸ”§ Sync Settings (Per Integration)

Each connected calendar integration has granular sync controls.

Setting Default Description
Sync Shifts βœ… On Push work shift events to external calendar
Sync Leave Requests βœ… On Push approved time off
Sync Holidays βœ… On Push company holidays
Sync Interviews βœ… On Push interview appointments
Sync Training βœ… On Push training due dates
Sync Tasks βœ… On Push task deadlines
Sync Business Events βœ… On Push performance cycles and deadlines
Sync 1:1 Meetings βœ… On Push EPMS meetings
Event Visibility Private Calendar event privacy setting
Include Location βœ… On Add location details to events
Include Description ❌ Off Keep events clean by default
Sync Direction Push to External One-way from MangoApps to calendar

πŸ“Š Sync Monitoring & Logs

Every sync operation is tracked with detailed logs.

Metric What It Tracks
Events Created New events pushed to external calendar
Events Updated Modified events re-synced
Events Deleted Removed events cleaned up
Events Skipped Unchanged events not needing sync
Duration How long the sync took
Status Success, Error, Partial, or Running

Sync logs use atomic SQL counter increments to prevent race conditions, and cap stored event details at 100 entries per log to control database size.

πŸ” Connection Attempt Tracking

Failed OAuth connection attempts are tracked for visibility and troubleshooting.

Field Purpose
Provider Google, Outlook, or iCal
Status Pending, Success, or Failed
Error Type unauthorized_client, access_denied, invalid_client, redirect_uri_mismatch, etc.
Admin Recommendation Actionable fix steps (e.g., β€œAdd callback URL to Google Cloud Console”)
IP & User Agent Security audit trail

User Roles & Permissions

Capability Employee Manager HR Admin
View unified calendar βœ… βœ… βœ… βœ…
Connect own calendar (Google/Outlook/iCal) βœ… βœ… βœ… βœ…
Toggle sync on/off for own integration βœ… βœ… βœ… βœ…
Trigger manual sync βœ… βœ… βœ… βœ…
Disconnect own calendar βœ… βœ… βœ… βœ…
Subscribe via iCal feed URL βœ… βœ… βœ… βœ…
View own sync logs βœ… βœ… βœ… βœ…
Access admin settings β€” β€” β€” βœ…
Enable/disable calendar sync globally β€” β€” β€” βœ…
Configure allowed providers β€” β€” β€” βœ…
Toggle provider availability (Google/Outlook/iCal) β€” β€” β€” βœ…
Choose which event types sync β€” β€” β€” βœ…
Set sync frequency β€” β€” β€” βœ…
Select OAuth configuration per provider β€” β€” β€” βœ…
View all user integrations β€” β€” β€” βœ…
Toggle sync for any user’s integration β€” β€” β€” βœ…
Trigger sync for any user β€” β€” β€” βœ…
Reset settings to defaults β€” β€” β€” βœ…
View organization-wide sync statistics β€” β€” β€” βœ…

Admin Configuration

Settings Dashboard

Admins access calendar settings from the app’s Settings tab. The configuration is organized into sections:

Core Settings
| Setting | Default | Description |
|β€”β€”β€”|:β€”β€”-:|β€”β€”β€”β€”-|
| Calendar Sync Enabled | βœ… | Master switch for all calendar sync |
| Allow User Self-Setup | βœ… | Let employees connect their own calendars |
| Sync Frequency | 30 min | How often the scheduled sync runs |
| Event Prefix | (empty) | Optional prefix for all synced events |
| Make Events Read-Only | βœ… | Prevent external edits to synced events |

Provider Settings
| Setting | Default | Description |
|β€”β€”β€”|:β€”β€”-:|β€”β€”β€”β€”-|
| Google OAuth Enabled | βœ… | Allow Google Calendar connections |
| Outlook OAuth Enabled | βœ… | Allow Outlook connections |
| iCal Enabled | βœ… | Allow iCal feed subscriptions |

Automation Settings
| Setting | Default | Description |
|β€”β€”β€”|:β€”β€”-:|β€”β€”β€”β€”-|
| Auto-Sync New Shifts | βœ… | Push new shifts immediately |
| Auto-Sync Shift Changes | βœ… | Push shift modifications immediately |
| Auto-Sync Leave Requests | βœ… | Push approved leave immediately |
| Enable Real-Time Sync | βœ… | Trigger sync on data changes |
| Notification on Sync Errors | βœ… | Alert on failed syncs |
| Conflict Resolution | Manual | How to handle event conflicts |
| Require Admin Approval | ❌ | Require admin approval for new connections |
| Sync Historical Events | ❌ | Sync events from the past |
| Max Days Ahead | 60 | How far into the future to sync |

Integration Mode

The Calendar app operates in one of three modes:

Mode Description
Disabled Calendar sync is turned off entirely
Admin Managed Sync is enabled but only admins can set up integrations
User Self-Setup Employees can connect their own calendars (default)

OAuth Configuration

Admins can select which SSO/OAuth configuration is used for each provider:

  • Google Calendar β€” uses google_oauth2 SSO configurations (business-level or system-level)
  • Microsoft Outlook β€” uses entra_id SSO configurations (business-level or system-level)
  • Priority order: User’s login SSO β†’ Admin-selected config β†’ Business default β†’ System default

Statistics Dashboard (Admin View)

Metric Description
Total Integrations All calendar connections across the business
Active Integrations Connections in β€œactive” status
Sync Enabled Connections with sync turned on
Recent Syncs (24h) Syncs completed in the last 24 hours
Failed Syncs (24h) Syncs that errored in the last 24 hours
Providers Breakdown Count per provider (Google, Outlook, iCal)

Mobile Experience

The Calendar app includes a dedicated mobile interface accessible at /m/apps/calendar:

  • Upcoming Events View β€” See the next 7 days of shifts, leave, and holidays at a glance
  • Integrations List β€” View all connected calendars with status indicators
  • Toggle Sync β€” Enable or disable sync per integration with a single tap
  • Manual Sync β€” Queue an immediate sync from mobile
  • Provider Availability β€” See which providers are available to connect

The mobile interface uses the shared mobile layout with dark mode support, touch-optimized targets, and offline detection.


Getting Started

For Employees

  1. Open the Calendar app from the marketplace sidebar
  2. Choose your provider β€” Google Calendar, Outlook, or iCal
  3. For Google/Outlook: Click β€œConnect” and sign in with your work account. Grant calendar permissions when prompted
  4. For iCal: Copy the generated feed URL and paste it into your calendar app’s β€œSubscribe to Calendar” feature
  5. Verify the connection β€” Your shifts and upcoming events should appear in your external calendar within minutes
  6. Customize sync settings β€” Toggle which event types you want synced from the integration detail page

For Admins

  1. Enable the Calendar app from the Marketplace
  2. Open Settings and verify the master sync toggle is on
  3. Configure providers β€” Enable Google, Outlook, and/or iCal based on your organization’s needs
  4. Select OAuth configurations β€” Choose which SSO configuration each provider should use
  5. Set sync preferences β€” Adjust frequency, event types, and automation settings
  6. Monitor adoption β€” Use the statistics dashboard to track how many employees have connected

Best Practices

Practice Recommendation
Start with defaults The default configuration enables all providers and event types β€” a good starting point for most organizations
Use SSO alignment When possible, use the same Google/Microsoft account for SSO login and calendar sync for a seamless experience
Monitor failed syncs Check the admin statistics dashboard weekly for failed sync counts; expired tokens are the most common issue
Keep events private The default β€œprivate” visibility protects employee schedule details from being visible to calendar-sharing recipients
Use iCal for read-only needs If employees only need to see their schedule (not sync interactively), the iCal feed is the simplest option
Set a reasonable sync frequency 30 minutes is the default and works for most teams. Reduce to 15 minutes for fast-paced shift environments
Enable real-time sync For shift-based organizations, real-time sync ensures last-minute schedule changes reach employees immediately
Review connection attempts Use the connection attempt log to diagnose OAuth setup issues before employees report problems

Troubleshooting

Issue Likely Cause Fix
β€œCalendar sync is not enabled” Admin has not enabled sync Admin enables via Settings β†’ Core Settings
β€œGoogle OAuth not configured” No SSO configuration for google_oauth2 Admin configures Google OAuth in SSO settings
β€œCalendar credentials could not be decrypted” Encryption key mismatch (e.g., after environment migration) Employee reconnects calendar via the Reconnect button
Events not appearing Sync has not run yet or event type is disabled Trigger manual sync; verify event type is enabled in settings
β€œRate limit exceeded” More than 60 API requests per minute Wait 1 minute and retry
β€œAuthorization failed” Token expired or revoked Click Reconnect to re-authenticate with the provider
iCal feed shows old data Client caches the feed Most iCal clients refresh every 15-60 min; wait for the next refresh

  • Scheduling & Teams β€” Manage the shifts that sync to calendars β†’ Scheduling & Teams App Overview
  • Time & Attendance β€” Track clock-ins alongside synced shift events β†’ Time & Attendance App Overview
  • Leave Management β€” Approved leave flows into the calendar automatically
  • Training β€” Training deadlines sync as calendar events when the Training app is enabled
  • EPMS (Performance Management) β€” 1:1 meetings and review cycles appear as calendar events

Your work schedule, your calendar, always in sync β€” MangoApps Workforce Calendar.

Ask AI Product Advisor

Hi! I'm the MangoApps Product Advisor. I can help you with:

  • Understanding our 40+ workplace apps
  • Finding the right solution for your needs
  • Answering questions about pricing and features
  • Pointing you to free tools you can try right now

What would you like to know?