<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Silas C</title>
    <description>The latest articles on DEV Community by Silas C (@silas_c).</description>
    <link>https://dev.to/silas_c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3845472%2F5c546b4a-a7f0-4a59-aebf-6803af350827.png</url>
      <title>DEV Community: Silas C</title>
      <link>https://dev.to/silas_c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/silas_c"/>
    <language>en</language>
    <item>
      <title>I stopped checking five dashboards before writing any code</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Thu, 16 Apr 2026 06:11:32 +0000</pubDate>
      <link>https://dev.to/silas_c/i-stopped-checking-five-dashboards-before-writing-any-code-5bo6</link>
      <guid>https://dev.to/silas_c/i-stopped-checking-five-dashboards-before-writing-any-code-5bo6</guid>
      <description>&lt;p&gt;I used to begin every coding session with the same routine: open Claude usage, Codex usage, OpenRouter credits, then check whether my local API and Redis were still alive.&lt;/p&gt;

&lt;p&gt;Each check was tiny. Together they were a constant context-switch tax. And when something crashed overnight, I usually discovered it in the middle of real work, not at the start.&lt;/p&gt;

&lt;p&gt;So I rebuilt the routine around one rule: I should be able to confirm everything in under two seconds.&lt;/p&gt;

&lt;p&gt;That turned into a small menu bar app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem was not missing data
&lt;/h2&gt;

&lt;p&gt;I already had the data. It was just scattered across tabs, terminal commands, and provider dashboards.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;lsof&lt;/code&gt;/&lt;code&gt;ps&lt;/code&gt; for local process checks&lt;/li&gt;
&lt;li&gt;web dashboards for quota checks&lt;/li&gt;
&lt;li&gt;memory for everything in between&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The friction came from stitching those checks together every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in practice
&lt;/h2&gt;

&lt;p&gt;Now I open one menu, glance once, and start coding.&lt;/p&gt;

&lt;p&gt;Pulse shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local service state (up/down)&lt;/li&gt;
&lt;li&gt;quota state for Claude Code, Codex, and OpenRouter&lt;/li&gt;
&lt;li&gt;reset countdowns so surprises are less likely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not try to be a full observability stack. It just answers the first question quickly: am I clear to work?&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture notes
&lt;/h2&gt;

&lt;p&gt;A few implementation choices mattered:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Native SwiftUI app, no Electron&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Startup is instant and memory stays low (typically around 15-25MB).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple health model for services&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Service checks stay lightweight. The goal is signal, not deep metrics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quota polling on a fixed interval&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Enough frequency to stay useful, not so frequent that it becomes noisy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Config-first setup&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Define services/providers once, then reload quickly as the dev stack changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A real week with it
&lt;/h2&gt;

&lt;p&gt;Last week, one worker process died after sleep/wake. I saw it in the menu before running tests, restarted it, and moved on.&lt;/p&gt;

&lt;p&gt;I also noticed quota dropping faster than expected during a refactor day and changed how I used prompts before hitting a hard limit.&lt;/p&gt;

&lt;p&gt;Neither event is dramatic. That is the point. Small failures stopped turning into bigger interruptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for dev flow
&lt;/h2&gt;

&lt;p&gt;Productivity discussions often jump straight to big tooling changes. But a lot of wasted time comes from tiny repeated checks.&lt;/p&gt;

&lt;p&gt;Five checks, several times a day, adds up. Removing that loop has been more useful than I expected.&lt;/p&gt;

&lt;p&gt;If your mornings start with tab-hopping and terminal sanity checks, try collapsing them into one glance. Even if you build your own script or menu utility, the workflow change is worth it.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/silas-maven/pulse" rel="noopener noreferrer"&gt;https://github.com/silas-maven/pulse&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>macos</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I replaced my job search spreadsheet with a simpler CV workflow</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Fri, 10 Apr 2026 23:48:00 +0000</pubDate>
      <link>https://dev.to/silas_c/i-replaced-my-job-search-spreadsheet-with-a-simpler-cv-workflow-14pf</link>
      <guid>https://dev.to/silas_c/i-replaced-my-job-search-spreadsheet-with-a-simpler-cv-workflow-14pf</guid>
      <description>&lt;h1&gt;
  
  
  I replaced my job search spreadsheet with a simpler CV workflow
&lt;/h1&gt;

&lt;p&gt;My spreadsheet worked, until it didn't.&lt;/p&gt;

&lt;p&gt;At the start of my job search, I had one Google Sheet with all the right columns: company, role, date applied, status, notes. It looked organised. I felt organised.&lt;/p&gt;

