Recess

Role
Solo design & engineering
Year
2025
Stack
SwiftUI · AppKit · EventKit · Keychain

Recess started as a small thing I wanted for myself. I had seen apps that cover your screen before a meeting so you do not miss it, and I had also seen LookAway, which reminds you to rest your eyes. I kept thinking both ideas would be nicer together.

So I built my own version: a macOS menu-bar app that nudges me to look away from the screen and warns me before meetings. It was not a grand frustration story. I mostly wanted the interruption to feel useful without becoming another thing to fight.

The brief

The product stayed simple: a menu-bar timer, a break overlay, and meeting reminders that show up early enough to help. Most of the thinking went into the edges. The app can interrupt you, so it also has to know how to get out of the way.

I built it with SwiftUI and AppKit directly, with no third-party dependencies. Calendar data stays on the Mac, Google Calendar access is read-only, and tokens live in Keychain.

What mattered

Making interruption feel lightweight

  • Breaks can be skipped. The app nudges, but it does not trap you.
  • The menu bar and Command-Q stay available even when the break overlay is up.
  • Sleep and wake are treated carefully, so opening your laptop does not immediately trigger a stale break.
  • Calendar reminders use a wider lead time because a reliable five-minute nudge is better than a precise one-minute nudge that sometimes never appears.
Product surfaces

Most of the product lives in a few surfaces: the menu bar, the break overlay, meeting reminders, preferences, and calendar setup.

Full-screen meeting reminder
Full-screen meeting reminder
Eye-rest break
Eye-rest break
Guided eye exercise
Guided eye exercise
Personal reminder editor
Personal reminder editor
Meeting reminder preferences
Meeting reminder preferences
Tradeoffs

The strongest decisions are the quiet ones. The menu bar stays visible, escape paths keep working, sleep gaps are handled, and a watchdog can close the break panel if the normal UI path fails.

The part I would still talk through carefully is media control. Pausing playback during a break is useful, but doing it well on macOS means touching private system behavior. Recess treats that as a convenience, not a core safety path, so failure falls back to doing nothing.

Links & credits