Skip to content

v0.11.0 — branded notification emails that link back into the dashboard

Choose a tag to compare

@izzoa izzoa released this 06 Aug 03:02

Highlights

  • Notification emails are branded, and they link back into the dashboard. Every message
    now ships as multipart/alternative: a text-only client sees exactly the wording it saw
    before, and an HTML client sees a laid-out message carrying the event plus a link straight
    to the page that explains it — a provider alert opens Providers, a budget alert opens
    Limits, a spend summary opens Costs. Invite and password-reset emails share the same
    layout.
  • That layout is deliberately asset-free. A text wordmark; no images, no web fonts,
    nothing hosted anywhere else. A self-hosted instance that isn't publicly reachable renders
    the mail identically to one that is, and opening it triggers no remote fetches — which
    also means no tracking pixel, by construction rather than by promise.
  • Chat channels carry severity. An Apprise target now receives a per-event severity, so
    a provider-down or budget-block notification is visually distinct from an informational
    summary instead of arriving as undifferentiated text, with the page link on its own line.
  • Dashboard pages are addressable by URL. Each page has a #/<page> fragment, so pages
    are bookmarkable, the browser's Back and Forward buttons move along the page axis, and a
    link from outside the product can open a specific page. An unrecognized fragment falls
    back to the default page as before. Authorization is now enforced on the route itself:
    the admin-only Users area cannot be reached by URL as a non-admin — the requested page is
    held until the session resolves, then admitted only if permitted. The accept-invite link
    flow is untouched; its token fragment is never parsed as a page nor written to history.
  • Auto performance names the agent whose L1 signal has gone flat. When a stable agent's
    structural score collapses to a near-constant — one two-decimal score bucket covering
    ≥ 50% of its ambiguous-band requests — the Routing page now names the agent, its modal
    score, and the share, with guidance that fits the instance: pin the agent to a tier, or
    enable and configure L2 · Semantic, the layer that evaluates exactly that ambiguous slice.
  • Insufficient evidence never reads as healthy. Below a 50-request floor no verdict is
    rendered at all, and a neutral coverage line discloses how many agents went unassessed —
    so a quiet instance looks unassessed rather than fine. GET /api/analytics/auto gains a
    per-agent signalQuality block. This is read-time aggregation only: no routing behaviour,
    hot-path, or schema change.

Upgrade notes

  • No migrations and no schema change — a drop-in upgrade from 0.10.0.
  • APP_URL now also gates the links in notification emails. The variable is not new and
    its auth behaviour is unchanged, but it now decides whether a notification carries a link
    back to the dashboard. Set it to the address your users actually reach the dashboard at,
    then restart. On the default (http://localhost:3001), or on any loopback value, links
    are omitted deliberately rather than sending a 127.0.0.1 URL that would be dead in a
    recipient's inbox — or worse, on a phone, resolve to the phone. A LAN or .local address
    works and is often the right one for a self-hosted instance. The value is read at boot, so
    a restart is required after changing it.
  • Nothing to do for the other two. URL-addressable pages and the Auto-performance signal
    card need no configuration and change no stored data.

Full package changelogs live in packages/*/CHANGELOG.md.