-
Notify Bridge 0.1.0
StableRelease / release (push) Successful in 59sreleased this
2026-04-21 21:02:33 +03:00 | 116 commits to master since this releasev0.1.0 (2026-04-21)
First public release of Notify Bridge — a self-hosted bridge that turns events from home-lab services into rich, localized notifications and accepts chat commands in return.
Highlights
- Six service providers out of the box: Immich, Google Photos, Planka, Gitea, NUT (Network UPS Tools), plus a generic JSONPath webhook provider and a built-in Scheduler.
- Multi-channel delivery: Telegram, Discord, Slack, ntfy, Matrix, Email, and a broadcast target that fans out to multiple receivers.
- Provider-agnostic bot command system with rich, locale-aware command templates (Telegram + Matrix + Email bots).
- Jinja2 slot-based template system with autocomplete, live preview, locale switching, and a sandbox with timeout protection.
- Actions engine for scheduled mutations on external services (e.g. timed Immich operations).
- Dashboard with filtered charts, grouped navigation tree with badges, Ctrl+K search palette, cross-entity crosslinks, card-highlight navigation, and a global provider filter.
- Docker deployment with a Gitea CI/CD pipeline, full backup & restore, webhook payload history, person excludes for auto-organize rules, and SSRF-hardened outgoing requests.
Features
Service providers
- Phase 3 — Immich service provider (cc02558)
- Google Photos provider backend + API hardening (307871c)
- Planka service provider with full notification and command support (0fde3c6)
- Gitea as webhook-based service provider (6d28cfb)
- NUT (Network UPS Tools) service provider + provider-agnostic UI (68ac13b)
- Generic webhook provider with JSONPath payload extraction (616b221)
- Scheduler provider + multi-provider UX fixes (0562f78)
Notification targets & delivery
- Discord / Slack / ntfy / Matrix targets, command templates, delete protection, email/matrix bots (3e3a6f0)
- Broadcast notification target + UX improvements (d8ecb60)
- Provider-strict configs, slot-based templates, broadcast targets, email bots, command templates (846d480)
- Receiver OOP hierarchy with per-receiver locale resolution (1cfa728)
- Rewrite asset URLs to internal provider URL for LAN fetching (ad2fd33)
Bots & commands
- Telegram commands, app settings, bot polling, webhook handling, UI improvements (03ec9b3)
- Per-chat command toggle, listener name + toggle in bot tab (b3b6c31)
- Rich command templates with public links + media text-first flow (d0bc767)
- Locale-aware command templates, debounced auto-sync, entity pickers (1167d13)
- Remove hardcoded command templates, enforce template system exclusively (ddcbfda)
Template system
- Phase 4 — template system (f36f070)
- Locale-aware notification templates + UX improvements (37388c4)
- Collapsible accordion slots for template editing UX (b1ab5b8)
- Smart video size warnings + Jinja2 template autocomplete (39bac82)
- Collapsible chart, paginator controls, localized template slots (3372761)
- Fix template preview links, default chat action, update default templates (371ea70)
Entities, targets & rules
- Port full CRUD API routes and frontend pages from Immich Watcher (9eec21a)
- Entity relationship refactor — notification trackers, command system, chat actions (1d445f3)
- Person excludes for auto-organize rules, backup & restore system (6b22113)
- Actions system — scheduled mutations on external services (6a559bf)
- Default tracker configs, email validation, expandable target links (6e35926)
- Webhook payload history — store and display recent incoming payloads (6113a00)
- Test menu dropdown, split text/media messages, target settings, provider URL links (5015e37)
UI / navigation / UX
- Phase 7 — frontend restructuring (9dfd1b7)
- Port original frontend UI to Notify Bridge (c9cab93)
- Grouped nav tree with badges, dashboard events section with filtered chart (2c740ff)
- Entity cache system, nav UX improvements, split CLAUDE.md (563716f)
- IconGridSelect, CrossLink, SearchPalette components + entity crosslinks (06b2463)
- Card highlight system for cross-entity navigation (f0f49db)
- Search button in sidebar with Ctrl+K shortcut hint (637a467)
- EntitySelect palette-style entity picker, replace select dropdowns (a3a1fe3)
- Provider type selector for tracking-configs, use IconGridSelect everywhere (9d3abd9)
- Replace all select dropdowns with IconGridSelect, fix EN template seed (a9bb912)
- Filter search to IconGridSelect when item count > 4 (a7829c4)
- Consistent IconGridSelect sizing + descriptions + filter upgrades (31584c5)
- Filtering on all entity list pages (7cbba9d)
- Filter entity selectors by global provider filter (c451f3d)
- Chat language display, disabled EntitySelect items, dev scripts (82e400d)
- API docs link button in sidebar footer (f90cc36)
- UX & notification improvements — icons, events, chat names, link validation, templates (03c5c66)
- UX improvements — secure webhooks, locale fixes, dynamic languages, UI polish (734e5c9)
Security & hardening
- Security hardening — SSRF guard, template sandbox timeout, webhook log prune, auth & backup polish (f0739ca)
- Comprehensive code review fixes — security, performance, quality (e0bae39)
- Comprehensive code review fixes + receivers-only architecture (751097b)
Deployment
- Docker deployment + Gitea CI/CD workflow (1ac6a17)
Foundation
- Phase 9 — HAOS integration planning (786fe5e)
- Phase 8 — integration and wiring (08814e9)
- Phase 6 — database models and server API (7f99c89)
- Phase 5 — notification system (16a41ef)
- Phase 2 — core abstractions (3ed0d8c)
- Phase 1 — project scaffolding (b724447)
Bug Fixes
- Simplify add-target UX — single EntitySelect click to add (21d8ef7)
- Provider-aware collection count labels in tracker list (c6bb2b5)
- NUT template preview + tracking config event checkboxes (2cc4bf6)
- Dashboard provider card shows filtered count, fix provider update 400 (0702ec7)
- UI polish — overflow, placeholders, dashboard provider card (4049efe)
- Pass chat_action from target config to Telegram client (e90c128)
- Remove all transform from stagger/fade animations (d8a1af0)
- Stagger animation breaking position:fixed overlays (f9a4ccf)
- Remove Card hover transform that breaks fixed-position overlays (bd254de)
- Clipboard copy fallback for non-HTTPS contexts (c26b71d)
- Nav active state — plain path link not highlighted when sibling query-param link matches (f64ada5)
- Re-create missing EN default template, provider type as IconGridSelect (db7aac5)
- Search palette triggers highlight, restore CSS keyframe blink (86115f5)
- Switch highlight to global store instead of URL params (88e21e4)
- Replace CSS keyframe highlight with direct style pulse for reliability (f47df93)
- Card highlight animation — kill stagger before highlight, keep animation:none on cleanup (4b59f40)
- Prevent stagger animation replay after card highlight ends (4c1d5a8)
- Rename bots → telegramBots in targets page to fix undefined reference (227b9c2)
- Comprehensive API/UI review — 26 bug fixes and improvements (91e5cd5)
- Remove auto-redirect from API client on 401 (e43c2ed)
- Add auth guard to root layout with setup/login redirects (7d01ae6)
- Local fonts via @fontsource, favicon, autocomplete attrs (f9c41fa)
Performance
- Rewrite asset URLs to internal provider URL for LAN fetching (ad2fd33)
- Lazy-load @mdi/js to reduce Vite dev server memory usage (826be4c)
Refactoring
- Comprehensive consistency review — UI/UX, code quality, functional parity (6e51164)
- Comprehensive codebase review — security, performance, quality, UX (b803d00)
- Provider descriptor registry — eliminate provider-specific hardcoding (8cb836e)
- Provider-agnostic bot command system + Gitea commands (63437c1)
- Unify test dispatch with real NotificationDispatcher (d4cb388)
- Replace favorites checkbox with toggle switch in grid layout (1a8c95e)
- Rename /telegram-bots route to /bots (b525e3e)
Development / Internal
CI/Build
- Consolidate release tokens to single DEPLOY_TOKEN, rename redeploy step (eecc9e2)
- Sync release workflow with CI/CD docs, add manual build (c41182f)
Chores
All Commits
Hash Message Author 90bc3cc chore: pre-release cleanup alexei.dolgolyov eecc9e2 ci: consolidate release tokens to single DEPLOY_TOKEN, rename redeploy step alexei.dolgolyov f0739ca feat: security hardening — SSRF guard, template sandbox timeout, webhook log prune, auth & backup polish alexei.dolgolyov 734e5c9 feat: UX improvements — secure webhooks, locale fixes, dynamic languages, UI polish alexei.dolgolyov 6b22113 feat: person excludes for auto-organize rules, backup & restore system alexei.dolgolyov 6e51164 refactor: comprehensive consistency review — UI/UX, code quality, functional parity alexei.dolgolyov 6113a00 feat: webhook payload history — store and display recent incoming payloads alexei.dolgolyov c41182f ci: sync release workflow with CI/CD docs, add manual build alexei.dolgolyov b803d00 refactor: comprehensive codebase review — security, performance, quality, UX alexei.dolgolyov 616b221 feat: generic webhook provider with JSONPath payload extraction alexei.dolgolyov 307871c feat: Google Photos provider backend + API hardening alexei.dolgolyov 3372761 feat: collapsible chart, paginator controls, localized template slots alexei.dolgolyov 21d8ef7 fix: simplify add-target UX — single EntitySelect click to add alexei.dolgolyov 6e35926 feat: default tracker configs, email validation, expandable target links alexei.dolgolyov d4cb388 refactor: unify test dispatch with real NotificationDispatcher alexei.dolgolyov 1a8c95e refactor: replace favorites checkbox with toggle switch in grid layout alexei.dolgolyov b1ab5b8 feat: collapsible accordion slots for template editing UX alexei.dolgolyov d0bc767 feat: rich command templates with public links + media text-first flow alexei.dolgolyov f90cc36 feat: add API docs link button in sidebar footer alexei.dolgolyov ad2fd33 perf: rewrite asset URLs to internal provider URL for LAN fetching alexei.dolgolyov d8ecb60 feat: broadcast notification target + UX improvements alexei.dolgolyov 8cb836e refactor: provider descriptor registry — eliminate provider-specific hardcoding alexei.dolgolyov c6bb2b5 fix: provider-aware collection count labels in tracker list alexei.dolgolyov 2cc4bf6 fix: NUT template preview + tracking config event checkboxes alexei.dolgolyov 68ac13b feat: NUT (Network UPS Tools) service provider + provider-agnostic UI alexei.dolgolyov c451f3d feat: filter entity selectors by global provider filter alexei.dolgolyov 0702ec7 fix: dashboard provider card shows filtered count, fix provider update 400 alexei.dolgolyov 4049efe fix: UI polish — overflow, placeholders, dashboard provider card alexei.dolgolyov 1cfa728 feat: Receiver OOP hierarchy with per-receiver locale resolution alexei.dolgolyov b3b6c31 feat: per-chat command toggle, listener name + toggle in bot tab alexei.dolgolyov 37388c4 feat: locale-aware notification templates + UX improvements alexei.dolgolyov 6a559bf feat: Actions system — scheduled mutations on external services alexei.dolgolyov 0fde3c6 feat: add Planka service provider with full notification and command support alexei.dolgolyov 39bac82 feat: smart video size warnings + Jinja2 template autocomplete alexei.dolgolyov 1ac6a17 feat: Docker deployment + Gitea CI/CD workflow alexei.dolgolyov e0bae39 feat: comprehensive code review fixes — security, performance, quality alexei.dolgolyov 31584c5 feat: consistent IconGridSelect sizing + descriptions + filter upgrades alexei.dolgolyov 82e400d feat: chat language display, disabled EntitySelect items, dev scripts alexei.dolgolyov e90c128 fix: pass chat_action from target config to Telegram client alexei.dolgolyov d8a1af0 fix: remove all transform from stagger/fade animations alexei.dolgolyov f9a4ccf fix: stagger animation breaking position:fixed overlays alexei.dolgolyov bd254de fix: remove Card hover transform that breaks fixed-position overlays alexei.dolgolyov c26b71d fix: clipboard copy fallback for non-HTTPS contexts alexei.dolgolyov 7cbba9d feat: add filtering to all entity list pages alexei.dolgolyov 63437c1 refactor: provider-agnostic bot command system + Gitea commands alexei.dolgolyov 0562f78 feat: add Scheduler provider + multi-provider UX fixes alexei.dolgolyov 6d28cfb feat: add Gitea as webhook-based service provider alexei.dolgolyov 1167d13 feat: locale-aware command templates, debounced auto-sync, entity pickers alexei.dolgolyov 751097b feat: comprehensive code review fixes + receivers-only architecture alexei.dolgolyov b525e3e refactor: rename /telegram-bots route to /bots alexei.dolgolyov f64ada5 fix: nav active state — plain path link not highlighted when sibling query-param link matches alexei.dolgolyov 826be4c perf: lazy-load @mdi/js to reduce Vite dev server memory usage alexei.dolgolyov a7829c4 feat: add filter search to IconGridSelect when item count > 4 alexei.dolgolyov a9bb912 feat: replace all select dropdowns with IconGridSelect, fix EN template seed alexei.dolgolyov db7aac5 fix: re-create missing EN default template, provider type as IconGridSelect alexei.dolgolyov 9d3abd9 feat: add provider type selector to tracking-configs, use IconGridSelect everywhere alexei.dolgolyov a3a1fe3 feat: EntitySelect palette-style entity picker, replace select dropdowns alexei.dolgolyov 86115f5 fix: search palette triggers highlight, restore CSS keyframe blink alexei.dolgolyov 88e21e4 fix: switch highlight to global store instead of URL params alexei.dolgolyov f47df93 fix: replace CSS keyframe highlight with direct style pulse for reliability alexei.dolgolyov 4b59f40 fix: card highlight animation — kill stagger before highlight, keep animation:none on cleanup alexei.dolgolyov 637a467 feat: add search button to sidebar with Ctrl+K shortcut hint alexei.dolgolyov 4c1d5a8 fix: prevent stagger animation replay after card highlight ends alexei.dolgolyov f0f49db feat: card highlight system for cross-entity navigation alexei.dolgolyov 227b9c2 fix: rename bots → telegramBots in targets page to fix undefined reference alexei.dolgolyov 06b2463 feat: IconGridSelect, CrossLink, SearchPalette components + entity crosslinks alexei.dolgolyov 563716f feat: entity cache system, nav UX improvements, split CLAUDE.md alexei.dolgolyov 2c740ff feat: grouped nav tree with badges, dashboard events section with filtered chart alexei.dolgolyov ddcbfda feat: remove hardcoded command templates, enforce template system exclusively alexei.dolgolyov 3e3a6f0 feat: Discord/Slack/ntfy/Matrix targets, command templates, delete protection, email/matrix bots alexei.dolgolyov 846d480 feat: provider-strict configs, slot-based templates, broadcast targets, email bots, command templates alexei.dolgolyov 371ea70 feat: fix template preview links, default chat action, update default templates alexei.dolgolyov 1d445f3 feat: entity relationship refactor — notification trackers, command system, chat actions alexei.dolgolyov 0dcca2f chore: remove accidentally committed pycache alexei.dolgolyov 03ec9b3 feat: telegram commands, app settings, bot polling, webhook handling, UI improvements alexei.dolgolyov 5015e37 feat: test menu dropdown, split text/media messages, target settings, provider URL links alexei.dolgolyov 03c5c66 feat: UX & notification improvements — icons, events, chat names, link validation, templates alexei.dolgolyov 91e5cd5 fix: comprehensive API/UI review — 26 bug fixes and improvements alexei.dolgolyov 9eec21a feat: port full CRUD API routes and frontend pages from Immich Watcher alexei.dolgolyov c9cab93 feat: port original frontend UI to Notify Bridge alexei.dolgolyov e43c2ed fix: remove auto-redirect from API client on 401 alexei.dolgolyov 7d01ae6 fix: add auth guard to root layout with setup/login redirects alexei.dolgolyov f9c41fa fix: local fonts via @fontsource, favicon, autocomplete attrs alexei.dolgolyov 786fe5e feat(notify-bridge): phase 9 - HAOS integration planning alexei.dolgolyov 08814e9 feat(notify-bridge): phase 8 - integration and wiring alexei.dolgolyov 9dfd1b7 feat(notify-bridge): phase 7 - frontend restructuring alexei.dolgolyov 7f99c89 feat(notify-bridge): phase 6 - database models and server API alexei.dolgolyov 16a41ef feat(notify-bridge): phase 5 - notification system alexei.dolgolyov f36f070 feat(notify-bridge): phase 4 - template system alexei.dolgolyov cc02558 feat(notify-bridge): phase 3 - Immich service provider alexei.dolgolyov 3ed0d8c feat(notify-bridge): phase 2 - core abstractions alexei.dolgolyov b724447 feat(notify-bridge): phase 1 - project scaffolding alexei.dolgolyov Changelog
866a8dfci: fix changelog step on shallow checkout and small repos
56b3451ci: consolidate release.yml into single checkout step
af59615chore: release v0.1.0
90bc3ccchore: pre-release cleanup
eecc9e2ci: consolidate release tokens to single DEPLOY_TOKEN, rename redeploy step
f0739cafeat: security hardening — SSRF guard, template sandbox timeout, webhook log prune, auth & backup polish
734e5c9feat: UX improvements — secure webhooks, locale fixes, dynamic languages, UI polish
6b22113feat: person excludes for auto-organize rules, backup & restore system
6e51164refactor: comprehensive consistency review — UI/UX, code quality, functional parity
6113a00feat: webhook payload history — store and display recent incoming payloads
c41182fci: sync release workflow with CI/CD docs, add manual build
b803d00refactor: comprehensive codebase review — security, performance, quality, UX
616b221feat: generic webhook provider with JSONPath payload extraction
307871cfeat: Google Photos provider backend + API hardening
3372761feat: collapsible chart, paginator controls, localized template slots
21d8ef7fix: simplify add-target UX — single EntitySelect click to add
6e35926feat: default tracker configs, email validation, expandable target links
d4cb388refactor: unify test dispatch with real NotificationDispatcher
1a8c95erefactor: replace favorites checkbox with toggle switch in grid layout
b1ab5b8feat: collapsible accordion slots for template editing UXDownloads