Skip to content

About

A full-screen meeting reminder for Mac. Free, no tracking, no accounts.

Resources

Contributing

Security policy

Stars

12 stars

Watchers

0 watching

Forks

Repository files navigation

Slapss app icon

Slapss

A full-screen meeting reminder for Mac.

Slapss lives in your menu bar, watches your calendar, and puts an unmissable full-screen card on your display the moment a meeting starts.

Download on the Mac App Store · slapss-app.com · Changelog

Free forever. No subscription, no in-app purchase, no account, no tracking.

I built Slapss to fix a problem I kept running into myself, and shared it so it can help others too. If it saved you a meeting or two and you'd like to say thanks, you can buy me a coffee on GitHub Sponsors. Thank you!


Why this repository exists

Slapss makes one claim above all others: it reads your calendar locally and sends it nowhere. In a closed-source binary that is a promise you have to take on faith. This repository is here so you don't have to — you can read every line that touches your calendar data.

The app you install is still the one on the Mac App Store. Nothing about how you use Slapss changes.

What it does

  • Menu bar status item with the next meeting's title and a live countdown.
  • Full-screen alert at meeting start, with Join, Snooze, and Dismiss. Shows on one display or all of them.
  • Calendar sources: macOS Calendar and Reminders (EventKit) and Microsoft 365 / Exchange (Microsoft Graph).
  • Presenting Now — a one-click toggle that queues alerts instead of firing them while you're screen sharing.
  • Themes: Sunset, Ocean, Forest.
  • Seven languages: English, Turkish, Spanish, German, Italian, French, Japanese.
  • Accessibility: full VoiceOver labelling, keyboard-operable alert, and Reduce Motion / Reduce Transparency support.

Privacy

There is no Slapss server. There is nothing to have an outage.

  • Calendar and reminder data is read through Apple's EventKit and stays on your Mac.
  • Microsoft 365 calendars are fetched directly from Microsoft Graph by the app itself, using a read-only scope (Calendars.Read, User.Read). Tokens live in your keychain.
  • No analytics, no crash reporting SDK, no telemetry, no accounts.
  • The app is sandboxed, and its entitlements are the whole story — three of them, in slapss/slapss.entitlements: app sandbox, outbound network (for Microsoft Graph), and calendar access. Don't take this on faith, read them off the copy you installed: codesign -d --entitlements :- /Applications/slapss.app Two things you may see that aren't in that file. Builds up to 2.0.0 also carried com.apple.security.files.user-selected.read-only, injected by an Xcode build setting (ENABLE_USER_SELECTED_FILES); no code path ever used it and 2.0.1 removes it. And a copy you build yourself carries com.apple.security.get-task-allow, which Xcode adds to local builds so a debugger can attach — App Store builds don't have it.

Architecture

~8,900 lines of Swift across 28 files, no third-party dependencies — no SPM packages, no CocoaPods, no Carthage. Even the Microsoft sign-in flow is hand-rolled on ASWebAuthenticationSession + CryptoKit (PKCE).

Object Responsibility
CalendarAggregator Merges EventKit + Microsoft Graph sources, publishes upcomingMeetings
AlertScheduler Timers, watchdog, App Nap prevention, fires and queues overlays
AppSettings All user preferences, persisted to UserDefaults
LocalizationManager Runtime language switching without a restart
PopoverVisibilityMonitor Tracks real popover open/close via NSWindow notifications

CLAUDE.md documents the architecture in full, along with the non-obvious macOS and SwiftUI constraints this app runs into — MenuBarExtra never calling onDisappear, Color.clear flipping the AppKit coordinate system, App Nap throttling scheduled timers, and more. Read it before changing anything. Those workarounds look like mistakes until you know why they're there.

Building from source

Requirements: macOS 15 or later to run, Xcode 26 or later to build.

Xcode 26 is a hard requirement, not a suggestion. The project sets SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor, which makes every declaration implicitly @MainActor. Older Xcode versions don't know that build setting, silently ignore it, and then fail with a wall of "call to main actor-isolated instance method in a synchronous nonisolated context" errors. If you see those, your Xcode is too old — the code is fine.

git clone https://github.com/theshiver/slapss-app.git
cd slapss-app
open slapss.xcodeproj

Two things to change for your own build:

  1. Signing. In Xcode, select the slapss target → Signing & Capabilities → set Team to your own Apple developer team. The committed value is the upstream team and won't work for you.
  2. Microsoft sign-in (optional — everything else builds and runs without it). The committed Azure app registration is the upstream one. To sign in against your own, follow AZURE_SETUP.md.

To check that it compiles without any signing setup at all:

xcodebuild build -project slapss.xcodeproj -scheme slapss -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO

Contributing

Bug fixes, translation corrections, and accessibility improvements are welcome. Please read CONTRIBUTING.md first — it says what gets merged, what doesn't, and how long you should expect to wait.

Found a security issue? Don't open an issue. See SECURITY.md.

License

Code is licensed under the Apache License 2.0.

The Slapss name, app icon, menu bar mark, and logo are not covered by that license. They are trademarks and copyrighted assets, all rights reserved. If you publish a fork, it must use its own name and its own icon. See TRADEMARK.md.

The only official build of Slapss is the one distributed from the Mac App Store listing above.

Made by Can Çetin.

About

A full-screen meeting reminder for Mac. Free, no tracking, no accounts.

Resources

Contributing

Security policy

Stars

12 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages