KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,500
Total Changes
5,986
Features
5,284
Fixes
30
Projects
Filter by project
All Projects17,500AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices740MCPGatewayService251MediaService602RAGService79SecurityService1,847TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore774Docs3,254Feature5,986Fix5,284Other994Performance165Refactor278Revert23Style42Test160Upgrade1
September 6, 2026
TestMediaService

Pin which support queue a stranger's chat lands in

resolveTopic decides where a visitor from a customer's website reaches a person, and every way it can go wrong goes wrong silently — a chat filed under a plausi...

Kamo·1mo ago
FixMediaService

Don't file chats into a support topic the org deactivated

resolveTopic honoured a configured topic by id alone, so deactivating one left the integration still pointing at it and new website chats still landing there — ...

Kamo·1mo ago
Featurekamo-register

One surface, a level-gauge step rail, and chrome the tenant colours

The /team and /member screens were two near-identical slabs of glass stacked with a gap, a MUI Stepper in its default grey, and a progress pill floating inside ...

Kamo·1mo ago
Fixkamo-apps

Pin the background and the support bubble, and point the way on

The pane could not both anchor `position: fixed` children and scroll them, and was being asked to do both. Its transform is what makes it their containing block...

Kamo·1mo ago
Featurekamo-internal

Choose the support topic a website's chats are filed under

The add/edit dialogs had no way to say which support queue a website's chats belong in, because the setting didn't exist — the widget sent a hardcoded "General ...

Kamo·1mo ago
FeatureMediaService

File a website's chats under the topic its integration chose

createSupportSession took the topic from whatever title the visitor's browser sent — the widget hardcodes "General Inquiry" — and when no topic matched that nam...

Kamo·1mo ago
Featurekamo-shared-library

Let an integration say which support queue its chats belong in

A web-chat integration had no support topic. The visitor's browser sent a hardcoded topic title instead, so an org whose topics aren't named "General Inquiry" —...

Kamo·1mo ago
Featurekamo-internal

Park the swarm at the bottom-left, against the nav rail

The home cluster's default spot moves from the bottom-right corner to the bottom-left, sitting one padding clear of the primary rail's right edge — collapsed at...

Kamo·1mo ago
Fixkamo-internal

Every tool window keeps what the member typed, not just one

Follow-up to c45b3857, which fixed the bug/improvement window and left four others named in a "known gaps" list. That list was the wrong answer: a gap recorded ...

Kamo·1mo ago
September 5, 2026
FixMediaService

Tell the widget the org's name so it stops speaking as Kamo

The public-chat bootstrap payload carried orgId but no org name, so the widget had nothing to brand the assistant with and fell back to a hardcoded "Kamo AI". A...

Kamo·1mo ago
Featurekamo-apps

The mortgage application sits in a pane, under its own ribbon

Ports the shell from kamo-login and kamo-register: a card inset 15px from the browser edge with a 14px radius, a soft shadow, and a red ribbon across its top-ri...

Kamo·1mo ago
Featurekamo-internal

Send a new starter to the board, and open the advert they came for

A team member whose employment is not ACTIVE is already confined to the restricted tier, and the home screen already bounced them somewhere. It now matters WHER...

Kamo·1mo ago
Featurekamo-register

Carry the applied-for job onto the account being created

The careers board sends candidates to /team?jobId=<uid>. That uid is parked in an apex cookie as before, but it is now READ BACK at submit and sent in the regis...

Kamo·1mo ago
FeatureDocsService

Retire applying without an account, and notify both sides of one that lands

The public board's Apply button is now a link into registration, so this drops the endpoints behind the old form: /{orgRef}/apply/{uid} in both content types, /...

Kamo·1mo ago
FeatureSecurityService

Record the advert a candidate registered for, and welcome them when hired

Registration on the /team path now accepts appliedJobId — the uid kamo-register parked when the careers board sent the candidate to /team?jobId= — and writes it...

Kamo·1mo ago
Featurekamo-shared-library

Apply from inside the workspace, and say so to both sides

