<?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 replaced dashboard-tab checking with a menu bar glance for AI coding workflows</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Fri, 01 May 2026 02:29:35 +0000</pubDate>
      <link>https://dev.to/silas_c/i-replaced-dashboard-tab-checking-with-a-menu-bar-glance-for-ai-coding-workflows-2jcp</link>
      <guid>https://dev.to/silas_c/i-replaced-dashboard-tab-checking-with-a-menu-bar-glance-for-ai-coding-workflows-2jcp</guid>
      <description>&lt;p&gt;When I am deep in a coding session, context switching is expensive.&lt;/p&gt;

&lt;p&gt;I kept bouncing between provider dashboards and terminal checks just to answer basic operational questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are my local services still running?&lt;/li&gt;
&lt;li&gt;How close am I to quota limits?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That loop sounds small, but repeated enough times it kills flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem I wanted to remove
&lt;/h2&gt;

&lt;p&gt;Most tooling gives you information, but not at the point where you need it. For me, the point of need is the menu bar, not another browser tab.&lt;/p&gt;

&lt;p&gt;Terminal checks are great, but they are reactive. I only run them after something feels broken.&lt;/p&gt;

&lt;p&gt;Dashboard pages are detailed, but they are also heavy. They pull me out of implementation mode and into monitoring mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built instead
&lt;/h2&gt;

&lt;p&gt;I built Pulse as a native macOS menu bar utility that does one thing well: give me immediate visibility into local service health and AI quota state.&lt;/p&gt;

&lt;p&gt;The design goals were strict:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep it native and lightweight (SwiftUI, no Electron)&lt;/li&gt;
&lt;li&gt;Keep interaction latency low&lt;/li&gt;
&lt;li&gt;Keep the surface area small&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a tool needs a manual to explain itself, it is already too much for this job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why native mattered here
&lt;/h2&gt;

&lt;p&gt;A lot of dev utilities become mini platforms over time. That can be useful, but this one is intentionally narrower.&lt;/p&gt;

&lt;p&gt;Native gave me a few practical wins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better memory behavior for always-on usage&lt;/li&gt;
&lt;li&gt;Faster startup and interaction&lt;/li&gt;
&lt;li&gt;Cleaner fit with macOS menu bar ergonomics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tradeoff: macOS-only scope for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow change: before vs after
&lt;/h2&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open provider dashboard&lt;/li&gt;
&lt;li&gt;Check usage&lt;/li&gt;
&lt;li&gt;Switch back&lt;/li&gt;
&lt;li&gt;Notice an endpoint failed later&lt;/li&gt;
&lt;li&gt;Open terminal and inspect process/port&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Glance at menu bar state&lt;/li&gt;
&lt;li&gt;If red, restart or inspect immediately&lt;/li&gt;
&lt;li&gt;Keep coding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a dramatic productivity story. It is a friction-removal story.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Visibility beats volume of metrics.&lt;/strong&gt; A few high-signal indicators are better than a crowded panel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status language matters.&lt;/strong&gt; “Probably fine” UI states are useless; explicit states are better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small reliability tweaks compound.&lt;/strong&gt; Better refresh cadence and clearer state transitions reduce false alarms.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I would improve next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More provider-specific quota normalization&lt;/li&gt;
&lt;li&gt;Better handling for edge states (partial auth, stale refresh)&lt;/li&gt;
&lt;li&gt;Optional historical trend view without turning it into a dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you are building similar tooling
&lt;/h2&gt;

&lt;p&gt;Start from the context-switch you hate most.&lt;/p&gt;

&lt;p&gt;Then remove exactly that, with the smallest possible interface.&lt;/p&gt;

&lt;p&gt;For me, that was replacing scattered checks with one menu bar glance.&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>macos</category>
      <category>swift</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to manage CV variants without spreadsheet drift (manual tailoring burnout)</title>
      <dc:creator>Silas C</dc:creator>
      <pubDate>Fri, 24 Apr 2026 15:21:10 +0000</pubDate>
      <link>https://dev.to/silas_c/how-to-manage-cv-variants-without-spreadsheet-drift-manual-tailoring-burnout-35h4</link>
      <guid>https://dev.to/silas_c/how-to-manage-cv-variants-without-spreadsheet-drift-manual-tailoring-burnout-35h4</guid>
      <description>&lt;h1&gt;
  
  
  How to manage CV variants without spreadsheet drift (manual tailoring burnout)