&lt;p&gt;Then the volume went up.&lt;/p&gt;

&lt;p&gt;More applications meant more CV variants. Backend role? One version. Product-heavy role? Another version. Client-facing role? Different emphasis again. After a few weeks, my spreadsheet had data, but it wasn't trustworthy data.&lt;/p&gt;

&lt;p&gt;I started making mistakes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sending the wrong CV version&lt;/li&gt;
&lt;li&gt;forgetting where I'd already applied&lt;/li&gt;
&lt;li&gt;updating the sheet days later from memory&lt;/li&gt;
&lt;li&gt;scrambling when a recruiter replied and asked questions tied to a version I couldn't find&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was the moment I realised the problem wasn't effort. It was workflow design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the old process broke
&lt;/h2&gt;

&lt;p&gt;The biggest issue was context switching.&lt;/p&gt;

&lt;p&gt;I wrote CVs in one place, tracked applications in another, kept notes in a third, and exported files with random names. Every apply session became a mini detective story.&lt;/p&gt;

&lt;p&gt;Spreadsheets are great when the object you're tracking is stable. My CVs weren't stable. They changed constantly. So the tracker and the documents drifted apart.&lt;/p&gt;

&lt;p&gt;And once trust in your own system drops, everything slows down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule I switched to
&lt;/h2&gt;

&lt;p&gt;I stopped trying to track everything and focused on the minimum that prevents errors.&lt;/p&gt;

&lt;p&gt;Here's the system I now use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One master CV&lt;/strong&gt;&lt;br&gt;
This is the source file. No sending this version directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Three role profiles&lt;/strong&gt;&lt;br&gt;
I keep specific variants for role families I actually apply to. Not ten variants. Three.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Every export gets a deterministic name&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Role_Company_Date.pdf&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Track only decision-critical fields&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;company&lt;/li&gt;
&lt;li&gt;role&lt;/li&gt;
&lt;li&gt;date applied&lt;/li&gt;
&lt;li&gt;CV version sent&lt;/li&gt;
&lt;li&gt;next action date&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;No giant dashboard. No 25 columns. No illusion of perfect analytics. Just enough structure to avoid avoidable mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this helped more than 'working harder'
&lt;/h2&gt;

&lt;p&gt;Before, I'd spend energy remembering.&lt;/p&gt;

&lt;p&gt;Now, I spend energy applying better.&lt;/p&gt;

&lt;p&gt;That's the shift.&lt;/p&gt;

&lt;p&gt;When a recruiter replies, I know exactly what they saw. When I follow up, I know when and why. When I tailor another application, I start from the right base version immediately.&lt;/p&gt;

&lt;p&gt;The process feels calmer because I removed hidden decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on tools
&lt;/h2&gt;

&lt;p&gt;I tried a few popular CV tools during this period. Some were polished, but a lot of the friction moved to the end: export limits, paywalls at download, or awkward multi-version handling.&lt;/p&gt;

&lt;p&gt;I wanted something that stayed simple for this exact workflow, so I built my own local-first setup around these rules.&lt;/p&gt;

&lt;p&gt;The tool matters less than the system, though. If you already have a stack you like, keep it. Just make sure version tracking is a first-class part of it, not an afterthought.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're in the messy middle of job searching
&lt;/h2&gt;

&lt;p&gt;Try this for one week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce your CV variants to the smallest useful set&lt;/li&gt;
&lt;li&gt;Name exports consistently&lt;/li&gt;
&lt;li&gt;Log version-sent and next-action every single time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll feel the difference quickly.&lt;/p&gt;

&lt;p&gt;The job market is hard enough. Your process should remove stress, not create it.&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I built a 15MB SwiftUI menu bar app instead of reaching for Electron</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Thu, 09 Apr 2026 23:47:59 +0000</pubDate>
      <link>https://dev.to/silas_c/why-i-built-a-15mb-swiftui-menu-bar-app-instead-of-reaching-for-electron-1boe</link>
      <guid>https://dev.to/silas_c/why-i-built-a-15mb-swiftui-menu-bar-app-instead-of-reaching-for-electron-1boe</guid>
      <description>&lt;p&gt;Every developer dashboard I've used is either a browser tab I forget about or an Electron app that eats 200MB of RAM to show me three numbers.&lt;/p&gt;

&lt;p&gt;I wanted something different. Something that sits quietly in the menu bar, shows me what I need, and gets out of the way. So I built Pulse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;My daily workflow involves juggling multiple AI coding tools — Claude Code, Codex, OpenRouter — each with their own usage dashboard in a separate browser tab. On top of that, I run several local services (Postgres, Redis, a couple of dev servers) that occasionally die without telling anyone.&lt;/p&gt;

