Calendar

A native macOS calendar app built directly on EventKit - reads and writes your real system calendars, with drag-and-drop rescheduling and a small in-house design-token system.

Apple’s own Calendar app is fine, but I wanted to see what building a calendar app actually on top of EventKit looked like - not a toy app with its own separate event store, but one that reads and writes the same calendars macOS itself uses. Everything you do in this app shows up in your real calendar, immediately.

Built directly on the system’s own data

An @MainActor, ObservableObject-based CalendarService, using Combine, mediates EKEventStore authorization state, calendar lists, and events out to SwiftUI views. There’s no shadow data model duplicating what EventKit already tracks - the app’s state is the system’s calendar state, which means there’s nothing to sync and nothing that can drift out of consistency with Calendar.app or any other calendar client.

Events support drag-and-drop rescheduling directly against the EventKit store, so moving an event in this app’s UI is the same underlying write as dragging it in Apple’s own Calendar.

First-run permission, and a proper design system

An OnboardingCoordinator handles the first-run flow of requesting calendar access - EventKit permissions are the kind of thing that need clear framing the first time, not a bare system dialog with no context. And rather than styling views ad hoc, there’s a small in-house design-token system - DesignTokens, ColorPalette, Typography, Spacing - so the app has one consistent source for color, type, and spacing decisions instead of magic numbers scattered across views.

The app has both unit and UI test targets, which matters more than usual here since any bug in the EventKit integration touches the user’s actual calendar data, not a disposable test fixture.

Key decisions

Built with