DEV Community

Nic Luther
Nic Luther

Posted on

How I Handle 200+ GitHub Notifications Without Losing My Mind

How I Handle 200+ GitHub Notifications Without Losing My Mind

Last Tuesday, I had 247 unread GitHub notifications. By Wednesday afternoon, I'd missed a critical PR review that blocked my team for 6 hours. By Thursday, I'd decided enough was enough.

If you're a developer working on multiple repos, you know the pain: GitHub notifications pile up faster than you can triage them. Mix in Slack pings, email threads, and calendar alerts, and you're spending 2+ hours a day just staying on top of communication.

Here's how I went from drowning in notifications to processing 200+ GitHub items in under 30 minutes a day — and why I eventually built a unified inbox to solve this permanently.

The Problem: Death by Context Switching

My old workflow looked like this:

Morning routine (90 minutes):

  • Open Mail.app → check email (15 min)
  • Open Slack → respond to DMs, scan channels (25 min)
  • Open GitHub notifications page → triage issues/PRs (35 min)
  • Check calendar in yet another app (5 min)
  • Realize I missed a Slack thread → back to Slack (10 min)

Result: By 10 AM, I'd already context-switched 12+ times and hadn't written a single line of code.

The real killer wasn't the volume of notifications — it was the cognitive overhead of switching between 3-4 apps just to understand what needed my attention.

What I Tried First

Attempt 1: GitHub email notifications

GitHub lets you receive all notifications via email. Sounds great, right?

Reality: My inbox became a graveyard of [user/repo] Issue #1234 emails. Threading broke constantly. Finding the original context meant opening GitHub anyway. Abandoned after 2 weeks.

Attempt 2: Slack integrations

Connected GitHub to Slack via webhooks. Every PR, issue comment, and mention posted to a #github channel.

Reality: The channel moved so fast I started muting it. Then I missed important mentions. Plus, I still had to check actual GitHub for the full thread. Abandoned after 1 week.

Attempt 3: Browser tabs + notifications

Kept GitHub, Slack, and Gmail pinned in Chrome tabs. Enabled desktop notifications for everything.

Reality: Notification fatigue set in. I started ignoring all notifications because most were noise. Battery life tanked (Chrome + Slack Desktop = 2-3 hours). Gave up after 3 weeks.

The Breaking Point

The moment I knew I needed a real solution: I got pinged in Slack about a PR that was blocking a deploy. The PR had been ready for review for 6 hours, but it was buried under 40 other GitHub notifications I hadn't triaged yet.

I'd spent the morning bouncing between email, Slack, and GitHub, yet somehow missed the most important thing.

That's when I realized: the problem wasn't the tools. It was the fragmentation.

What Actually Works: The Unified Inbox Approach

I started sketching out what a solution would look like:

Core principle: One window, one chronological feed, smart filtering.

Key features needed:

  1. Pull GitHub notifications, Slack DMs, and email into a single stream — no more app-hopping
  2. Filter by priority — separate "needs review" from "FYI"
  3. Preserve context — show the full thread without opening a browser
  4. Native Mac app — no Electron memory hog (looking at you, Slack Desktop)
  5. Privacy-first — all data stays on my machine

Why I Built It in SwiftUI

I tried Electron first. It worked, but:

  • Memory usage: 1.2 GB for a basic prototype
  • Battery drain: 30-40% per day just running in the background
  • Startup time: 3-4 seconds cold launch

Switched to SwiftUI (native macOS):

  • Memory usage: 50 MB (24x improvement)
  • Battery drain: negligible (macOS optimizations for native apps)
  • Startup time: instant (app icon bounce = ready)

For a tool I'd use 10+ hours a day, performance mattered.

The Technical Stack

Here's how I approached the GitHub notifications problem specifically:

GitHub API integration:

// Fetch all unread notifications
let notifications = try await github.notifications.list(all: false)

// Filter by reason (review_requested, mention, etc.)
let prioritized = notifications.filter {
    ["review_requested", "mention", "assign"].contains($0.reason)
}

// Group by repo for easy triage
let grouped = Dictionary(grouping: prioritized) { $0.repository.name }
Enter fullscreen mode Exit fullscreen mode

Smart filtering rules:

  • Priority 1: PRs I'm requested to review, direct @mentions
  • Priority 2: Issues I'm assigned to, team mentions
  • Priority 3: Thread subscriptions, repo watching

Key insight: GitHub's API exposes a reason field that tells you why you got the notification. Most third-party tools ignore this. Using it to auto-prioritize cut my triage time by 60%.

The Result

My current workflow (30 minutes):

  1. Open one app in the morning
  2. See GitHub PRs needing review, Slack DMs, and urgent emails in one unified feed
  3. Filter by "needs action" vs "FYI"
  4. Process high-priority items first
  5. Archive or snooze the rest

Time saved: 60 minutes/day = 5 hours/week = 20 hours/month.

The On-Device Privacy Win

One requirement I refused to compromise on: no cloud server processing my data.

Most "unified inbox" tools (Shift, Wavebox, etc.) are just Chromium wrappers that load the web UIs. They don't actually unify anything — you're still using Gmail's web UI, Slack's web UI, GitHub's web UI in separate tabs.

My approach:

  • GitHub: Pull notifications via API, store locally in SQLite
  • Slack: Use Slack API, decrypt messages on-device
  • Email: IMAP connection, emails stored locally

Why this matters: My GitHub repos include proprietary code. Slack has customer conversations. Email has contracts. I'm not sending that to a third-party server just to get a unified feed.

What I'd Do Differently

If I were starting over:

  1. Start with MVP filtering logic — I spent 2 weeks on UI polish before nailing the smart filters. Should've been reversed.
  2. Test with 1000+ notifications immediately — My initial prototype choked on large volumes. Real-world testing would've caught this.
  3. Add keyboard shortcuts from day 1 — Power users (me) live in shortcuts. I bolted them on later; should've been core UX.

Should You Build Your Own?

Build it if:

  • You're drowning in cross-app notifications daily
  • You care about data privacy (no cloud processing)
  • You want native performance (not Electron)
  • You enjoy solving your own problems with code

Don't build it if:

  • You're fine with browser tabs + discipline
  • You don't mind Electron memory usage
  • You need Windows/Linux support (SwiftUI = macOS only)

For me, this was a no-brainer. I'm a Mac developer who spends 10 hours/day in communication tools. Building a native unified inbox paid for itself in saved time within 2 weeks.

The Launch

I'm opening up early access on March 18, 2026 (7 days from now). If you're curious how it compares to Shift, Wavebox, or Rambox, I wrote up a detailed comparison here: heyrobyn.ai/compare

50% off for the first 50 signups. I built this to solve my own problem — if it helps you too, that's a win.


TL;DR:

  • GitHub notifications + Slack + email = 2 hours/day lost to context switching
  • Tried email routing, Slack integrations, browser tabs — all failed
  • Built a native macOS unified inbox in SwiftUI (50 MB RAM vs 1.2 GB Electron)
  • Used GitHub API's reason field to auto-prioritize notifications
  • All data stays on-device (no cloud server)
  • Cut triage time from 90 min → 30 min/day

If you're handling 100+ GitHub notifications weekly, this might resonate. If not, stick with your current setup — no shame in browser tabs if they work for you.

What's your notification triage workflow? Would love to hear what's working (or not working) for you.

Top comments (0)