The public careers board's Apply button is now a link into registration, so every application is filed against a session. Two fields carry the candidate from th...

Kamo·1mo ago
Featurekamo-apps

The chat bubble knows the applicant's name as they type it

Somebody who has just filled in "First name" and opens the chat to ask a question should not be asked who they are a second time, and the agent picking that con...

Kamo·1mo ago
FixSecurityService

Publishing an application opens its chat key to the page it is on

The support widget on a published application loaded with Kamo's default config instead of the org's: it auto-opened on desktop with auto-open turned off, wore ...

Kamo·1mo ago
Testkamo-internal

Pin the right-click to one menu

The handler itself is already in — swept into 734f68cb by a concurrent commit in a shared checkout, under an unrelated message. This is the test it was written ...

Kamo·1mo ago
Fixkamo-internal

The scrollers styled with classes rather than sx get the bar too

Reported against /hr/overview, and the page itself is innocent — it declares no overflow at all. Its scroller is one line in app/hr/layout.tsx: <div classN...

Kamo·1mo ago
Fixkamo-internal

A populated bug report survives a page change

Reported again: a fully filled-in bug/improvement window came back empty after switching to /hr, and again from the analytics nav icon. The window was never los...

Kamo·1mo ago
Fixkamo-internal

The rail's own scrollbar is not an exit from the rail

The previous attempt at this fixed the wrong handler. It taught the reconcile in useNavHoverPeek to see through the bar, which was worth doing and was not what ...

Kamo·1mo ago
Fixkamo-internal

Resting on the rail's own scrollbar no longer flaps it open and shut

Reported as the rail switching between expanded and collapsed rapidly with the pointer held still over its scrollbar, which is exactly what it did. useNavHover...

Kamo·1mo ago
Fixkamo-internal

Give the expanded rail back the width the scrollbar took

The rail is the one place where the app's scrollbar was paid for out of somebody else's layout. Expanded, it has always reserved a gutter — 20px, for the bar it...

Kamo·1mo ago
Fixkamo-internal

The scrollbar moves the content over instead of sitting on it

Painting the bar over the last 32px is fine over a background — the launchpad's wallpaper does not mind — and wrong everywhere else. In a chat log it lands on t...

Kamo·1mo ago
Featurekamo-register

Seat every screen in the same pane, under a per-step ribbon

Ports kamo-login's shell: every route now renders inside .kamo-pane, a card inset 15px from the browser edge with a 14px radius, a soft shadow and overflow:hidd...

Kamo·1mo ago
Featurekamo-apps

The support bubble uses the key its product was published with

The chat key is per-PRODUCT, not per-deployment. A lender picks a web chat integration when they publish an application, and the public endpoint resolves that i...

Kamo·1mo ago
Featurekamo-internal

Publishing an application is a decision, and it comes with a chat

**Vendors & Products no longer prints a link for every product it has.** It printed one for every mortgage product the moment that product existed, which meant ...

Kamo·1mo ago
FeatureSecurityService

Publish an application deliberately, and give its page a chat key

