KamoCRM

Live Change Log

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

18,400
Total Changes
6,534
Features
5,538
Fixes
30
Projects
Filter by project
All Projects18,400AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService622InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,996TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,694kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,534Fix5,538Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
September 7, 2026
FixSecurityService

A callback can carry the link to the call

The lead page composes a callback in the calendar's own dialog, and every field that dialog collects is meant to survive the trip through here. meetingUrl did n...

Kamo·2mo ago
FixVOIPService

Stop telling people to add the text provider they already added

Reported from a real setup, and the report was right. An organization running FreePBX added Telnyx as a text provider, opened the SMS window, and was shown Free...

Kamo·2mo ago
FixEmailService

A meeting link can be set, not only read

meetingUrl has been on the entity, in EventDto and in meetingSignature for as long as the dialog has existed, and nothing could ever write it. EventRequest did ...

Kamo·2mo ago
FixVOIPService

Tell a member the number is missing, not that their PBX cannot text

Reported from a real setup: an organization added Telnyx as a text provider, opened the SMS window, and was told "This phone server is a FreePBX PBX, which carr...

Kamo·2mo ago
FixEmailService

The join link reaches the guest's calendar, not just their inbox

An invitation carried its meeting link in the html body and nowhere else, so a guest who accepted it on Monday and opened their calendar on Friday had no way in...

Kamo·2mo ago
Fixkamo-internal

A knowledge-base link the member can actually click

The assistant's KB links did nothing at all. Not a wrong path and not a rights problem — the click handler was never called, because no click event was ever dis...

Kamo·2mo ago
Fixkamo-internal

The unread-chat card opened the member's mailbox

It carried deepLink: '/messages', which is the mail client. Chat has no route to point at — its window is a tool raised by a tool:open event — so the card navig...

Kamo·2mo ago
FixVOIPService

A frozen CHECK blocked every Telnyx AND JustCall provider from being created

Adding a Telnyx text provider 500'd. The log named it plainly and the screen said nothing useful: constraint **************** Failing row contains (..., 6)...

Kamo·2mo ago
Fixkamo-internal

The wallpaper was painting under the body, not failing to load

The launchpad backdrop — the plain gradient, the org watermark and the wallpaper slideshow it carries — has been completely invisible since 03743d02. Nothing fa...

Kamo·2mo ago
FixBillingService

A price Stripe has never heard of is a fault, not a silence

The reconciler compared mapped prices against the catalogue and returned early whenever nothing was mapped at all. So a term the catalogue had gained since the ...

Kamo·2mo ago
Fixkamo-internal

An expired card can no longer be the one you are billed to

Answering "is changing the default still there on Payment Info" — it was, and reading it turned up a defect worth more than the answer: nothing stopped an EXPIR...

Kamo·2mo ago
FixAPIService

Forward carrier SMS webhooks, which reached nothing at all

