DEV Community

Silas C
Silas C

Posted on

I replaced five browser tabs with a menu bar icon

I used to start every coding session by opening the same five browser tabs. Claude Code usage. Codex quota. OpenRouter balance. A quick check on Postgres. A localhost ping to Redis.

None of these checks took long individually. But stacked together, they were a daily friction tax — five context switches before writing any actual code. Worse, if something had died overnight, I wouldn't know until a build failed or an API call returned a cryptic error.

So I moved all of it into the macOS menu bar.

Before and After

Before: Five tabs, five logins, five dashboards. Each one designed for power users who want graphs and historical data. I just wanted to know: is it running, and how much quota do I have left?

After: One menu bar icon. Click it. Green dots mean services are up. Numbers show remaining quota. Close it. Start coding.

The entire interaction takes about two seconds.

What Gets Monitored

Pulse watches two categories:

Local Services

Anything running on your machine that you depend on during development. The default setup covers common suspects:

  • Database servers (Postgres, MySQL, Redis)
  • Dev servers and build tools
  • Background workers and queue processors

Each service shows a simple up/down status. No metrics, no dashboards. If Postgres crashed at 3am while your laptop was asleep, the red dot is there when you open the lid.

AI Coding Quota

If you use AI coding tools, you've probably been bitten by hitting a rate limit at the worst possible moment. Pulse shows current usage for:

  • Claude Code (Anthropic)
  • Codex (OpenAI)
  • OpenRouter

When you're burning through tokens faster than usual — maybe a long refactoring session or a complex debugging chain — you see it trending before you hit the wall.

Why a Menu Bar App?

I tried other approaches first:

Browser extension — worked, but added to the tab noise I was trying to reduce. Also couldn't monitor local services without a companion process.

Terminal dashboardbtop and friends are great, but they take a terminal pane. For something I glance at 20 times a day, that's too much real estate.

Notification-based — alerts when something goes wrong. But I didn't want alerts. I wanted ambient awareness. There's a difference between "tell me when it breaks" and "let me see the current state whenever I want."

The menu bar hit the sweet spot: always visible, zero screen real estate, instant access.

The Glanceable Design Principle

The hardest design constraint was keeping it glanceable. Every feature request I considered got filtered through one question: can you understand it in under two seconds?

  • Detailed service health metrics? No. Up/down is enough.
  • Historical quota graphs? No. Current number is enough.
  • Configuration UI? Minimal. Edit a config file if you need custom services.

The result is intentionally boring. No charts. No tabs. No settings pages. Just the current state of the things you care about.

Technical Details

  • 15MB binary — native SwiftUI, no Electron runtime
  • ~12MB RAM idle — sits in the menu bar without impact
  • Sub-second startup — feels like part of the OS
  • Polling-based — checks services on a configurable interval (default 30s)
  • Open sourcegithub.com/silas-maven/pulse

One Week In

The change was subtle but real. I stopped context-switching into browser tabs I didn't need. I caught a dead Redis instance before it cascaded into test failures. I noticed I was burning through Claude Code quota faster than usual on a Thursday and adjusted before Friday's session.

None of these are dramatic improvements. But removing small daily frictions compounds. Five tabs, five times a day, five days a week — that's 125 unnecessary context switches I'm no longer making.

If you're on Mac and running local services alongside AI coding tools, give it a look. It might save you the same friction it saved me.

Repo: github.com/silas-maven/pulse

Top comments (0)