Vibecoded a Busy Bar Control Centre

shabablinchikow1 pts0 comments

GitHub - Shabablinchikow/Busy-Control-Centre · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

Shabablinchikow

Busy-Control-Centre

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>17 Commits<br>17 Commits

.github/workflows

.github/workflows

Resources/Themes

Resources/Themes

Scripts

Scripts

Sources

Sources

docs

docs

.gitignore

.gitignore

CLAUDE.md

CLAUDE.md

LICENSE

LICENSE

README.md

README.md

project.yml

project.yml

View all files

Repository files navigation

Busy Control Centre

A native macOS app for the BUSY Bar — a launcher for small<br>widgets that draw on the bar's 72×16 LED panel, plus focus sessions and a live<br>mirror of the display.

Everything talks to the device's local HTTP API. No cloud, no accounts, no<br>third-party dependencies — SwiftUI and the system frameworks only.

Widgets

Clock<br>Big time, refreshed every second

Nyan Cat<br>Pop-tart cat, rainbow trail, twinkling stars

ISS Alert<br>Quiet until the space station passes near you

Music<br>Spectrum bars following the Music app, with track title

Flightradar<br>Tracks one flight by number: route, altitude, speed

Claude Limits<br>Live Claude Code usage bars with the Clawd mascot

pISS Stream<br>ISS urine-tank level from NASA telemetry, à la pISSStream

Stocks<br>Watchlist prices and the day's change; the arrow greys out when that exchange is shut

Weather<br>Condition icon, temperature, UV index and chance of rain

YouTube<br>Subscriber count for a channel, using your own API key

Mail<br>Unread count from Apple Mail's inbox, or a small celebration

Status<br>Pin a banner on the bar until you switch it off

Timer<br>Countdown run by the bar, with your choice of banner

Pomodoro<br>Work/rest cycles run by the bar

On Call<br>Mic in use → the bar shows an ON CALL banner

Widgets draw via /api/display/draw. Status, Timer, Pomodoro and On Call instead<br>drive the device's built-in focus session (/api/busy/snapshot), which renders<br>the bar's own themed animations at session priority.

Choosing and rotating them. Two windows, ⌘⇧1 and ⌘⇧2. Widgets picks which<br>ones the main list shows, so it stays short. Carousel picks a set to rotate<br>through and how many seconds each gets; the two selections are independent, and<br>switching a widget on by hand stops the rotation so the bar stays where you put<br>it.

Priority. Sessions outrank widgets, and the mic outranks everything: when<br>On Call takes the screen it captures any running timer and restores that exact<br>snapshot afterwards, so the countdown resumes rather than restarting.

Display mirror

The main window can mirror what the bar is showing, drawn as an LED matrix —<br>one dot per device pixel, with bloom on lit dots.

/api/screen is worth a note for anyone else building against it: it advertises<br>Content-Type: image/bmp, but the body is base64-encoded BGR888 with no<br>header . Payload length identifies the panel — 3456 bytes for the front<br>(72×16), 38400 for the back (160×80).

Building

Requires macOS 14+, Xcode 15+, and xcodegen.

brew install xcodegen<br>xcodegen generate<br>open BusyBar.xcodeproj

The Xcode project is generated from project.yml and is not committed. Set<br>DEVELOPMENT_TEAM in project.yml to your own team ID before signing.

Releases are built by CI on tag push (v*); see .github/workflows/release.yml.<br>Signing and notarisation are optional and enabled by setting the repository<br>secrets documented in that workflow — without them CI still produces an<br>unsigned build for testing.

Banner artwork

The banner picker previews each theme with a real frame from the bar's own<br>animation, taken from the firmware repository. Those images are CC-BY-SA-4.0 and<br>are committed under Resources/Themes/ — refresh them with<br>./Scripts/fetch-themes.sh. Any theme without artwork falls back to a text<br>label. See Attributions.

Connecting

Over USB the bar is always at 10.0.4.20 and needs no key. Over Wi-Fi, enter<br>its IP and the HTTP access key from Settings → HTTP Access on the device; the<br>app sends it as X-API-Token.

macOS will ask for Local Network permission on first launch. If the prompt never<br>appears and the app cannot reach the bar, see docs/troubleshooting.md.

Attributions

What<br>Source<br>License

Banner artwork in Resources/Themes/<br>busy-app/busybar-firmware assets/shared/animations, © 2024–2026 Flipper FZCO. One frame extracted per animation, images otherwise unmodified.<br>CC-BY-SA-4.0

pISS Stream widget<br>Idea from pISSStream; telemetry from NASA's public ISS Lightstreamer feed

Weather data<br>Open-Meteo<br>CC-BY-4.0

Widget data<br>wheretheiss.at, adsb.fi,...

from busy banner github session themes

Related Articles