All case studies

Case study / Freecal

Separate calendars. One connected day.

Freecal connects Google and Microsoft Outlook calendars through two-way sync groups, with choices for shared event details and background processing shaped around each provider’s event model.

Calendar syncProvider integrationsBackground workers
Freecal calendar example: a work event connects to personal and client calendars in one Busy sharing group. Copies show availability rather than the original event details.

The context

A day rarely belongs to just one calendar.

Work and personal commitments often sit in separate accounts. Keeping a meeting’s time and availability consistent can require repeated edits. Freecal brings selected calendars together while people keep planning in familiar apps.

The engineering challenge

Providers represent recurring events, all-day dates and notifications differently. Sync must distinguish originals from copies, apply sharing choices consistently, and preserve pending changes when processing or provider access is interrupted.

Product focus
Google and Outlook calendar synchronization
Focus
Calendar sync · Provider integrations · Background workers

Design + engineering

The decisions behind the workflow.

01

Keep the familiar calendar experience

People connect accounts, choose calendars and keep creating or changing events in their usual Google or Outlook app. Sync groups carry those changes across connected calendars.

02

Choose sharing at the group level

Full details carries event information into copies. Busy and Blocked replace the copied title and omit description and location. Overlapping memberships form a connected calendar network.

03

Preserve the meaning of an event

All-day dates, time zones, native recurring series and changed occurrences have distinct representations. Origin and copy identities guide reconciliation and help prevent changes from circulating repeatedly.

04

Prioritize the changing day

Onboarding examines today across group members before historical and future writes. Fresh changes receive priority while older work continues through durable checkpoints and bounded batches.

05

Separate watch control from event writes

A dedicated control worker registers and renews provider subscriptions independently of the data worker. Notifications trigger provider reads, with recovery work available when another check is needed.

Inside the workflow

Follow the work through the system.

Accounts · Sync groups · Events · Workers

  1. 01

    01

    Connect the calendars people already use

    Provider sign-in connects accounts. Selected calendars become members of a sync group, with at least two calendars participating.

  2. 02

    02

    Share time with the right detail

    Full details, Busy and Blocked shape shared copies. The original keeps its details while the group’s mode governs what travels.

  3. 03

    03

    Carry each event’s native meaning

    The model preserves recurring series and occurrence identities, date-only all-day events and time zones. Unsupported or foreign-linked items remain visible for review.

  4. 04

    04

    Give pending changes a durable path

    Checkpoints and queued batches retain processing intent. Separate data and control workers handle event writes and subscription management.

  5. 05

    05

    Make the workspace readable

    The aggregate view shows original events, with genuine overlaps visible. Calendar visibility preferences remain separate from synchronization membership.

Product scope

Share the time. Choose the detail.

Calendar connections

Connect Google Calendar and Microsoft Outlook calendars into two-way sync groups.

Sharing choices

Choose Full details, Busy or Blocked for the group. Masked copies omit the original description and location.

Event meaning

Keep all-day dates, time zones, recurring series and occurrence changes in their provider-aware forms.

Background processing

Prioritize current changes while resumable batches and checkpoints retain pending work.

Relevant technical work

The system beneath the experience.

React, FullCalendar and Zustand support the calendar workspace.
Express and Mongoose serve the API and persist event mappings and checkpoints in MongoDB.
BullMQ and Redis preserve pending and in-flight work for retryable processing.
Google incremental cursors and Outlook notified event IDs guide provider-specific reads and recovery.

The finding

A connected day across Google and Outlook.

Calendar sync depends on preserving what an event means and retaining the work still waiting to happen.

Discuss a similar move

Start a conversation

Have a product or operation that needs this kind of clarity?

Book a free call