KamoCRM

Live Change Log

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

17,496
Total Changes
5,984
Features
5,283
Fixes
30
Projects
Filter by project
All Projects17,496AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices738MCPGatewayService249MediaService602RAGService79SecurityService1,847TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,254Feature5,984Fix5,283Other994Performance165Refactor278Revert23Style42Test160Upgrade1
September 7, 2026
FeatureSecurityService

An owner's storage position, carried on a payload that already exists

The launchpad is getting a storage meter, and the obvious way to feed it is a request of its own on every page load. The numbers do not deserve one: "used" come...

Kamo·1mo ago
Featurekamo-shared-library

How fast an organization's storage is growing

The snapshot table has recorded a daily position per organization since metering began, and nothing read two rows of it together. So the only question storage c...

Kamo·1mo 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·1mo ago
FeatureMediaService

An approval settles the member's achievement

Approving a submission now tells SecurityService to recount that member's SPREAD_THE_WORD standing, so the trophy lands in the same second as the decision rathe...

Kamo·1mo ago
FeatureSecurityService

Award SPREAD_THE_WORD from the Growth Hub

**************** counts a member's APPROVED Growth Hub submissions and settles their SPREAD_THE_WORD level against that count. It RECOUNTS rather than being to...

Kamo·1mo ago
Featurekamo-shared-library

SPREAD_THE_WORD, a nine-level Growth Hub track

The second entry in the catalogue, and the first that is a track rather than an event. One level per stretch of Growth Hub missions a member has had APPROVED: 1...

Kamo·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FixSecurityService

The baseline award was two transactions, not one

`ensureBaselineFor` calls `ensureBaseline` on `this`, and Spring's transaction advice is a PROXY — a self-invocation does not pass through it, so the inner REQU...

Kamo·1mo 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·1mo 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·1mo 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·1mo ago
FeatureMediaService

The queue a member works through, and the queue an admin reviews

MediaService's Growth Hub surface at /api/media/marketing/growth. It owns this for the same reason it owns tracking, the scoreboard, materials and Canva — and b...

Kamo·1mo ago
Featurekamo-shared-library

The requests an org asks of its people, and the evidence back

Three entities, seven rights and two enum appends behind Growth Hub: a short ordered list of things an organisation asks of everybody — leave a review, share th...

Kamo·1mo 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·1mo ago
FeatureMediaService

Relay an unlock to the member it happened to, and to nobody else

SecurityService publishes **************** on core NATS; this puts it on **************** Same arrangement as the training badge, and for the same underlying re...

Kamo·1mo ago
FeatureSecurityService

Award Join The Team to everybody, without a backfill

SecurityService owns the member, so it owns the achievement. It awards, reads, acknowledges and publishes; MediaService only relays. EVERY MEMBER GETS JOIN THE...

Kamo·1mo ago
Featurekamo-shared-library

The achievement a member holds, and the record that proves it

Adds the Gamification app and the domain behind it: a catalogue of achievements in code, a member's standing in data, and a log of every unlock so that nothing ...

Kamo·1mo ago
OtherVOIPService

Record what the carrier says happened to a text, and check 10DLC before it matters

Sending now succeeds and nothing arrives. Telnyx accepts the message, returns an id, and Verizon then refuses to deliver it: status delivery_failed code ...

Kamo·1mo 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·1mo ago
OtherVOIPService

Normalise the sender at the gateway, and stop calling a refusal retryable

The previous commit normalised the sender number where it is stored in the number inventory and on the carrier, and the send still failed with the same carrier ...

Kamo·1mo ago
OtherVOIPService

Normalise sender numbers to E.164 before they reach a carrier

Sending a text failed with "The message could not be sent. Try again in a moment.". Telnyx's own answer, from the voipservice log, was specific: Telnyx POST ...

Kamo·1mo ago
TestMediaService

Parse every declared query, not the two somebody remembered

The three queries this feature added were never parsed by anything. That matters more than a wrong predicate would: Spring Data validates every @Query while it ...

Kamo·1mo ago
FixMediaService

A redacted status event kept its type, and pin the redaction

Two things, both found by writing the test for the actorName path rather than by reading it. messageType was being read off the body AFTER redaction. redactEve...

Kamo·1mo 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·1mo ago
FeatureMediaService

Open the board to every org, withhold who filed each report

The tenancy check is gone from visibleOr404 and from all four queries, so every organization can read, comment on and vote on every report. SystemBugIdentityPol...

Kamo·1mo ago
Featurekamo-shared-library

Every org sees every report, and improvements can be voted on

The tenancy predicate is gone from all four queries, and its absence is the feature: a defect in the platform is not one tenant's private business, and a reques...

Kamo·1mo ago
Otherkamo-internal

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

Kamo CI·1mo 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·1mo 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·1mo ago
FeatureVOIPService

A number can be shared by several members, and one of them receives it

A single OWNER_MEMBER_ID could say "this number belongs to Sarah" and nothing else. Real desks are not shaped like that: a support line is answered by four peop...

Kamo·1mo 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·1mo ago
FixEmailService

A service may change a meeting's link, and the room is told

updateEvent restated the title, description, location, colour, timezone and deep link, and dropped meetingUrl — so a link added to a callback that had already b...

Kamo·1mo 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·1mo 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·1mo ago
FixEmailService

A preference PUT was resetting every setting it did not mention

Reported as "when I enable repeating sound it does not save". It saved. Then the next preference the member touched turned it off again — and the settings page ...

Kamo·1mo ago
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FeatureSecurityService

A callback can invite the lead it is with

Scheduling a callback told the lead nothing. The dialog said so outright — "The lead is not notified" — and the only way to get a customer the time in writing w...

Kamo·1mo ago
FeatureEmailService

A guest a service put on an event is actually told about it

InternalCalendarService wrote the attendee rows and stopped. It never set sendInvites and never called EventInviteService, so a guest arriving through the servi...

Kamo·1mo ago
Featurekamo-shared-library

The three letters a lead gets about a callback

A callback has always been private to the organisation. The member who books one gets a calendar entry and a reminder; the person on the other end of the call i...

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