&lt;p&gt;The checking ritual looked like this every morning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Claude Code dashboard — check remaining quota&lt;/li&gt;
&lt;li&gt;Open Codex usage page — check remaining quota&lt;/li&gt;
&lt;li&gt;Open OpenRouter balance — check remaining credits&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;ps aux | grep postgres&lt;/code&gt; — is it alive?&lt;/li&gt;
&lt;li&gt;Hit localhost:6379 — is Redis responding?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Five context switches before I've written a single line of code. And if something died overnight, I'd only find out when a build failed or an API call timed out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Electron?
&lt;/h2&gt;

&lt;p&gt;The obvious path would have been Electron. Faster to ship, cross-platform out of the box, massive ecosystem. I've built Electron apps before and the DX is genuinely good.&lt;/p&gt;

&lt;p&gt;But this app lives in the menu bar. It runs all day, every day. For something with that kind of residency, the numbers matter:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Electron&lt;/th&gt;
&lt;th&gt;SwiftUI (Pulse)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;~150-200MB&lt;/td&gt;
&lt;td&gt;15MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idle RAM&lt;/td&gt;
&lt;td&gt;~80-120MB&lt;/td&gt;
&lt;td&gt;~12MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup time&lt;/td&gt;
&lt;td&gt;2-4 seconds&lt;/td&gt;
&lt;td&gt;&amp;lt; 1 second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native notifications&lt;/td&gt;
&lt;td&gt;Via bridge&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark mode&lt;/td&gt;
&lt;td&gt;CSS hacks&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Menu bar integration&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;First-class&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a full application with complex UI, Electron makes sense. For a status glance that should feel like part of the OS, native wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Pulse Actually Does
&lt;/h2&gt;

&lt;p&gt;Click the menu bar icon and you see two things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service status&lt;/strong&gt; — green/red indicators for each local service Pulse monitors. If Postgres went down at 3am, you see it immediately when you open your laptop. No more discovering dead services through cascading errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI quota&lt;/strong&gt; — current usage across Claude Code, Codex, and OpenRouter in one view. When you're burning through tokens faster than usual, you catch it early instead of hitting a rate limit mid-session.&lt;/p&gt;

&lt;p&gt;That's it. No charts, no historical data, no analytics dashboard. Just the current state of things you need running.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tradeoffs
&lt;/h2&gt;

&lt;p&gt;Honesty time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mac-only.&lt;/strong&gt; No cross-platform story. If you're on Linux or Windows, this doesn't help you. For a menu bar utility, I think that's the right call — menu bar apps are a Mac pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SwiftUI is still maturing.&lt;/strong&gt; Some things that would take 5 minutes in React took an hour of fighting with SwiftUI's layout system. The ecosystem is smaller and Stack Overflow has fewer answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No web technologies.&lt;/strong&gt; Can't just npm install a charting library. Everything is built with native frameworks, which means more upfront work for each new feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polling, not pushing.&lt;/strong&gt; Pulse checks service status on an interval rather than receiving push notifications. Good enough for the use case, but not real-time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would I make the same choice again? Yes. The result feels right — fast, small, quiet. The kind of utility that disappears into your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building a small native app after years of web development was humbling. Things I took for granted (hot reload, flexbox, npm) weren't there. But the constraints forced better decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer dependencies meant fewer things to break&lt;/li&gt;
&lt;li&gt;Native APIs meant less glue code&lt;/li&gt;
&lt;li&gt;Small binary meant fast iteration on the actual product&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're considering building a small Mac utility, SwiftUI is worth the learning curve. The menu bar API is straightforward, the app lifecycle is simple, and the result feels like it belongs on the platform.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/silas-maven/pulse" rel="noopener noreferrer"&gt;github.com/silas-maven/pulse&lt;/a&gt;&lt;/p&gt;

</description>
      <category>macos</category>
      <category>swift</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Replaced My Job Application Spreadsheet With a Privacy-First Tracker</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Thu, 09 Apr 2026 22:51:26 +0000</pubDate>
      <link>https://dev.to/silas_c/i-replaced-my-job-application-spreadsheet-with-a-privacy-first-tracker-42mj</link>
      <guid>https://dev.to/silas_c/i-replaced-my-job-application-spreadsheet-with-a-privacy-first-tracker-42mj</guid>
      <description>&lt;h1&gt;
  
  
  I Replaced My Job Application Spreadsheet With a Privacy-First Tracker
