Skip to content

v0.13.2

Latest

Choose a tag to compare

@mortondev mortondev released this 01 Aug 18:30
· 1087 commits to main since this release
7fdad00

This release adds Slack notifications for support conversations and visitor messages, fixes inbound chat email replies with Resend's metadata-only webhooks, keeps images in posts that contain emoji, self-hosts all branding fonts (no more Google Fonts <link>), and makes OIDC sign-in work with providers that don't support select_account. It also makes sentiment analysis tolerant of models that wrap JSON in code fences.

Features

  • Slack notifications for support chat. Slack targets can now notify when a visitor starts a support conversation (conversation.created) and when a visitor sends a message (message.created), each with a deep-link into the admin inbox. Agent replies never notify, and both events are opt-in per target in Settings → Integrations → Slack. (#335)

Bug fixes

  • Inbound chat email replies deliver with Resend. Resend's email.received webhook is metadata-only, so replies arrived without a body and were dropped. The body is now fetched from the Received Emails API after routing and dedupe (with an HTML→text fallback), and a transient fetch failure retries via Resend redelivery. (#325, fixes #320)
  • Images kept in posts that contain emoji. A post written with the : emoji picker made the whole document non-reserializable, so API output fell back to stored markdown and lost embedded images. Emoji nodes now serialize to their Unicode character (or :name: for custom emoji), and images survive. (#338)
  • Self-hosted branding fonts. Every font in the branding picker and theme presets is now bundled via @fontsource instead of loaded through a Google Fonts <link>, which edge optimizers (e.g. Cloudflare Fonts) rewrote into inline @font-face and broke SSR hydration. Saved "Geist" configs automatically map to the bundled "Geist Sans" family. (#321)
  • OIDC sign-in works with more identity providers. Generic OAuth/OIDC sign-in now requests prompt=login instead of the OIDC-optional select_account, which many IdPs ignore or reject. Re-authentication is still forced, so an admin typing a specific email isn't silently signed in as an existing IdP session. (#347)
  • Sentiment analysis tolerates fenced JSON. Models that wrap their JSON response in markdown code fences no longer break sentiment parsing. (#315, closes #296)

Full Changelog: v0.13.1...v0.13.2