Pulse 1.2 is out: your reminders, your CI, and music from any app, all in the MacBook notch
Hey folks,
I mdae Pulse, a small Mac app that turns the MacBook notch into something useful: now playing, meeting controls, clipboard, weather, focus timer, AirDrop shelf, battery, system stats. It lives in the dead pixels you already paid for.
1.2 shipped this week, and it is the first release where I did almost no deciding. I read the emails, counted what people kept asking for, and built those three things.
Todos & Reminders
Your Apple Reminders, in the island. Overdue and due today at a glance in the wings, tick a row anywhere to complete it, and capture new ones from the notch: hit Add, type "pay rent tomorrow 5pm", and the date is understood, shown as a chip, and saved with a real alarm. Open and Done tabs so a ticked item does not just vanish. Half-typed thoughts are kept as a draft instead of thrown away. Everything is a real Reminder, so it syncs to every device you own.

Builds, for the developers who bought it, to make their lives easier
Pipeline status for the repos you work in, from GitHub Actions and GitLab CI. A quiet colour in the wing while everything passes, the latest runs in the card, a toast the second something fails, and a click lands you on the run itself. Your local dev servers get their own lane, found automatically with their project names, opened in the browser with a click and stopped with one more. Off by default. Tokens live in the macOS Keychain and go to GitHub or GitLab directly, nowhere else.

Music from every app
The island now reads the Mac's own now playing service, so players that never worked in any notch app before show up with artwork, progress and working controls. Qobuz, Podcasts, VLC, TV, anything that plays. Spotify, Apple Music and browser tabs keep their richer direct integrations. The transport also grew an AirPlay button that switches your Mac's sound output to any device, exactly like the menu bar Sound item.

Two same-day point releases followed, which is the honest part of shipping. 1.2.1 fixed Arc janking while music played, and Settings not taking clicks on macOS 26.3. 1.2.2 fixed the island re-opening on top of the menu bar you were reaching for, and made every focus length adjustable a minute at a time, because someone wanted a 27 minute session and could not set one.
No subscription. Nothing leaves your Mac.
THANK YOU!
To everyone who wrote in: this release is yours more than mine. Todos, Builds and the music fix all started as someone's email, and the two point releases after it were your bug reports landing within hours. Thank you for taking the time to tell me what was wrong instead of quietly uninstalling. Keep them coming.


Replies
"It is the first release where I did almost no deciding" is the most interesting sentence here, and I would be careful with it.
Reading the emails and building the three things people kept asking for is the right call at your stage, and it stops working at a specific point: the people who write in are not a sample. They are the subset who were annoyed enough to type. That gives you excellent signal about friction in what already exists and almost none about what is missing, because nobody emails you about a feature they never imagined you would have.
So the counted-requests method is very good at 1.2 and quietly dangerous by 1.6. It converges. You end up with a polished version of what your loudest twenty users already wanted, and the person who would have loved a different product silently never installs.
The half-typed drafts being kept instead of thrown away is the detail that made me trust the rest of the release, by the way. That is not a feature anyone requests. Somebody noticed.
One thing I would put in the notch that nobody asks for: what it did not do. A CI toast when something fails is table stakes now. The thing I actually want in my peripheral vision is a build that has not reported at all for twenty minutes, because "no news" and "nothing ran" look identical in a wing that only lights up on failure.
Pulse Island
@rabnoor_s Fair hit.
The counted-requests line was me describing 1.2 honestly, not a method I intend to keep. You are right that it converges. The gap I have no answer for is the person who looked at it, decided it was not for them, and closed the tab. That person leaves no trace, and no amount of reading the inbox will ever produce them.
The drafts detail came from using the thing all day rather than from anyone asking for it.
The stalled build point is the good kind of annoying, because it is obviously right and I did not think of it. Absence is the one state nothing owns. A wing that only lights up on failure is quietly reporting two different things as identical: passing, and never started. Going on the list!!
The state I would make first-class here is freshness. In a glance surface, stale reminders, stale CI, and stale now-playing are often more dangerous than explicit failures because they still look current, so each wing probably needs a tiny last-successful-refresh or data-is-older-than-expected signal. The notch advantage is that it can show negative state without feeling noisy: not just "build failed," but "this source has gone quiet long enough that you should stop trusting what you are seeing."
Pulse Island
@getosmo hey, two wings currently keep the last good reading on a failed fetch and never say how old it is, so they read as current when they aren't. The fix I'd want is per source rather than global, since expected cadence differs a lot between CI polling and now playing, and it needs to separate "no new data" from "no longer answering" because those look identical on the surface and mean opposite things.