`PUT **************** publishes or retires a product's public page and records which web chat its support widget speaks through. Enabling without one is refused...

Kamo·1mo ago
FeatureMediaService

Let an integration carry a key a hosted Kamo page can resolve

`publicSiteKey` was persisted only for SPECIFIC_AGENT integrations, because the multi-tenant MLOS portal was the only page that had to resolve its key by Host r...

Kamo·1mo ago
Featurekamo-shared-library

A product's application is published, not assumed

`LeadVendorProduct` gains `applicationEnabled` and `webChatIntegrationId`. A product existing in the CRM is not a decision to publish a form the whole internet...

Kamo·1mo ago
FixSecurityService

Close the last two catalog-bump gaps, and stop echoing exceptions

Two reads and nine response bodies, both halves of the same report. SessionRefreshController loaded the member one statement before the rights read that was fi...

Kamo·1mo ago
FixDaemonService

Stop reporting a catalog bump as a missing SystemConfiguration row

Three scheduled jobs read a row and skip the whole tick if they cannot. All three were skipping ticks during schema changes, and two of them said so in a way th...

Kamo·1mo ago
FixEmailService

A catalog bump emptied the sweep instead of failing it

Both reads the sweep depends on already sat inside a catch that logs and carries on, so a Yugabyte conflict never surfaced as an error — it surfaced as a tick t...

Kamo·1mo ago
FixDocsService

Retry the two reads a catalog bump broke document editing with

WopiController.checkFileInfo is called repeatedly through an editing session — on open, around locks, after every save — so a conflict on its organization looku...

Kamo·1mo ago
Otherkamo-internal

Merge branch 'feat/one-scrollbar'

One scrollbar for every scroller in the app, with the terminal window's five controls on all of them.

Kamo·1mo ago
Fixkamo-internal

Every scrollbar keeps all five controls, at every size

The first cut dropped the four buttons on any bar shorter than 140px, on the argument that 96px of them leaves a 250px popover with a stub of track. That was th...

Kamo·1mo ago
FixMediaService

Retry the member load every authenticated request makes

AuthHelper.getCurrentMember was the single most common casualty of a Yugabyte catalog bump in this service — eight of the conflicts logged across both pods in o...

Kamo·1mo ago
Fixkamo-shared-library

Cover the three shared reads a catalog bump still reached users through

Same defect as the sign-in fix, found by reading the fleet's logs rather than one report: eight hours of pod logs across email, media, docs, daemon and security...

Kamo·1mo ago
Chorekamo-apps

Declare the chat site key, empty until one is issued

The chat bubble needs a public site key, and these are origin-locked — the marketing site's own would be refused on apps.<domain>. So the variable is declared a...

Kamo·1mo ago
Featurekamo-apps

Twenty-two languages, and the chat bubble

The application is the one surface on this platform whose reader has never signed in to anything and may not read English. It now offers the same twenty-two lan...

Kamo·1mo ago
Revertkamo-login

Drop the animated glimmer

Removes the corner-fading sheen added in 70d068c and 6810799 in full: both spinning layers, the conic gradients, the ring and envelope masks, and the extra z-in...

Kamo·1mo ago
Fixkamo-apps

The *** never ran, and seven things around it

**The *** could not work.** This fork of Capcha declares its endpoint attribute as `challenge`; I had set `challengeurl`, upstream's name. The widget was theref...

Kamo·1mo ago
Featurekamo-login

Fade the glimmer out at two corners, and cap it at half

The sheen now dies completely at the top-right and bottom-left corners and peaks, at half opacity, over the top-left and bottom-right. Each revolution reads as ...

Kamo·1mo ago
Featurekamo-login

Run a glimmer round the pane's gap every five seconds

A conic gradient centred on the pane, spun once per --glimmer-period, painted twice: a sweep filling the 15px gap, and a 2px rim on the pane's own border. The r...

Kamo·1mo ago
Featurekamo-apps

The mark returns to the rail, governed by the Apps Site Logo Overlay

Reverts the relocation in 47e6e39. The invisible-logo problem it worked around is real — a mark drawn in the company's own brand colour can vanish on a rail pai...

Kamo·1mo ago
Fixkamo-apps

Move the lender's logo off the brand rail — it was disappearing into it

Caught on the live page for a real customer. ABC Mortgage's logo is navy and orange; their brand colour is that same navy; the rail is painted in it. So the mar...

Kamo·1mo ago
FixSecurityService

Stop handing the database's own error text to whoever is signing in

The catch-all at the end of login() put e.getMessage() in the response body, and that body is rendered verbatim on the sign-in screen. On 2026-09-05 the excepti...

Kamo·1mo ago
Fixkamo-shared-library

Retry the two rights reads that stand between a password and a session

MemberRightsAppliedService carried @RetryOnDbConflict on its WRITE entry points only. The class therefore read as covered while the two methods the authenticate...

Kamo·1mo ago
Featurekamo-internal

One scrollbar, for every scroller in the app

The terminal tool window had a scrollbar worth keeping — 32px, with a button for each END of the scrollback as well as the usual step arrows, because in a long ...

Kamo·1mo ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing