Repository navigation
Releases
Releases · Lixeas/NotchWatch
NotchWatch v0.3.1
Fixed
- No app icon —
NotchWatch.app(and the.dmg) shipped with the default generic icon in v0.3.0. The build now rasterizes the brand SVG to every sizeiconutilneeds and packs a real.icnsinto the bundle before signing. brew install404 — the repository was private, so unauthenticated release-asset downloads (whatbrew's cask installer does) always 404'd. The repo is now public.
Notes
- Homebrew 6.0+ requires a one-time
brew trust --cask lixeas/notchwatch/notch-watchbefore the first install of a non-official tap — documented in the README, not new in this release.
NotchWatch v0.3.0
Added
- English / French toggle in Settings — switches every user-facing string app-wide (menu bar, dropdown, Settings, error messages), defaults to English.
- Estimated billing cycle shown below the usage bar in the dropdown — Anthropic's usage API doesn't expose real billing-period dates, so this is a plainly-labeled calendar-month approximation.
- VoiceOver labels on the menu bar item and refresh button — previously the app's core readout had no accessible name at all.
- Motion: usage numbers roll instead of snapping on refresh, the progress bar eases to its new width, dropdown states crossfade. Respects Reduce Motion throughout.
- Custom brand mark (light/dark SVG) replacing the generic
cpuSF Symbol in the dropdown header. - Issue templates (bug report / feature request forms) and a real MIT
LICENSEfile (was referenced by name only before).
Changed
- Menu bar icon redesigned: now shows
<percent>% • $<amount>as colored text instead of a filled progress bar — the percentage itself carries the status color (green / orange / red), no separate fill. - Settings window title now follows the selected language (was hardcoded to French regardless of setting).
- README rewritten to match the current app and installation flow.
Fixed
- Error text contrast (magenta) in dark mode — was under the WCAG AA threshold.
- Manual token field in Settings no longer writes to the Keychain on every keystroke (debounced).
- 401/403 API responses now show an actionable "token invalid or expired" message instead of a raw status code.
- Xcode warning: dead nil-coalescing on a non-optional
DateIntervalFormatterresult.
Known limitations
- The billing cycle range is a calendar-month estimate, not Anthropic's actual billing period — there is no API field for it.
- No custom
.icns/app icon in the build yet — the app and.dmgstill use the default generic icon (the brand SVGs exist but aren't wired into codesign/dmg packaging). - Not notarized (no Apple Developer Program account) — first launch needs a right-click → Open, or
xattr -cr. - No OAuth refresh-token flow: when the Claude Code token expires, re-run
claude loginor paste a fresh token in Settings.
ClaudeNotchBar v0.2.0
Added
- Settings window — paste a manual auth token override (auto-saved as you type, useful when the Claude Code token expires or to avoid repeated Keychain prompts), configurable refresh interval (30s–30min), and a "launch at login" toggle (
SMAppService). - Menu bar icon as a progress pill — shows the consumed amount centered on a color-coded bar (green / orange / red) instead of plain text.
- Gradient credit bar — the popover's consumption bar now blends green → orange → red across the 50%/80% thresholds instead of jumping between flat colors.
- 5h / 7-day rate-limit windows displayed in the popover (previously fetched but unused).
- Host Grotesk typeface and a 3-section popover layout (title / consumption / settings-quit), each following light/dark mode.
- CI:
test.yml(build +swift teston a macOS runner, every push/PR) andrelease.yml(tagvX.Y.Z→ signed.app,.dmg, GitHub Release, Homebrew cask bump).
Fixed
- Keychain token parsing — the access token is nested under
claudeAiOauth.accessTokenin Claude Code's stored credentials, not at the top level; the app never authenticated before this fix. - Menu bar icon showing no color —
MenuBarExtra'slabel:is hosted byNSStatusItem.button, which silently ignores custom Shape fills and font modifiers (confirmed via Apple Developer Forums). The pill is now pre-rendered to anNSImageviaImageRendererinstead of passed as a live SwiftUI view. - "Unable to update Font Descriptor's weight" console warning — chaining
.fontWeight()on a custom static font is unreliable; each weight now references its own.ttfby exact PostScript name. - Settings window not appearing —
.accessoryapps (no Dock icon) never become frontmost automatically;openWindow()now pairs withNSApp.activate(ignoringOtherApps:). - Illegible buttons in dark mode — the title/bottom section backgrounds used a fixed
Color.graythat didn't darken; switched to adaptiveColor.primary.opacity(). - Progress bar losing its color —
ProgressView().tint()wasn't reliably applied in this context; replaced by a custom Shape-based bar (also the fix that enabled the gradient above).
Known limitations
- Not notarized (no Apple Developer Program account) — first launch needs a right-click → Open, or
xattr -cr. - No reset date shown for the monthly credit limit: Anthropic's
/api/oauth/usagedoesn't expose one forextra_usage(confirmed) — only the Admin API (different credential entirely) has billing-cycle data. - No OAuth refresh-token flow: when the Claude Code token expires, re-run
claude loginor paste a fresh token in Settings.