KamoCRM

Live Change Log

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

18,419
Total Changes
6,549
Features
5,540
Fixes
30
Projects
Filter by project
All Projects18,419AIService276APIService178BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService623InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService621RAGService79SecurityService2,000TranslateService62VOIPService265VectorService11kamo-apps27kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,702kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,829kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,549Fix5,540Other1,001Performance174Refactor283Revert23Style45Test175Upgrade1
September 7, 2026
Featurekamo-internal

The browser half of the fifty easter eggs

THE CLAIM ROUTE DID NOT EXIST. The Java endpoint has accepted CLIENT claims since the catalogue's first ones shipped, but nothing in Next forwarded to it and no...

Kamo·2mo ago
Featurekamo-internal

An hourglass sprite for the Loitering track

The catalogue guard gives every TRACK a sprite no other track and no single action wears, so the ninth track needed its own 16x16. Drawn three times before it ...

Kamo·2mo ago
Fixkamo-internal

A bulk action announces the folder changed, like opening one message does

`email:folder-changed` is what the nav badge listens for while it is not being pushed a count — a socket that never came up, or one that came up and relays noth...

Kamo·2mo ago
Fixkamo-internal

The nav badge follows a message being read, instead of waiting for a reload

The badge treated the STOMP socket being UP as proof that counts were being pushed to it, and those are two different questions. EmailService relays the count f...

Kamo·2mo ago
Fixkamo-internal

A lead outside the US lost its number's country code

The lead view read "+373 606208888" back as "606208888". `formatPhoneDisplay` chose between national and international form by comparing the number's calling co...

Kamo·2mo ago
Fixkamo-internal

The repeating sound survives a tab nobody is looking at

"Repeat sound" saved correctly and did nothing audible. The deck beat the tone out with setInterval, and Chrome clamps timers in a page that has been hidden for...

Kamo·2mo ago
Fixkamo-internal

The leaderboard called everyone on it a former member while it loaded

The board and the names come from two different places, and the names come second. The board is one request to SecurityService; the names are the shared member ...

Kamo·2mo ago
Fixkamo-internal

The contact-effect editor's accent is the org's primary, not a fixed purple

The editor painted its reset control and its "Following the shipped default" helper lines in #8b5cf6, hardcoded four times over — the shared editor's default pl...

Kamo·2mo ago
Featurekamo-internal

Contact Effects moves inside Audio, Video & Controls

It was a top-level tab on the member page, sitting beside Audio & Video and answering the same question — what this shell does under your own hands. It is now t...

Kamo·2mo ago
Fixkamo-internal

The storage meter's trough was black, which is most of the bar

Reported twice, and the first fix missed it. That pass corrected every foreground and left the trough at rgba(0,0,0,0.28) with a black inset shadow, on the reas...

Kamo·2mo ago
Fixkamo-internal

The dock was reserving space for its own scrollbar, and walking left

A docked window crept left in 38px steps and then jumped back to the right edge, over and over, for as long as it was open. `rightEdgeReserve` accepts a scroll...

Kamo·2mo ago
Fixkamo-internal

Remove the mock desktop dialog, and guard against it coming back

The celebration layer's corner alert reproduced a named third party's interface chrome — its title bar gradient, its double bevel, its close box — and said the ...

Kamo·2mo ago
Featurekamo-internal

The celebration engine — an arcade machine installed inside the CRM

/achievements was already a 1987 cabinet, and nothing ever HAPPENED on it. This is the layer that happens: a banner that drops from the top shouting ACHIEVEMENT...

Kamo·2mo ago
Fixkamo-internal

Round the artwork's corners

The picture sat square inside a pane with a 16px corner, cutting a rectangle out of the glass. 12px on the wrapper — the same radius the drop veil uses — and th...

Kamo·2mo ago
Fixkamo-internal

Make the cabinet as tall as its own content

The page was dark for one screenful and then white for the rest of the scroll. `PageWrapper` is `height: 100%` with `flex-direction: column`, so every route in...

Kamo·2mo ago
Featurekamo-internal

Resolve contact effects through four layers, with a tab at the platform and the member

Contact effects were a single per-member setting on one organization page. They now resolve exactly the way event sounds do — shipped catalogue, then the platfo...

Kamo·2mo ago
Featurekamo-internal

Eighteen sprites for the single-action achievements

Thirty-five new achievements arrived in the catalogue and every one of them was rendering the padlock fallback, because all eight existing sprites belong to the...

Kamo·2mo ago
Featurekamo-internal

Skins — the one bar, wearing a different machine's clothes

The scrollbar already let a surface tint itself: five custom properties on the scroller, inherited, read by the overlay. For every screen in the app that is the...

Kamo·2mo ago
Featurekamo-internal

24 more contact effects, grouped by character rather than by geometry

The catalogue sorted itself by what an effect DID — converging, expanding, lively. Nobody opens a settings pane wanting "something that expands"; they want some...

Kamo·2mo ago
Featurekamo-internal

Make the contact effect a choice — 24 of them, one dropdown per event

The six animations shipped last change were hard-wired to the six contact events. They are now a catalogue any of which binds to any event, and the member picks...

Kamo·2mo ago
Fixkamo-internal

The white band under the cabinet

The application's `body` and `html` are `--background: #ffffff`, and this route is the one dark surface in it. The page element is `min-height: 100%` so it fill...

Kamo·2mo ago
Testkamo-internal

Pin the storage meter to white, and ship the fix past a dead runner

