Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
5f841fe
Bump version to 1.0.3
jonmartin721 Mar 14, 2026
668fa77
style: replace Zinc design tokens with Stone palette in popup CSS
jonmartin721 Mar 15, 2026
b74cb53
style: restyle header stats to inline row with dot separator
jonmartin721 Mar 15, 2026
ca85a85
style: update filter tabs to filled-pill active state
jonmartin721 Mar 15, 2026
dc317b4
style: convert repo groups to bordered card containers
jonmartin721 Mar 15, 2026
f319876
style: replace colored activity badges with zinc dot-pill badges
jonmartin721 Mar 15, 2026
fcfdc6d
style: change list header background from muted to background
jonmartin721 Mar 15, 2026
423c018
style: replace icons.js with Lucide stroke-based icons
jonmartin721 Mar 15, 2026
b12cad5
style: replace popup.html inline SVGs with Lucide icons
jonmartin721 Mar 15, 2026
e944067
style: replace dom-optimizer inline SVGs with Lucide icons
jonmartin721 Mar 15, 2026
d183fc0
style: replace onboarding inline SVGs with Lucide icons
jonmartin721 Mar 15, 2026
8123046
style: replace activity-controller warning icon with Lucide
jonmartin721 Mar 15, 2026
370185c
style: polish onboarding CSS for Stone theme
jonmartin721 Mar 15, 2026
6c8c5e2
fix: address code review findings from icon/theme migration
jonmartin721 Mar 15, 2026
9e4ba89
style: add Inter font import, redesign onboarding for shadcn Stone
jonmartin721 Mar 15, 2026
c176bb4
style: modernize onboarding with borderless cards, bigger type, hover…
jonmartin721 Mar 15, 2026
a104752
style: fix onboarding layout — no scroll, vertically centered, tighter
jonmartin721 Mar 15, 2026
74b74c7
style: fix dark mode contrast + add OAuth client ID + tighten token step
jonmartin721 Mar 15, 2026
d6007b2
feat: add shared themes.css with 6 color theme token sets
jonmartin721 Apr 5, 2026
c5706f1
feat: link shared themes.css from popup and options HTML
jonmartin721 Apr 5, 2026
27645ed
refactor: remove inline theme tokens from CSS, use shared themes.css …
jonmartin721 Apr 5, 2026
2d1bca2
feat: add applyColorTheme utility function
jonmartin721 Apr 5, 2026
304c966
feat: add color theme swatch picker to options page appearance section
jonmartin721 Apr 5, 2026
774a474
feat: wire up color theme selection, storage, and load in options page
jonmartin721 Apr 5, 2026
50c18bc
feat: load and apply color theme on popup init
jonmartin721 Apr 5, 2026
77badf2
test: add applyColorTheme unit tests
jonmartin721 Apr 5, 2026
563b79e
fix: replace hardcoded Terminal Ledger colors with CSS variables
jonmartin721 Apr 5, 2026
f932518
fix: move CSS alias variables from :root to body for correct theme re…
jonmartin721 Apr 6, 2026
8fa34be
fix: use default OAuth client ID when no storage override exists
jonmartin721 Apr 7, 2026
92a5c69
feat: copy device code to clipboard when GitHub auth flow starts
jonmartin721 Apr 7, 2026
a30d7f2
refactor: replace bare setInterval with proper snoozed repos refresh
jonmartin721 Apr 7, 2026
2439453
refactor: extract loadAndApplyThemes from nested promise callbacks
jonmartin721 Apr 7, 2026
44a6d3b
polish: tighten onboarding copy and button labels
jonmartin721 Apr 7, 2026
954e428
fix: unskip import success test, use advanceTimersByTimeAsync
jonmartin721 Apr 7, 2026
78c6ee5
fix: evict stale cache entries before each activity list render
jonmartin721 Apr 7, 2026
cb39f98
chore: update jsconfig to ES2020 modules with bundler resolution
jonmartin721 Apr 7, 2026
899a29f
fix: add Google Fonts to manifest CSP for Inter font
jonmartin721 Apr 7, 2026
c5709fe
refactor: centralize feed and settings helpers
jonmartin721 Apr 14, 2026
fc29382
test: cover extracted feed and popup flows
jonmartin721 Apr 14, 2026
1fc2878
docs: refresh README for current setup flow
jonmartin721 Apr 14, 2026
1417c70
chore: ignore legacy planning and mockup artifacts
jonmartin721 Apr 14, 2026
2722682
Fix partial settings updates
jonmartin721 Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,12 @@ WINDSURF.md
.gemini/
.windsurf/
.continue/

