Build Notifier is a native macOS menu bar app for tracking CircleCI builds and Vercel deployments without keeping dashboards open.
- Watches CircleCI projects for passing, failing, running, and approval-required workflows
- Watches Vercel projects for deployment ready and deployment error states
- Triggers ad-hoc branch deployments on CircleCI straight from the menu bar
- Sends native macOS notifications with optional sound
- Supports launch at login and per-project watch preferences
- Stores CircleCI and Vercel tokens locally for repeat use
Any watched CircleCI repo can trigger a pipeline for an ad-hoc branch without opening the CircleCI web UI.
- Hover a repo in the menu bar and click
Deploy(or right-click the repo and chooseDeploy a Branch). - Enter the branch name.
- Set the environment (defaults to
devnet), then clickDeploy.
This calls the CircleCI v2 trigger API (POST /project/{slug}/pipeline) with the branch and an env pipeline parameter, using your stored token. Clearing the environment field sends only the branch, with no parameters.
The repo's CircleCI config decides what a triggered pipeline does. For the "deploy any branch to an environment" flow to work, the config needs a pipeline env parameter and a workflow that runs when that parameter is set (for example, widening branch filters for a manual devnet deploy). After a successful trigger the list refreshes a few times so the new build appears within a few seconds.
- macOS 14+
- Swift 5.9+ or Xcode 15+ to build locally
- CircleCI personal API token and/or Vercel access token
- Sign in to CircleCI.
- Open the personal token page: app.circleci.com/settings/user/tokens
- Click
Create New Token, give it a label, and copy the token when CircleCI shows it. - Paste the token into Build Notifier during onboarding or from Settings.
Reference: CircleCI personal API token guide
- Sign in to Vercel.
- Open the token page: vercel.com/account/settings/tokens
- Create a new token for the account or team that owns the projects you want to watch.
- Copy the token and paste it into Build Notifier during onboarding or from Settings.
Reference: Vercel access token guide
- Download or open the
.dmg - Drag
Build Notifier.apptoApplications - Launch the app
This repository currently builds an ad-hoc signed, non-notarized app. On some Macs, first launch may be blocked until the user does one of the following:
- Control-click
Build Notifier.app, chooseOpen, then confirmOpen - Or try to launch it once, then go to
System Settings > Privacy & Securityand clickOpen Anyway
Yes, other people can install a DMG generated from this Mac.
What matters is how the app is signed:
./build-app.shsigns the app ad hoc by default./build-dmg.shpackages that app into a DMG- Ad-hoc signing is enough for sharing internally, but it is not the same as Developer ID signing and notarization
To share it:
- Build the DMG with
./build-dmg.sh - Send the generated
Build-Notifier-1.0.2.dmgfile to the other person - They open the DMG and drag
Build Notifier.apptoApplications - If macOS blocks first launch, they use
Openfrom the context menu orSystem Settings > Privacy & Security > Open Anyway
If you want a smoother install experience for anyone outside your team, sign the app with a Developer ID certificate and notarize it before distribution.
git clone <repo-url>
cd build-notifier
./build-app.sh
open "Build Notifier.app"To build with a local signing identity already installed in Keychain:
security find-identity -v -p codesigning
SIGN_IDENTITY="Apple Development: Your Name (TEAMID)" ./build-app.shThis helps when each teammate builds on their own Mac. It does not replace Developer ID signing or notarization for shared distribution.
swift build
swift run
./build-app.sh
./build-dmg.shImportant paths:
BuildNotifier/Views/for SwiftUI screensBuildNotifier/Services/for CircleCI, Vercel, notifications, and pollingBuildNotifier/State/AppState.swiftfor app-wide statebuild-app.shandbuild-dmg.shfor packaging
- CircleCI only returns projects the user follows.
- Vercel support is project-based and tracks deployments from watched projects.
- The app icon is bundled during
./build-app.shfromBuildNotifier/Assets/AppIcon.icns.
