Skip to content
Mac3 min read

Overlook, a home for my Mac that follows my fingers

With the Mission Control gesture, Overlook opens a home that follows your fingers while every window flies from its real place to its spot. Coming from the browser to Swift and AppKit, a few things surprised me.

I put three fingers on the trackpad and swipe up, like I'm opening Mission Control. What shows up is a home on top of the Mac that opens by following my fingers, and every window flies from where it really is to its spot in the home. That's Overlook, an app I built in Swift and AppKit. I come from writing web, so a good part of the road was running into things the browser never made me look at.

Swipe up, hold, slide

Every time it opens, the home lays out all the windows in centered rows, as big as they fit, always in the same order. A column of widgets, agents and notes sits on the right. The background is my own wallpaper, inside a rounded screen with a black bezel, like the tube of a classic Mac. The windows stay alive: a video keeps playing and a terminal keeps printing.

To jump to a window I swipe up with three fingers, pause without lifting, feel a haptic detent, and the home finishes opening on its own. I slide toward the window, lift my fingers, and I'm in it.

What I didn't expect

The gesture gets taken before the Dock ever sees it. macOS turns the swipe into a private event, and a session event tap sees it first and consumes it. A real swipe ends at progress 0.21 with a velocity of 4.9, so I confirm it by speed, not by distance.

Then there were the ghosts: 26 of the 37 "windows" the system listed weren't real windows at all, just autofill panels, permission dialogs and windows already closed. Real ones belong to a Space and those don't, so I filter on that with CGSCopySpacesForWindows.

And then text. A code card was costing 550 milliseconds per frame while sliding, because TextKit 2 re-lays out the text every time its view moves. The text now runs on TextKit 1. The squircle mask had a similar story: it changed on every frame and forced a full-screen offscreen pass, and the 95th-percentile frame hit 44 milliseconds. Now the bezel is a fixed shape on top and only its opacity changes. Opening and closing measure 8.33 milliseconds a frame, a true 120 Hz with no hiccups.

What I pulled and what I haven't tested

There was a desk mode that I removed on October 26. It moved the real windows onto their thumbnails and tucked the rest into a corner, and it turned out to be unintuitive: windows vanished and places changed.

Some parts I also wrote without being able to fully test them. Picking a window with the held gesture and arranging windows from the home were written without a way to synthesize a system touch or swipe; the gesture's path goes into a log so I can calibrate it with real use. And since the app is only ad-hoc signed, every new build asks for Accessibility and Screen Recording again.

That's where it stands. The repository is private.

OV

Obed Vargas

Builds AI agents and open-source tools