# Legacy local design / planning artifacts
.superpowers/
docs/superpowers/
icon-concepts.html
*-450.png
v2-*.png
onboarding-*.png
current-page.png
50 changes: 36 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

Monitor pull requests, issues, and releases across multiple GitHub repositories from a Chrome extension. It keeps a local activity feed, badge counts, and optional browser notifications without adding another hosted service to the workflow.

Best for people who follow several repos and want one local review queue instead of GitHub email noise, browser-tab sprawl, or constantly checking each repository by hand.

[![Chrome Web Store](https://img.shields.io/badge/Chrome-Web_Store-green?logo=google-chrome)](https://chromewebstore.google.com/detail/github-devwatch/dbgjgcaphfcfgppicmbiafcgcabikjch)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![CI](https://github.com/jonmartin721/devwatch-github/workflows/CI/badge.svg)](https://github.com/jonmartin721/devwatch-github/actions)
Expand All @@ -11,16 +13,25 @@ Monitor pull requests, issues, and releases across multiple GitHub repositories

- **Guided Setup** - Built-in GitHub sign-in flow and repository selection
- **Browser Notifications** - Get notified about new PRs, issues, and releases
- **Multi-Repo Monitoring** - Watch up to 50 repositories from one interface
- **Multi-Repo Monitoring** - Watch up to 50 repositories by default, with an advanced option to go beyond that
- **Configurable Updates** - Check every 5, 15, 30, or 60 minutes
- **Activity Filtering** - Search and filter by repo and activity type
- **Repo Controls** - Pin favorites, mute noisy repos, or snooze them temporarily
- **Flexible Repo Input** - Add repos with `owner/repo`, a GitHub URL, or an npm package name
- **Badge Counts** - Unread count on the extension icon
- **Direct API Access** - Talks to GitHub directly, with optional npm registry lookups only when you use package-name import

<div align="center">
<img src="screenshots/full-tagline.png" alt="GitHub Devwatch - Track your repositories" width="800">
</div>

## Requirements

- Chrome or another Chromium-based browser that supports Manifest V3 extensions
- A GitHub account to connect during setup
- No separate hosted DevWatch account or backend service
- GitHub sign-in lasts for the current browser session and is cleared when that session ends

## Installation

### From Chrome Web Store (Recommended)
Expand All @@ -30,14 +41,15 @@ Monitor pull requests, issues, and releases across multiple GitHub repositories
3. Grant permissions when prompted
4. Follow the guided setup wizard on first launch

**GitHub Sign-In Permissions**: DevWatch uses GitHub OAuth device flow and requests `repo` plus `read:user` so it can monitor private repositories and show the connected account in the UI.
**GitHub Sign-In Permissions**: DevWatch uses GitHub OAuth device flow and requests `repo` plus `read:user` so it can monitor private repositories and show the connected account in the UI. The current build uses one sign-in path for both public and private monitoring, so there is not a separate public-only permission mode yet.

### Manual Installation (For Development)

1. Clone this repository
```bash
git clone https://github.com/jonmartin721/devwatch-github.git
cd devwatch-github
npm install
```

2. Load the extension in Chrome:
Expand Down Expand Up @@ -66,15 +78,28 @@ The built-in setup flow walks you through:
- Click the extension icon to view your activity feed
- Get browser notifications for new activity
- Badge count shows unread items at a glance
- Use the archive to revisit read items or clear them when you're done
- Pin, mute, or snooze repositories to control noisy feeds
- Manage repositories and preferences anytime in Settings

## How to Use

### Popup Interface
Filter by type (All/PRs/Issues/Releases), search activities, refresh manually, or browse the archive. Click any item to open in GitHub.
The popup is the main day-to-day view:
- Filter by type (All/PRs/Issues/Releases)
- Search across activity in watched repositories
- Refresh manually, browse the archive, and open any item in GitHub
- Pin favorite repositories or snooze noisy ones to keep the feed focused

<div align="center">
<img src="screenshots/popup-interface.png" alt="Popup activity feed showing repository updates" width="500">
</div>

### Settings Page
Manage your GitHub connection, watched repositories, activity filters, check interval, notifications, and theme. Export/import settings for backup.
Settings are split into a few practical jobs:
- Connect GitHub, add repositories manually, or import them from your account
- Tune filters, notifications, refresh interval, snooze behavior, and item expiry
- Change theme/color theme, export or import settings, and enable advanced repo-limit options

<div align="center">
<img src="screenshots/settings-page.png" alt="Settings page for configuring repositories" width="600">
Expand All @@ -84,12 +109,9 @@ Manage your GitHub connection, watched repositories, activity filters, check int

Here's what using the extension looks like day-to-day:

1. You're working and get a notification: "2 new activities in your-org/api-server"
2. Click the extension icon to see the feed
3. See "Pull Request #145: Add OAuth2 authentication" (3 minutes ago)
4. Click the item to open it in GitHub
5. Review and comment on the PR
6. When you return to the extension, it's marked as read
1. A browser notification or badge count lets you know there is new activity.
2. Open the popup to scan updates across your watched repositories in one place.
3. Open the item in GitHub when you want to review it, and let DevWatch keep the rest of the queue visible locally.

The extension keeps up to 2000 items in your local history, so you can always check something you saw earlier. Badge count updates automatically as you read items.

Expand All @@ -101,9 +123,9 @@ That said, this project has not gone through a formal accessibility audit or doc

## Privacy & Security Notes

The extension talks directly to GitHub's API and does not use a separate analytics or sync backend. It stores settings and cached activity in Chrome extension storage, and the current build encrypts the GitHub auth session before persisting it locally while keeping a decrypted session copy available at runtime.
The extension talks directly to GitHub's API and does not use a separate analytics or sync backend. It stores settings and cached activity in Chrome extension storage, while the current GitHub auth session stays in Chrome session storage so it is not persisted to disk. Legacy encrypted auth data from older builds is cleared when accessed.

- **Direct network access** - Requests go to `api.github.com`, plus `registry.npmjs.org` only when you use package-name lookup
- **Direct network access** - Requests go to `api.github.com` for activity checks, `github.com` for OAuth device-flow sign-in, and `registry.npmjs.org` only when you use package-name lookup
- **Scoped browser permissions** - The manifest asks for `storage`, `alarms`, and `notifications`
- **Defensive client code** - The codebase includes URL validation, content security policy rules, and sanitization tests
- **No formal audit claim** - These measures improve the local handling of data, but they are not a substitute for securing the browser profile and GitHub account you use with the extension
Expand All @@ -125,7 +147,7 @@ Items are automatically removed when they exceed the 2000 item limit (keeping th

GitHub gives authenticated users 5,000 API requests per hour. Each repo check uses 1-3 requests, so even checking 50 repos every 15 minutes keeps you well under the limit.

The extension defaults to checking every 15 minutes. You can change this to 5, 30, or 60 minutes in settings. The 50-repo limit is just to keep things reasonable - you won't hit GitHub's rate limits even at that level.
The extension defaults to checking every 15 minutes. You can change this to 5, 30, or 60 minutes in settings. The default 50-repo limit is there to keep rate usage predictable, but Advanced settings also let you enable unlimited repositories if you want to trade more flexibility for more rate-limit risk.

## Development

Expand Down Expand Up @@ -198,7 +220,7 @@ This is an actively maintained side project. Some features under consideration:
- **Comment notifications** - Track new comments on issues and PRs
- **Mention tracking** - Get notified when you're mentioned
- **Multiple GitHub accounts** - Switch between different accounts
- **GitHub OAuth** - Simplified authentication with one-click login
- **Browser redirect sign-in** - Offer a less manual alternative to the current device-flow sign-in
- **Internationalization** - Support for multiple languages
- **Dashboard view** - Full-page dashboard for all activity

Expand Down
Loading