• v0.1.0 b5ffab7ece

    Notify Bridge 0.1.0
    Release / release (push) Successful in 59s
    Stable

    alexei.dolgolyov released this 2026-04-21 21:02:33 +03:00 | 116 commits to master since this release

    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

    Changelog

    866a8df ci: fix changelog step on shallow checkout and small repos
    56b3451 ci: consolidate release.yml into single checkout step
    af59615 chore: release v0.1.0
    90bc3cc chore: pre-release cleanup
    eecc9e2 ci: consolidate release tokens to single DEPLOY_TOKEN, rename redeploy step
    f0739ca feat: security hardening — SSRF guard, template sandbox timeout, webhook log prune, auth & backup polish
    734e5c9 feat: UX improvements — secure webhooks, locale fixes, dynamic languages, UI polish
    6b22113 feat: person excludes for auto-organize rules, backup & restore system
    6e51164 refactor: comprehensive consistency review — UI/UX, code quality, functional parity
    6113a00 feat: webhook payload history — store and display recent incoming payloads
    c41182f ci: sync release workflow with CI/CD docs, add manual build
    b803d00 refactor: comprehensive codebase review — security, performance, quality, UX
    616b221 feat: generic webhook provider with JSONPath payload extraction
    307871c feat: Google Photos provider backend + API hardening
    3372761 feat: collapsible chart, paginator controls, localized template slots
    21d8ef7 fix: simplify add-target UX — single EntitySelect click to add
    6e35926 feat: default tracker configs, email validation, expandable target links
    d4cb388 refactor: unify test dispatch with real NotificationDispatcher
    1a8c95e refactor: replace favorites checkbox with toggle switch in grid layout
    b1ab5b8 feat: collapsible accordion slots for template editing UX

    Downloads