Traefik sends every path on api.kamocrm.com to this gateway with no path split, and this class forwarded /api/voip/** and nothing else. So /api/bulktext/inbound...

Kamo·2mo ago
FixAPIService

Forward carrier SMS webhooks, which reached nothing at all

Traefik sends every path on api.kamocrm.com to this gateway with no path split, and this class forwarded /api/voip/** and nothing else. So /api/bulktext/inbound...

Kamo·2mo ago
September 6, 2026
Fixkamo-internal

A NUL byte in two source files, which made git call them binary

Caught on a last pass over my own work: `billingDraft.ts` committed as "Bin 0 -> 6882 bytes". A separator written as a space had reached the file as a raw NUL b...

Kamo·2mo ago
FixEmailService

Watch a mailbox for the phone, not only for the browser

An IMAP IDLE listener is the only thing that notices a message arriving; it publishes email.inbox.<addr>, which is what eventually asks MediaService to buzz a p...

Kamo·2mo ago
FixMediaService

Stop the presence gate silencing every mail notification

A member with a live MediaService socket was treated as having already seen every non-call push, mail included. That is true of what travels on that socket — a ...

Kamo·2mo ago
Fixkamo-internal

Pay without leaving the order, and never lose it again

Sending somebody to another page to add a card was the wrong answer, and it was wrong at the worst possible moment. The console noticed there was no card and li...

Kamo·2mo ago
Fixkamo-internal

The app shell was capping every page under every scrollbar

My last fix was in the wrong file. Removing the stacking context from the launchpad changed nothing, because the one that matters is a level above it, in the sh...

Kamo·2mo ago
FixVOIPService

Ask whether THIS NUMBER can text, not whether the org can

SmsGateway grew a number-aware availability() when routing moved onto the number, and then nothing called it with a number — both SmsController call sites used ...

Kamo·2mo ago
Fixkamo-internal

The commitment term travels with the plan, not just the plan

Carrying the plan code alone was half a fix, and the missing half was the half that carries the price. Somebody who set three years on /myplan, saw $49 a seat a...

Kamo·2mo ago
Fixkamo-internal

Opening an attachment no longer throws React #310

Clicking a thumbnail threw "Minified React error #310 — rendered more hooks than during the previous render" over the whole page. Mine, from the attachment-aut...

Kamo·2mo ago
FixVOIPService

The "you cannot text" message stopped one step short of the fix

FreePBX and Teams told a member to add an SMS provider under Phone → Providers. That was complete advice until numbers gained their own text route; now adding a...

Kamo·2mo ago
FixVOIPService

Only the carrier that owns a webhook URL may verify its posts

The phone-server inbound path added in the previous commit verified against whatever provider carried the number. That is a forgery surface, and not hypothetica...

Kamo·2mo ago
FixVOIPService

A Telnyx phone server could send texts and never receive one

Telnyx is both a phone server and a carrier, and a Telnyx messaging profile has exactly one webhook URL. So an organization that added Telnyx as a PHONE SERVER ...

Kamo·2mo ago
Fixkamo-internal

One price on the screen, and a purchase that cannot fail silently

The console showed a customer three different numbers for one plan and let them buy with no card. Rendering it against the live catalogue, Business at five seat...

Kamo·2mo ago
Fixkamo-internal

Stop the launchpad capping its own dropdowns under every scrollbar

The admin bar's dropdowns were painting under the App Shelf's scrollbar, and lowering the shelf's z-index last time did not help — because the number was never ...

Kamo·2mo ago
FixBillingService

Charge what the screen says, and refuse rather than pretend

An audit of the Plans & Billing console against live Stripe keys found the seam between the screen and Stripe broken in every direction at once, and silent in a...

Kamo·2mo ago
FixVOIPService

Populate a new number before persisting it, not after

save() built an empty OrgPhoneNumber, persisted it, and then filled in E164 and PHONE_CANON — both NOT NULL. It works today because the UUID generator needs no ...

Kamo·2mo ago
Fixkamo-internal

Attachments authenticate like chat's, instead of showing broken

Every attachment on a bug report rendered as a broken tile. In production: seven content requests, seven 401s, zero successes — while the report's own JSON load...

Kamo·2mo ago
Fixkamo-internal

Anchor it to the first cell, and stop the scrollbar collapsing it

Three things, and two of them are the same mistake: asking a question about a portalled element as though it were a child. THE SCROLLBAR COLLAPSED THE PANE. Sc...

Kamo·2mo ago
Fixkamo-marketing

One source of truth, and a build that can actually reach it

Every price on this site had a second copy in the repo, and the second copy was the one being served. kamo-prices.ts said so in its own comment: the fallback t...

Kamo·2mo ago
FixInitializerService

Drop the frozen type_id CHECK that blocked every bug thread

`media_sessions` is created by Hibernate's ddl-auto, not by a migration, so it carries the constraint ddl-auto writes for an `@Enumerated(ORDINAL)` column — fro...

Kamo·2mo ago
Fixkamo-internal

Quote the real price, and stop the Free plan looking like the best one

Two things on this page were wrong in a way that reaches customers. The price. bestRate() took the cheapest rate across all three terms and printed it as "per ...

Kamo·2mo ago
Fixkamo-internal

The templates button called an endpoint that could not answer

Found by reading the controller rather than the code calling it, and it was broken twice over in a way that LOOKED fine: - The list asked for `status=ACTIVE`...

Kamo·2mo ago
Fixkamo-internal

Two rows tall, and it opens by widening rather than by a second pane

The pane was 861px tall, not the 496 its two rows ask for. The launchpad grid is gridAutoRows: minmax(106px, auto), and an auto maximum sizes a track to its ite...

Kamo·2mo ago
Fixkamo-internal

No explanation that lasts one frame, and a failure you can act on

A refused member was shown an info alert and redirected home in the same breath, so the message appeared for one frame and was replaced by the launchpad. That i...

Kamo·2mo ago
FixSecurityService

Wire the god guard into the identity-rights test's policy

UserAccountEditPolicy took a third constructor argument and this test still built it with two, so test-compile failed — and CI runs `mvn package -DskipTests`, w...

Kamo·2mo ago
Fixkamo-internal

The upgrade section said the opposite of the truth during a trial

A trialling organization's plan row really is FREE — the subscription points at it — while the trial has the whole catalogue switched on. The difference this se...

Kamo·2mo ago
Fixkamo-internal

Bridge SMS unread across the boundary the tool dock sits above

ToolDock is mounted in ToolProviders ABOVE AuthedChrome, deliberately, so it never unmounts across a navigation -- the single fact that keeps a member's typing ...

Kamo·2mo ago
Fixkamo-internal

Clear the shelf's edge, cap the pane's height, and read apps from one source

Three things a real browser found that the tests could not: - The pane anchored to the shelf's inner content column, so it opened a dozen pixels INSIDE the w...

Kamo·2mo ago
FixVOIPService

One send contract across all five providers, and stop dropping inbound texts

The SMS abstraction layer had five providers disagreeing about how to fail and an inbound path that discarded real customer messages in silence. Sending - Se...

Kamo·2mo ago
Fixkamo-marketing

Remove the footer picker, keep the ?holiday= parameter

The dropdown was a temporary control for the initial review of the eighteen scenes and it has served its purpose. The query parameter stays — it is the only way...

Kamo·2mo ago
Fixkamo-marketing

Stop the page-rotation easter egg re-firing on every trip to the footer

The reported lockup was never the holiday scenes. It is `HiddenAnimations`, which has been in this repo the whole time, and the report described it exactly: "so...

Kamo·2mo ago
Fixkamo-marketing

Stop the scenes hanging the tab

Reported: "after about a minute or two the page looks to animate away then animate back and its completely locked up. Browser wants to close the tab." Reproduce...

Kamo·2mo ago
Fixkamo-internal

One scrollbar on a data grid, not two

Every grid in the app drew two vertical bars — ours and the library's, side by side. Measured on /leads: ours at x∈[868,900], ag-Grid's at x∈[900,915]. ag-Grid...

Kamo·2mo ago
FixEmailService

Give the bug-status preview the denial block it now renders

SystemBugStatusEmail pre-renders two conditional blocks, and the admin preview has to supply both. Present and empty rather than absent: an unsupplied placehold...

Kamo·2mo ago
FixSecurityService

Keep the dispatch's status write in step with the denial reason

Two services move a system bug's status, and only one of them knew about the new denial_reason column. A dispatch applying IN_PROGRESS to a report that had been...

Kamo·2mo ago
FixInitializerService

Stop the operator seed re-granting revoked platform rights

Rights taken away from a platform administrator on Platform Admins came back on their own days later, which read from the console as a save that would not stick...

Kamo·2mo ago
Fixkamo-internal

Make the left seam move the LEFT edge, and put one on every window

Two things were wrong with the width gesture. **It moved the far edge.** `store.resize` writes a window's width and touches nothing else — not `dockX`, not the...

Kamo·2mo ago
Fixkamo-internal

Stop a horizontal scrollbar flashing under every tab switch

Every tab and sub-tab change in the Interaction Center slides the incoming pane in from x: 12 (the panel's tabs) or x: 10 (the Terminals workbench's). A transfo...

Kamo·2mo 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