Files
notify-bridge/RELEASE_NOTES.md
T
alexei.dolgolyov af59615036
Release / release (push) Failing after 2m53s
chore: release v0.1.0
2026-04-21 19:45:22 +03:00

32 KiB

v0.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

  • Pre-release cleanup (90bc3cc)
  • Remove accidentally committed pycache (0dcca2f)

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