&lt;/h1&gt;

&lt;p&gt;Publish a practical dev.to guide: how to manage multiple CV versions without spreadsheet drift. Include naming convention, role buckets, and quick QA checks before apply.&lt;/p&gt;

&lt;p&gt;If your job search has more tabs than interviews, this is for you. I wanted a workflow that stays simple under pressure and still gives useful feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Most people run into three issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Too many CV versions&lt;/li&gt;
&lt;li&gt;No record of which version was sent&lt;/li&gt;
&lt;li&gt;No weekly loop to improve outcomes&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The minimal system
&lt;/h2&gt;

&lt;p&gt;Use one master CV and 2-3 variants by role family.&lt;/p&gt;

&lt;h3&gt;
  
  
  File naming
&lt;/h3&gt;

&lt;p&gt;Use deterministic names:&lt;br&gt;
&lt;code&gt;Role_Company_Date.pdf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This prevents duplicate applications and gives you instant history.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to tailor
&lt;/h3&gt;

&lt;p&gt;Do not rewrite the full CV each time. Tailor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summary (2-3 lines)&lt;/li&gt;
&lt;li&gt;First 3 impact bullets&lt;/li&gt;
&lt;li&gt;Skills ordering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep everything else stable unless your weekly data says it is broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  A weekly feedback loop
&lt;/h2&gt;

&lt;p&gt;Every week, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;applications sent per role family&lt;/li&gt;
&lt;li&gt;response rate per role family&lt;/li&gt;
&lt;li&gt;interview conversion by CV variant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If one variant underperforms for 10-15 applications, adjust language before increasing volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  ATS score, used correctly
&lt;/h2&gt;

&lt;p&gt;Treat score as a hint, not a verdict. The practical order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure clear structure&lt;/li&gt;
&lt;li&gt;Match role language naturally&lt;/li&gt;
&lt;li&gt;Add proof in bullets (numbers, scope, outcomes)&lt;/li&gt;
&lt;li&gt;Then check tooling output&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example change
&lt;/h2&gt;

&lt;p&gt;Before:&lt;br&gt;
"Worked on reporting dashboard."&lt;/p&gt;

&lt;p&gt;After:&lt;br&gt;
"Built reporting workflow used by 4 teams, reducing weekly manual analysis time by 35%."&lt;/p&gt;

&lt;p&gt;Same task, better signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common failure modes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Creating a new CV from scratch for every application&lt;/li&gt;
&lt;li&gt;Tracking applications from memory&lt;/li&gt;
&lt;li&gt;Mixing unrelated role families in one variant&lt;/li&gt;
&lt;li&gt;Overfitting to one score tool&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical template
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Master CV&lt;/li&gt;
&lt;li&gt;Variant A (backend)&lt;/li&gt;
&lt;li&gt;Variant B (product)&lt;/li&gt;
&lt;li&gt;Variant C (ops/client-facing)&lt;/li&gt;
&lt;li&gt;Application log (company, role, date, variant, next action)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final note
&lt;/h2&gt;

&lt;p&gt;You do not need more hustle. You need a stable process you can run when stressed.&lt;/p&gt;

&lt;p&gt;A boring system beats a heroic one every single week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extra implementation notes
&lt;/h2&gt;

&lt;p&gt;When you review outcomes, change one variable at a time. If you change summary, bullets, and skills together, you lose causality and cannot learn what worked. Preserve a changelog with date and reason for each adjustment. Over a month, this creates a reliable map of what your market responds to.&lt;/p&gt;

&lt;p&gt;Also, keep your role buckets tight. If you apply to backend, data, and PM roles with one variant, your language signal gets muddy. Three clean buckets usually outperform one broad CV.&lt;/p&gt;

</description>
      <category>devto</category>
      <category>resume</category>
      <category>jobsearch</category>
      <category>productivity</category>
    </item>
    <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>
