Object — 2026
The notch pauses with you.
A prototype that gives a browser pause somewhere physical to happen: the MacBook’s own hardware cut-out.
What it does
The browser decides. The notch shows it.
You reach a checkout in Chrome. The pause fires as it already does, and at the same moment it tells the Mac. The notch expands into a small black panel with shoulders wider than the cut-out, counts the browser’s thirty seconds down, and then offers the same three outcomes.
The browser stays authoritative. A decision made on the Mac is logged and sent back, and never applied. That is phase one. The flag that would hand the notch the decision is written, untested, and off.
The states
Eight, at their real size.

01At rest. The notch is the notch.

02A checkout in the browser. Thirty seconds.

03Still counting.

04Ready when you are.

05Walk away · plan it · continue.

06Walked away.

07Planned.

08Continue.
How it connects
Public APIs and a local socket.
Native Swift — AppKit and SwiftUI, public APIs only. The notch rect comes from NSScreen’s safe-area insets, with a top-edge fallback on Macs that have no cut-out; the panel is an NSPanel above it; the global shortcut is Carbon’s RegisterEventHotKey, which needs no permission. No accessibility access, no screen recording, no network.
Chrome reaches it through a native messaging host, com.griotta.mac.bridge, which talks to the app over a Unix socket in the user’s temp directory at mode 0600. A pause that arrives from the browser counts the browser’s own length, whatever the app’s demo toggle says. Nothing else is on the link: no URL, origin, merchant, product, price, cart, page text or identity crosses either side of it.
Status
- Made of
- Fifteen Swift files. One menu-bar app — no dock icon, no window.
- The bridge
- A Chrome native messaging host over a local Unix socket. Local only; it reaches nothing.
- Who decides
- The browser. Phase two is written, untested and switched off.
- Checked
- End to end against the real Chrome binary on a throwaway profile: real content script, worker, native messaging, host, socket and app.
- Not checked
- A normal Chrome profile with the extension loaded by hand. Still to do.
- The images
- Eight states, rendered by the app's own snapshot harness.
- Status
- A prototype. Not shipped, not released, and not in the Chrome Web Store.
If I can’t leave a thought alone, I make it real.
Some become products. Some become research. Some only needed to exist once.
Griotta is the one I’m building now.
julien@ombrise.com