{"id":45931174,"url":"https://github.com/jonmartin721/devwatch-github","last_synced_at":"2026-03-14T22:58:28.860Z","repository":{"id":323965395,"uuid":"1095428080","full_name":"jonmartin721/devwatch-github","owner":"jonmartin721","description":"A Chrome extension that monitors GitHub repositories using the GitHub API and sends browser notifications for new activity including commits, pull requests, issues, and releases, with configurable check intervals and activity filtering.","archived":false,"fork":false,"pushed_at":"2025-11-20T20:23:58.000Z","size":1498,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-20T22:10:39.810Z","etag":null,"topics":["browser-extension","chrome-extension","developer-tools","github-api","github-notifications","manifest-v3","notifications","productivity","repository-monitoring"],"latest_commit_sha":null,"homepage":"https://jonmartin721.github.io/devwatch-github/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonmartin721.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T03:21:01.000Z","updated_at":"2025-11-20T20:24:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jonmartin721/devwatch-github","commit_stats":null,"previous_names":["jonmartin721/devwatch-github"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jonmartin721/devwatch-github","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonmartin721%2Fdevwatch-github","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonmartin721%2Fdevwatch-github/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonmartin721%2Fdevwatch-github/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonmartin721%2Fdevwatch-github/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonmartin721","download_url":"https://codeload.github.com/jonmartin721/devwatch-github/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonmartin721%2Fdevwatch-github/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29929350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser-extension","chrome-extension","developer-tools","github-api","github-notifications","manifest-v3","notifications","productivity","repository-monitoring"],"created_at":"2026-02-28T09:32:42.490Z","updated_at":"2026-03-14T22:58:28.853Z","avatar_url":"https://github.com/jonmartin721.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Devwatch for Chrome\n\nMonitor 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.\n\n[![Chrome Web Store](https://img.shields.io/badge/Chrome-Web_Store-green?logo=google-chrome)](https://chromewebstore.google.com/detail/github-devwatch/dbgjgcaphfcfgppicmbiafcgcabikjch)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![CI](https://github.com/jonmartin721/devwatch-github/workflows/CI/badge.svg)](https://github.com/jonmartin721/devwatch-github/actions)\n[![codecov](https://codecov.io/gh/jonmartin721/devwatch-github/branch/main/graph/badge.svg)](https://codecov.io/gh/jonmartin721/devwatch-github)\n\n## Key Features\n\n- **Guided Setup** - Built-in GitHub sign-in flow and repository selection\n- **Browser Notifications** - Get notified about new PRs, issues, and releases\n- **Multi-Repo Monitoring** - Watch up to 50 repositories from one interface\n- **Configurable Updates** - Check every 5, 15, 30, or 60 minutes\n- **Activity Filtering** - Search and filter by repo and activity type\n- **Badge Counts** - Unread count on the extension icon\n- **Direct API Access** - Talks to GitHub directly, with optional npm registry lookups only when you use package-name import\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"screenshots/full-tagline.png\" alt=\"GitHub Devwatch - Track your repositories\" width=\"800\"\u003e\n\u003c/div\u003e\n\n## Installation\n\n### From Chrome Web Store (Recommended)\n\n1. Visit the [Chrome Web Store](https://chromewebstore.google.com/detail/github-devwatch/dbgjgcaphfcfgppicmbiafcgcabikjch)\n2. Click \"Add to Chrome\"\n3. Grant permissions when prompted\n4. Follow the guided setup wizard on first launch\n\n**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.\n\n### Manual Installation (For Development)\n\n1. Clone this repository\n```bash\ngit clone https://github.com/jonmartin721/devwatch-github.git\ncd devwatch-github\n```\n\n2. Load the extension in Chrome:\n   - Open Chrome and go to `chrome://extensions/`\n   - Enable \"Developer mode\" (toggle in top right)\n   - Click \"Load unpacked\"\n   - Select the extension directory\n\n3. Click the extension icon and follow the setup wizard\n\n## Quick Setup\n\n### First-Time Setup\n\nThe built-in setup flow walks you through:\n1. Connect your GitHub account\n2. Add repositories to watch\n3. Choose activity types (PRs, Issues, Releases)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"screenshots/onboarding-welcome.png\" alt=\"Interactive setup wizard welcome screen\" width=\"500\"\u003e\n\u003c/div\u003e\n\n### Ongoing Use\n- The extension automatically checks for activity at your configured interval (default: 15 minutes)\n- Click the extension icon to view your activity feed\n- Get browser notifications for new activity\n- Badge count shows unread items at a glance\n- Manage repositories and preferences anytime in Settings\n\n## How to Use\n\n### Popup Interface\nFilter by type (All/PRs/Issues/Releases), search activities, refresh manually, or browse the archive. Click any item to open in GitHub.\n\n### Settings Page\nManage your GitHub connection, watched repositories, activity filters, check interval, notifications, and theme. Export/import settings for backup.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"screenshots/settings-page.png\" alt=\"Settings page for configuring repositories\" width=\"600\"\u003e\n\u003c/div\u003e\n\n## Typical Workflow\n\nHere's what using the extension looks like day-to-day:\n\n1. You're working and get a notification: \"2 new activities in your-org/api-server\"\n2. Click the extension icon to see the feed\n3. See \"Pull Request #145: Add OAuth2 authentication\" (3 minutes ago)\n4. Click the item to open it in GitHub\n5. Review and comment on the PR\n6. When you return to the extension, it's marked as read\n\nThe 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.\n\n## Accessibility Notes\n\nThe UI includes keyboard navigation, visible focus styles, semantic controls, and ARIA labeling in key flows. The test suite also includes automated axe-core checks and keyboard-focused UI tests.\n\nThat said, this project has not gone through a formal accessibility audit or documented screen reader certification. If you run into an accessibility issue, please [open an issue](https://github.com/jonmartin721/devwatch-github/issues).\n\n## Privacy \u0026 Security Notes\n\nThe 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.\n\n- **Direct network access** - Requests go to `api.github.com`, plus `registry.npmjs.org` only when you use package-name lookup\n- **Scoped browser permissions** - The manifest asks for `storage`, `alarms`, and `notifications`\n- **Defensive client code** - The codebase includes URL validation, content security policy rules, and sanitization tests\n- **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\n\n## Data Storage\n\nThe extension stores up to **2000 activity items** locally in Chrome storage. This limit ensures the extension stays performant while providing plenty of history.\n\n### Feed Management\nYou can optionally configure automatic expiry of old items:\n- **Auto-removal**: Enable time-based expiry to automatically remove items older than a specified time\n- **Configurable Duration**: Set expiry time from 1 to 168 hours (1 week)\n- **Applies to All Items**: When enabled, both feed and archived items older than the threshold are removed\n- **Manual Control**: Clear archive manually anytime with the \"Clear Archive\" button\n\nItems are automatically removed when they exceed the 2000 item limit (keeping the most recent) or when they're older than your configured expiry time (if enabled).\n\n## Rate Limiting\n\nGitHub 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.\n\nThe 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.\n\n## Development\n\n### Project Structure\n```\n/devwatch-github\n  /icons                  # Extension icons in various sizes\n  /popup                  # Popup interface\n    /controllers         # Popup business logic\n    /views               # Popup view components\n    popup.html\n    popup.js\n    popup.css\n  /options                # Settings page\n    /controllers         # Settings business logic\n    /views               # Settings view components\n    options.html\n    options.js\n  /shared                 # Shared utilities\n    /api                 # GitHub API integration\n    /ui                  # Shared UI components\n  background.js           # Service worker for background tasks\n  manifest.json           # Extension manifest (Manifest V3)\n```\n\n### Technologies Used\n- **Vanilla JavaScript** - No frameworks, pure JS for maximum compatibility\n- **Chrome Extension Manifest V3** - Latest extension standards\n- **GitHub REST API** - Direct integration with GitHub's API\n- **Chrome APIs** - Storage, Notifications, and Alarms for core functionality\n\n### Running Tests\n```bash\nnpm run lint\nnpm run typecheck\nnpm test\nnpm run build\n```\n\nThe automated checks cover shared logic, UI behavior, and a range of mocked extension flows. They do not replace manual testing in Chrome for permissions, service worker lifecycle behavior, or end-to-end interactions against live GitHub data.\n\nJest enforces minimum global coverage thresholds of 47% lines, 46% branches, and 44% functions. That is a floor for the suite, not a claim of exhaustive coverage.\n\n### Local Development\n1. Clone the repository\n2. Run `npm install` for dependencies\n3. Load as unpacked extension in Chrome\n4. Make changes and reload the extension from `chrome://extensions/`\n\n## Contributing\n\nContributions welcome! Submit issues or pull requests. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n### How to Contribute\n- **Bug Reports**: Use GitHub Issues with clear reproduction steps\n- **Feature Requests**: Open an issue describing the feature and use case\n- **Pull Requests**: Fork, branch, and submit with clear commit messages\n- **Code Style**: Follow existing patterns and use ESLint configuration\n\n## Documentation\n\n- [**Privacy Policy**](PRIVACY.md) - How we handle your data\n- [**Changelog**](CHANGELOG.md) - Version history and release notes\n- [**License**](LICENSE) - MIT License\n- [**Contributing Guidelines**](CONTRIBUTING.md) - How to contribute\n\n## Roadmap\n\nThis is an actively maintained side project. Some features under consideration:\n- **Comment notifications** - Track new comments on issues and PRs\n- **Mention tracking** - Get notified when you're mentioned\n- **Multiple GitHub accounts** - Switch between different accounts\n- **GitHub OAuth** - Simplified authentication with one-click login\n- **Internationalization** - Support for multiple languages\n- **Dashboard view** - Full-page dashboard for all activity\n\nIf any of these sound useful, open an issue or submit a PR!\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\nCopyright (c) 2025 Jonathan Martin\n\n## Support\n\n- **Report issues**: [GitHub Issues](https://github.com/jonmartin721/devwatch-github/issues)\n- **Feature requests**: [GitHub Discussions](https://github.com/jonmartin721/devwatch-github/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"screenshots/logo-tagline.png\" alt=\"GitHub Devwatch logo\" width=\"300\"\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonmartin721%2Fdevwatch-github","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonmartin721%2Fdevwatch-github","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonmartin721%2Fdevwatch-github/lists"}