&lt;/h1&gt;

&lt;p&gt;Like most job seekers, I started with a Google Sheet. Columns for company, role, date applied, status, notes. It worked for the first 10 applications.&lt;/p&gt;

&lt;p&gt;By application 30, the spreadsheet was chaos. Outdated statuses, missing links, duplicate entries. I'd open it, feel overwhelmed, and close it without updating anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Existing Tools
&lt;/h2&gt;

&lt;p&gt;I tried Huntr, Teal, and a few others. They all had the same issue: they wanted my CV uploaded to their servers, parsed by their AI, stored in their databases. As someone who builds software, I know what happens to that data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built Instead
&lt;/h2&gt;

&lt;p&gt;Dossier takes a different approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local-first storage&lt;/strong&gt; — your data stays on your device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PII sanitisation&lt;/strong&gt; — before any AI processing, personal details are stripped&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart matching&lt;/strong&gt; — AI-powered job-CV matching without exposing your identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple tracking&lt;/strong&gt; — applied, interviewing, offered, rejected. That's it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Technical Bits
&lt;/h2&gt;

&lt;p&gt;The PII sanitisation layer uses named entity recognition to identify and mask personal information before it reaches the matching engine. Your name, address, phone number never leave your device.&lt;/p&gt;

&lt;p&gt;The matching itself runs against the sanitised version of your CV, comparing skills, experience patterns, and role requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Early Results
&lt;/h2&gt;

&lt;p&gt;I've been using it for my own job search for 2 weeks. The biggest win isn't the AI matching — it's just having a clean, simple view of where I stand. No spreadsheet anxiety.&lt;/p&gt;

&lt;p&gt;Would love feedback from other developers who are job hunting. What would you want from a tool like this?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Dossier is open source and free. &lt;a href="https://github.com/example/dossier" rel="noopener noreferrer"&gt;Check it out on GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jobsearch</category>
      <category>privacy</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I replaced five browser tabs with a menu bar icon</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Fri, 27 Mar 2026 05:47:36 +0000</pubDate>
      <link>https://dev.to/silas_c/i-replaced-five-browser-tabs-with-a-menu-bar-icon-50if</link>
      <guid>https://dev.to/silas_c/i-replaced-five-browser-tabs-with-a-menu-bar-icon-50if</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;So I moved all of it into the macOS menu bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and After
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; 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?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; One menu bar icon. Click it. Green dots mean services are up. Numbers show remaining quota. Close it. Start coding.&lt;/p&gt;

&lt;p&gt;The entire interaction takes about two seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Gets Monitored
&lt;/h2&gt;

&lt;p&gt;Pulse watches two categories:&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Services
&lt;/h3&gt;

&lt;p&gt;Anything running on your machine that you depend on during development. The default setup covers common suspects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database servers (Postgres, MySQL, Redis)&lt;/li&gt;
&lt;li&gt;Dev servers and build tools&lt;/li&gt;
&lt;li&gt;Background workers and queue processors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Coding Quota
&lt;/h3&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code (Anthropic)&lt;/li&gt;
&lt;li&gt;Codex (OpenAI)&lt;/li&gt;
&lt;li&gt;OpenRouter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Menu Bar App?
&lt;/h2&gt;

&lt;p&gt;I tried other approaches first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser extension&lt;/strong&gt; — worked, but added to the tab noise I was trying to reduce. Also couldn't monitor local services without a companion process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal dashboard&lt;/strong&gt; — &lt;code&gt;btop&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notification-based&lt;/strong&gt; — 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."&lt;/p&gt;

&lt;p&gt;The menu bar hit the sweet spot: always visible, zero screen real estate, instant access.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Glanceable Design Principle
&lt;/h2&gt;

&lt;p&gt;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?&lt;/p&gt;

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

&lt;p&gt;The result is intentionally boring. No charts. No tabs. No settings pages. Just the current state of the things you care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;15MB binary&lt;/strong&gt; — native SwiftUI, no Electron runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~12MB RAM&lt;/strong&gt; idle — sits in the menu bar without impact&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-second startup&lt;/strong&gt; — feels like part of the OS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polling-based&lt;/strong&gt; — checks services on a configurable interval (default 30s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source&lt;/strong&gt; — &lt;a href="https://github.com/silas-maven/pulse" rel="noopener noreferrer"&gt;github.com/silas-maven/pulse&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One Week In
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/silas-maven/pulse" rel="noopener noreferrer"&gt;github.com/silas-maven/pulse&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devtools</category>
      <category>macos</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
