Releases: ivg-design/web-watcher
Release list
WebWatcher v1.10.11 (Build 36)
Signed, notarized and stapled. The email watcher's link always opens Gmail filtered to the watched senders: their unread inbox mail when there is some, otherwise all their mail. It no longer opens the bare inbox. See CHANGELOG.md.
WebWatcher v1.10.10 (Build 35)
Signed, notarized and stapled. The email watcher's link opens Gmail's search for the unread mail from the watched senders. Every check is recorded in ~/Library/Logs/WebWatcher/checks.log. Settings: readable Gmail poll interval, no duplicate Safari Automation row. Add Watcher: the zero-confirmation check only appears for badge watchers. See CHANGELOG.md.
WebWatcher v1.10.9 (Build 34)
Signed, notarized and stapled. Vendored Herald client re-synced with Herald 1.5.0 (manifest and model fields for the cloud relay). See CHANGELOG.md.
WebWatcher v1.10.8 (Build 33)
Signed, notarized and stapled. Vendored Herald client synced with Herald 1.4.1 (rich text, host-app Open, reply kind). See CHANGELOG.md.
WebWatcher v1.10.7 (Build 32)
Signed, notarized and stapled. Vendored Herald client synced with Herald 1.4.0 (action arrangements, button styles, openApp, agent apps, parity routes). See CHANGELOG.md.
WebWatcher v1.10.6 (Build 31)
Signed, notarized and stapled. Vendored Herald client synced with Herald 1.3.0: SF Symbol styling on banner buttons, icons and badges, updated component schema and template/bundle/stack/quiet-hours models. See CHANGELOG.md.
WebWatcher v1.10.5 (Build 30)
WebWatcher v1.10.5 (Build 30)
Signed, notarized and stapled. First public release since 1.4.11; it includes everything from 1.5.0 through 1.10.5.
Added
- Guided element picker: Page → Element → Confirm assistant. Scan page groups what it finds; Pick in Safari highlights elements in the page with arrow-key refinement; Confirm verifies the selection live. No DevTools needed.
- Site profiles and recipes (Rive community, Gmail web, generic badge/aria-count/document-title strategies) and an auto-badge strategy.
- Subtree change watch type: watches an element's children, for bells that have no badge yet.
- Gmail sender watchers: plain "Sign in with Google" (Gmail scope only), watch one or more addresses or whole domains, one accumulating notification per watcher with a live unread count that drops when you read the mail in Gmail, click opens the message, Mark as Read / Archive / Delete / Spam act on all counted mail.
- Custom notifications: your own icon (copied into app-owned storage, square thumbnail), custom title and body templates with
{count} {sender} {subject} {time}, preview button. - Herald delivery: when Herald is running, banners go through it (persistent, stackable by sender, with working action buttons). Settings → Notifications → Delivery.
Fixed
- Scan / Pick that did nothing (probe reply parsing).
- Dead watchers and duplicate tabs caused by unloaded (
about:blank) or hidden Safari tabs; reloads are now decided by the document's visibility and happen once, in place. - Editor and Settings windows now appear in Cmd+Tab.
- "Failed to fetch user profile" after Google sign-in.
- Menu-bar icon: hourglass-with-eye, correct size and centring.
Building from source
The Google OAuth client JSON is not in the repo. Run scripts/install-google-client.sh <client_secret.json> with your own Desktop-app client, or use Settings → Gmail → Advanced to import one at runtime.
Full details per build in CHANGELOG.md.
WebWatcher v1.4.11 (Build 17)
WebWatcher v1.4.11 (Build 17)
Added
- New Open System Automation Settings button in Settings.
- New permission status dashboard with green/red indicators and quick actions for:
- Notifications
- Safari Automation
- System Events Automation
- Default browser automation
Included from incremental builds (1.4.0 -> 1.4.10)
- Domain-based existing-tab reuse for default browser navigation.
- API lookup command support for notification/row click destination resolution.
- Notification replacement behavior (single active watcher notification).
- Duplicate-instance handling and focus-steal mitigations.
- Safari scraping serialization and in-flight check guards.
- Improved browser automation permission prompting/recovery.
- Added Apple Events automation entitlement for hardened runtime.
See CHANGELOG.md for full details of each build.
v1.3.0 - Custom Badge Attribute Support
What's New
Custom Badge Attribute Support
WebWatcher can now extract badge values from HTML attributes on web components that use Shadow DOM.
Why this matters: Modern web apps (like Reddit) use web components with Shadow DOM, where the badge number is stored in an HTML attribute rather than visible text. The new "Badge Attribute" field lets you specify which attribute to read.
Example: Reddit Notifications
- Selector:
dynamic-badge[data-id="notification-count-element"] - Badge Attribute:
initial-count
Auto-detection
When no custom attribute is specified, WebWatcher automatically checks these common attributes before falling back to text content:
initial-count(Reddit)data-countcount
See CHANGELOG.md for full details.
Download
Download the DMG below and drag WebWatcher.app to your Applications folder.
WebWatcher v1.2.0
What's New in v1.2.0
Force Refresh for Safari Background Tabs
Safari aggressively suspends background tabs, causing DOM reads to return stale/outdated content. This release adds a Force Refresh option that reloads the tab before scraping.
New Features
- Force Refresh option - Enable "Force refresh before checking" in watcher settings
- Configurable settle delay - Set wait time (0.5s - 5.0s) after page reload for dynamic content
- Version display - Shows version and build number in menu bar popover
- Info button - Quick link to documentation in popover header
Fixes
- Fixed Safari background tab suspension causing stale notification counts
- Fixed dynamic content not updating without manual page reload
- Version display now reads from bundle (was hardcoded)
Installation
- Download
WebWatcher-1.2.0.dmg - Open the DMG and drag WebWatcher to Applications
- Launch WebWatcher from Applications
- Enable Safari permissions (see README for setup)
Requirements
- macOS 13.0 or later
- Safari with "Allow JavaScript from Apple Events" enabled