🎉 Free 7-day trial  ·  No credit card required
nDesk

Changelog

Everything we've shipped, in order

Every change that reached production, newest first — including the fixes we'd rather not have needed. No "various improvements," no marketing spin on a bug fix.

September 2026

  • Fixed

    Uploaded logos and avatars failing to load cross-origin

    A workspace logo or avatar could fail to render on a customer's own domain, blocked by a cross-origin resource policy header the browser checks before CORS is ever consulted. Fixed, and the logo upload field is now a single row with inline upload and remove actions.

  • New

    Send email through your own provider

    The platform can now send email — invites, sign-up confirmations, anything a flow needs — through Console, SMTP or Resend. Configured per workspace the same way payment is: platform default first, then your own credential, stored encrypted. Left unconfigured, it logs instead of breaking whatever tried to send.

  • Improved

    Editable plan limits from the operator console

    Seats, workspaces and knowledge base article limits can now be adjusted for a single workspace from the operator console, on top of the plan's own numbers, without editing the checked-in catalog.

  • Fixed

    Billing sync rate limit, checkout confirmation, duplicate customers

    The billing sync rate limit is now keyed per workspace instead of per shared IP, so a busy office or an automatic post-purchase check no longer locks out the manual retry button. Checkout confirmation no longer abandons the poll under a dev-mode double mount, and a duplicate billing customer ID now surfaces as a clear error instead of a bare 500 that retries a webhook forever.

  • New

    7-day free trial on every plan

    New workspaces now start with a 7-day trial with full features, instead of a capped free tier.

  • New

    White-labelled widget branding

    Workspaces on Trial, Team, Growth or Scale can turn off the "powered by" badge and set their own brand name in the widget header, so a visitor sees your product rather than ours.

  • Improved

    Translation skips the model when it isn't needed

    Two-way translation no longer calls the model when a reply is already in the visitor's language, and renaming a person's profile now stays consistent across every workspace they belong to.

  • New

    One sign-in, every workspace

    An account is no longer tied to a single workspace. One sign-in now reaches every workspace you hold a seat in, with a switcher to move between them — two on Team, more on Growth and Scale — and members can be invited by link.

  • New

    Two-way conversation translation

    An agent can write in their own language while the visitor reads it in theirs, and read an incoming message back in their own on demand. The conversation remembers which language it's in, so a handover to another agent keeps it.

  • New

    MCP server: connect Claude or ChatGPT to your knowledge base

    Point Claude, ChatGPT or any MCP client at your workspace with an API key, and it can read the questions your bot couldn't answer, search your existing articles, and write new ones — closing knowledge gaps without opening the dashboard. Eleven tools over Streamable HTTP, nothing to install.

  • New

    AI-assisted reply cleanup for agents

    "Tidy up" beside Send fixes an agent's spelling and grammar without changing what they said — it won't add a greeting, soften a refusal, or translate. One click undoes it and restores the draft exactly.

  • New

    Real-time notification when a chat is handed to you

    An agent is now told the moment a conversation is assigned to them, with a one-click button to open it, instead of finding out by noticing their list changed.

  • Improved

    Separate languages for reading and replying

    Reading a message in your own language and replying in the visitor's used to share one setting, so agents were flipping it before and after every message. They're independent now: replying defaults to the visitor's language, reading defaults to yours.

  • Fixed

    Assignee picker: clipped menu, stuck busy state, stale roster

    The assignee menu could be invisibly clipped by a parent element's overflow rule, a lost realtime acknowledgement could leave the picker permanently disabled until reload, and the staff list shown when assigning wasn't refreshed after a new teammate joined. All three are fixed.

  • New

    Session history

    A searchable list of every visitor session — where they came from, what they viewed, how long they stayed, and whether it became a conversation — where previously a session was unreachable the moment it ended.

  • Improved

    Staying signed in for the week your session allows

    The dashboard now actually spends its refresh token: a session used to expire after fifteen minutes even though a week of validity was sitting unused.

  • Improved

    Formatted replies in the widget and dashboard

    Assistant and agent replies now render their Markdown — bold text, links, lists — instead of showing literal asterisks and bare URLs. Hand-written and sandboxed rather than built on a parsing library, since both the assistant's output and an agent's typing are untrusted input.

  • Improved

    The assistant no longer decides a visitor needs a human

    A keyword, a weak answer, or two low-confidence turns used to queue a visitor for a person automatically, without them asking. The assistant now always says when it can't answer and keeps "Talk to a human" on screen — the choice stays the visitor's. Every visit also starts a clean conversation rather than reopening whatever thread was last open.

  • New

    The widget says hello, once

    On desktop, the widget now opens itself once per visit with the pre-chat form on screen, instead of waiting to be noticed. Closing it keeps it closed for the rest of the visit; a new visit gets one more hello.

  • New

    Hide the widget from the loader API

    A host page can now hide and re-show the widget programmatically — built for a checkout page, where a floating panel over the pay button was the problem.

  • Improved

    Dashboard first load cut from 5.8MB to 170KB

    Fixed an icon library shipping in full rather than tree-shaken, hashed assets served without a cache header, and a proxy layer that wasn't compressing responses. Same dashboard, 34x less to download.

  • New

    Overview analytics page

    Conversations per day with the assistant's share, open conversations by mode, visitor countries, hour-of-day activity, and a live indicator for visitors actually on the site right now.

  • New

    Integrations page and domain allowlist

    Install steps for seven site builders and five frameworks, and a way to allow a domain to embed the widget from the dashboard — closing a real gap where the widget would load on a customer's site and simply refuse to start.

  • Improved

    Knowledge base search and widget settings redesign

    The knowledge base admin gained search across titles and body, collection filters, and a flag on any article that indexed to zero passages — otherwise the assistant silently can't see content that's plainly there.

  • New

    Country flags, sidebar and visitor panel redesign

    Conversation lists now show a visitor's country resolved from their IP, the sidebar groups queues with icons instead of a flat list, and the visitor panel splits into Visitor info and Pages visited tabs.

  • Fixed

    Notification sounds firing when they shouldn't

    The waiting alarm no longer rings for a conversation an agent already has open, and stops re-triggering just because the queue shrank when a colleague picked someone up. A conversation the assistant is handling stays silent, and visitors can now cancel a request for a person and carry on with the assistant instead.

That's everything, so far

New entries land here the day they ship, not in a monthly roundup. If you're checking whether a fix is already live before opening a ticket, or a change here affects your setup specifically, talk to us — it's faster than digging through this list.