A source-level guard rather than a rendered assertion, because none of what went dark is visible to a rendered one. Three of the four faults were dark for only ...

Kamo·2mo ago
Fixkamo-internal

Every foreground on the storage meter is white

Reported unreadable, and it was. Four places went dark or coloured where the rest of the component is white on a dark ground: - The "Add 10 GB" button was #0b0...

Kamo·2mo ago
Featurekamo-internal

A storage meter beside My Widgets, for the owner who is filling up

An owner had no way to know how much of their plan's storage they had spent without opening a settings tab they had no reason to open. The bar that told them li...

Kamo·2mo ago
Testkamo-internal

Fail the build on a character the bitmap font cannot draw

A codepoint Press Start 2P lacks does NOT render as tofu. The browser silently falls back to a system font, so the character appears, correctly shaped, and mere...

Kamo·2mo ago
Featurekamo-internal

Tear the page down and rebuild it as an arcade cabinet

Two things were wrong and the first one is a rule, not a preference. FULL WIDTH. The page shipped with `maxWidth: 1240, margin: '0 auto'` inside a content area...

Kamo·2mo ago
Featurekamo-internal

An animation at the point of contact, six of them, one for each way a press can happen

Left down, left up, middle down, middle up, touch down and touch up each get their own animation around the point of contact. They are one family rather than si...

Kamo·2mo ago
Fixkamo-internal

A scrollbar 17px in from the edge is still a scrollbar the dock must not cover

The tool dock reserved the right edge for a page's vertical scrollbar only when that bar was AT the edge — within two pixels, for sub-pixel rounding. Almost no ...

Kamo·2mo ago
Fixkamo-internal

The Accounts app was billed as Human Resources, so the Free plan lost it

The `accounts` option was gated on `organization.isHrs && VIEW_EMPLOYEES`. Neither half is what /account is: its own backend enforces VIEW_ACCOUNTS (CRM) on the...

Kamo·2mo ago
Fixkamo-internal

Three React Compiler errors, and what each of them was really saying

The compiler rules caught three things in the achievement surfaces, and none of them was a style complaint. A component aliased into a local during render (`co...

Kamo·2mo ago
Fixkamo-internal

A two-level jump published two frames and the browser kept one

`useMediaTopic` holds ONE message slot and overwrites it, so two frames arriving in the same tick are batched by React into a single render and only the last is...

Kamo·2mo ago
Featurekamo-internal

Growth Hub — one thing at a time, beside the App Shelf

The launchpad pane a member works their organisation's growth requests through, and the Marketing settings tab an admin writes and reviews them from. `WidgetDe...

Kamo·2mo ago
Featurekamo-internal

A trophy cabinet, and a celebration that finds the member

Adds the Achievements surface: the trophy in the rail, /achievements, the launchpad leaderboard, and the unlock popup that arrives over whatever page a member h...

Kamo·2mo ago
Fixkamo-internal

The docked row has one height, and no way left to arrive at another

Resizing a docked window's top edge moves every window's top edge — the row sits on the bottom with its tops in a line, and a row of different heights is a ragg...

Kamo·2mo ago
Featurekamo-internal

The board every org can read, and a vote on every improvement

The organization column is on for everybody now, because every viewer sees every organization's reports. What varies is whether a given ROW can be named, and th...

Kamo·2mo ago
Otherkamo-internal

Merge branch 'main' of ****************

Kamo CI·2mo ago
Featurekamo-internal

A way onto a paid plan that is not hidden under a profile

An owner deciding whether to pay had to know the answer lived under their own profile, three clicks from the page they open every morning, signposted only by a ...

Kamo CI·2mo ago
Featurekamo-internal

Give a member their text numbers, and let them choose which one sends

Two screens, one idea: a phone line usually is not one person's. MEMBER SETTINGS → PHONE A card modelled on the Email tab's mailbox list, because the two scre...

Kamo·2mo ago
Fixkamo-internal

The launchpad hid the App Shelf to say the member had no apps

A member granted an app or two and no widget right — Support and the Knowledge Base, say — opened their launchpad to "No apps yet. You don't have access to any ...

Kamo·2mo ago
Fixkamo-internal

A meeting link the member can set, and one guest row per guest

Two halves of "Add external guest to meetings does not send an email to that person". The link. meetingUrl came back from the API, was bound to nothing, and co...

Kamo·2mo ago
Featurekamo-internal

The repeat interval goes down to one second

Asked for on 2026-09-06. The floor was five; it is one everywhere now — the control, the clamp the browser applies, and the clamp the service applies. Zero is s...

Kamo·2mo ago
Featurekamo-internal

One checkbox on a callback, to tell the lead

The callback dialog hid the invite controls, and the note under it said "The lead is not notified." That was true, and it was the right call for the control bei...

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
Featurekamo-internal

Tell me about new mail and unread chat, and keep saying it

Two more tiles under "What you are told about", and the two things behind them. New email is raised off the inbox socket the app already holds open. Unread cha...

Kamo·2mo ago
Chorekamo-internal

The last two files git was treating as binary

Finishing the sweep that started when my own billingDraft.ts committed as "Bin 0 -> 6882 bytes". Scanning every tracked text file for a NUL byte found three mor...

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
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
Featurekamo-internal

Show the URL a carrier has to be told to post to

Adding a text provider covers sending. Receiving needs the carrier told where to deliver, which happens in the carrier's own console — and the form never said w...

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

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