KamoCRM

Live Change Log

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

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
September 8, 2026
FeatureMediaService

A whole game of chess, server-authoritative, over NATS

The rules live in ONE place and it is this one. ChessEngine implements the whole ruleset — move generation, legality under pin and check, castling, en passant, ...

Kamo·3w ago
September 7, 2026
FeatureMediaService

A reporter filter, for platform team members only

The board is global — every organization sees every report — and what protects a customer is SystemBugIdentityPolicy withholding WHO filed a row. A control that...

Kamo·3w 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·3w 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·3w 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·3w 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·3w ago
September 6, 2026
FeatureMediaService

The thread page names its reader, and drops an unused helper

`viewerMemberId` on the thread page, so the console can tell the viewer's own reactions from everybody else's without a second call to /api/user-info. A ref fil...

Kamo·3w ago
FeatureMediaService

The thread behind a report, and the two statuses that need one

`SystemBugThreadService` is the whole feature: a report's MediaSession, the status events written into it with the reason their author gave, the comments anybod...

Kamo·3w ago
FeatureMediaService

Let the reporter confirm their own fix, and carry a denial's reason

Adds POST /{id}/verify-fix — the one status change in this feature that is not gated on MANAGE_SYSTEM_BUGS. A separate endpoint rather than a hole in the one be...

Kamo·3w ago
FeatureMediaService

Relay coder usage onto a per-member topic

menu subscribes to over the existing chat STOMP connection. Built as a twin of the training relay — same subject shape, same single-token rule, same core-NATS-...

Kamo·3w 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·3w ago
September 5, 2026
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·3w ago
FeatureMediaService

Send the sender's avatar with the message and its push

The chat notification carried `senderAvatar: ""` with the comment "avatar resolved on frontend", and the push carried no avatar at all. A browser can resolve on...

Kamo·3w ago
September 4, 2026
FeatureMediaService

Send an org's own hostname as the meeting OAuth redirect

The same rule the mailbox flow now follows, for Zoom and Teams meetings: an organization on its OWN app registered that app against api.<its own domain>, so tha...

Kamo·3w ago
FeatureMediaService

Make MediaService correct on more than one pod, and run two

MediaService has only ever run a single replica, so a deploy of it was a total chat outage and an OOM was the same. It could not run two, for reasons that were ...

Kamo·3w ago
FeatureMediaService

An EMAIL type, and every push now names its org

EmailService raises the notification off IMAP IDLE and asks MediaService to deliver it through the internal dispatch endpoint that exists for exactly this — eve...

Kamo·3w ago
FeatureMediaService

Let a god-mode operator file a system bug privately

Posting a report now offers a Publish switch to an operator with an open god-mode window. It defaults to off: the report stays with god mode until somebody rele...

Kamo·3w ago
FeatureMediaService

Resolve Canva, Meta, X and meeting credentials per organization

Every flow here now reads whichever app the org is on — its own registration if it brought one, otherwise Kamo's platform app. The Canva and Meta entry points ...

Kamo·3w ago
September 3, 2026
FeatureMediaService

Ring a member's phone for an incoming call

VoipStompRelayController relayed voip.call.* ringing events to the browser and deliberately never pushed them, reserving incoming-call alerting for 'the future ...

Kamo·3w ago
August 30, 2026
FeatureMediaService

Send the quote with a reply, not just the pointer

media_objs_msg.parent_id has been there all along and this endpoint has accepted parentId on the way in since threading was modelled, but a reply crossed the wi...

Kamo·4w ago
FeatureMediaService

Leave a group chat, and keep join/leave lines in the transcript

Leaving is DELETE /sessions/{guid}/membership, not removeMember aimed at yourself — that route refuses self-removal on purpose. Removal is done TO somebody and ...

Kamo·4w ago
FeatureMediaService

Name a group chat, star a conversation, remove somebody from a room

Three routes, and each refusal is a rule somebody has to be able to tell apart from an outage — so each carries its own code rather than a shared 4xx. DELETE *...

Kamo·4w ago
August 27, 2026
FeatureMediaService

Email the reporter when their bug or enhancement changes status

Triage was silent. Somebody filed a report and then had to keep opening the tab to find out whether anyone had looked at it — which is the same as not being tol...

Kamo·4w ago
FeatureMediaService

Per-viewer read state, a live badge, and per-status counts

THE BADGE WAS ABOUT THE QUEUE, NOT ABOUT YOU. /new-count counted every NEW report platform-wide, so it could only fall when somebody moved a status — reading th...

Kamo·4w ago
FeatureMediaService

Attach a video to a bug report, not only a screenshot

A still cannot show the three clicks before the thing broke, so reporters were describing recordings in prose and posting the file into a chat instead. The atta...

kamo·4w ago
FeatureMediaService

React to a message with an emoji, and correct one you sent

POST **************** sets or clears the caller's emoji and answers with the message's whole reaction set, so a client that raced itself converges on the server...

kamo·4w ago
August 25, 2026
FeatureMediaService

GET /api/webinar/presenting

The webinar types the CALLER is a presenter for. The calendar asks this before it offers an availability layer at all: hours declared by a member no type lists ...

Kamo·4w ago
FeatureMediaService

Tell a member about a webinar booked on their behalf

Not gated on a webinar right, unlike the ticket counters: the case this exists for is one where the member took no action at all, so requiring the right to requ...

Kamo·4w ago
FeatureMediaService

Count unreviewed bug reports for platform admins

Zero for an ungated caller rather than a 403: the nav polls this on every page load for every member, and an error they must routinely swallow is how real error...

Kamo·4w ago
FeatureMediaService

Route unread snapshots to their own STOMP topic

Everything on voip.> went to one topic, whose browser subscriber plays the SMS arrival sound and opens a tool window for every frame. A badge refresh there woul...

Kamo·4w ago
FeatureMediaService

Refresh unread badges when a visitor message lands

persistInbound announces its own message (publishRealtimeEvent=false, so a visitor's reply does not render as the owner's), and in doing so also skipped the unr...

Kamo·4w ago
FeatureMediaService

Resolve bookable times from member availability

Availability is now computed rather than stored. MemberAvailabilityService owns the arithmetic: expand each presenter's declared windows over the type's booking...

Kamo·4w ago
FeatureMediaService

Naming a site is optional

It was required, and requiring it was wrong. A site is a hint for whoever picks the report up — a member who is not certain which of five surfaces they were loo...

Kamo·4w ago
FeatureMediaService

File a bug or an enhancement

The type is refused rather than defaulted on a write: an enhancement quietly filed as a bug sends the AI session hunting for a fault that was never there. It is...

Kamo·4w ago
FeatureMediaService

Deliver cluster alerts into a member's chat thread

Alertmanager webhook receiver at /api/internal/alerts/chat, so a KamoDesktop alert reaches a person instead of a dashboard. This is the BEST-EFFORT leg. Email ...

Kamo·4w ago
FeatureMediaService

Bug CRUD, screenshots and the one visibility rule

A system bug crosses the tenancy line in one direction: the platform organization sees every tenant's, and no tenant sees another's. That rule lives in ********...

Kamo·4w ago
FeatureMediaService

Guard social messaging and Canva at their credential chokepoints

SOCIAL_MESSAGING is enforced in SocialCredsResolver.resolve — the narrowest point covering every adapter and both directions. No credentials means no Telegram, ...

Kamo·1mo ago
August 24, 2026
FeatureMediaService

The Affiliate Sales Scoreboard endpoint

GET **************** answers this organisation's top ten for one metric over one window, plus the caller's own standing when they are not on it. The counters o...

Kamo·1mo ago
FeatureMediaService

Refuse meeting recording for a tenant that handles PHI

The capability split made ServiceType.MEET permitted — a live conference on self-hosted Meet never leaves the cluster — while MEETING_RECORDING stayed blocked, ...

Kamo·1mo ago
FeatureMediaService

Let the public config be addressed by org id, not only by host

The meet sidecar looks up an org's meet config to decide whether a guest needs a meeting password. It asked by hostname, which on the shared meet host resolves ...

Kamo·1mo ago
FeatureMediaService

Carry the type description in both of its shapes

The description is a Lexical document now, so the service stores the plain-text mirror the client sends alongside it and hands readers whichever shape they can ...

Kamo·1mo ago
August 22, 2026
FeatureMediaService

Relay "the classic version was just saved" to the editor

DocsService publishes docs.classic-saved.{memberId} after a WOPI save lands on a CLASSIC version; this puts it on /topic/docs/saves/{memberId} over the STOMP co...

Kamo·1mo ago
August 21, 2026
FeatureMediaService

Enforce the org chat policy, and close two holes it sat on

Applies the policy at the three places a conversation can start or continue: session creation, member adds, and the send path. A room is not policed pair by pai...

Kamo·1mo ago
FeatureMediaService

Put the requestor's face and name on each support chat row

A Chats → Support row showed the same support glyph on every line, so a queue of them was a wall of identical blue circles. The face people actually scan for is...

Kamo·1mo ago
FeatureMediaService

Name the requestor's org, and end System User access when the ticket moves

Three things, all about a support desk that answers more than one tenant. The ticket detail now carries a per-viewer verdict on whether to offer "open the requ...

Kamo·1mo ago
August 20, 2026
FeatureMediaService

Mint an opaque UUID token, in one insert

createCode generates the token itself, so there is nothing to read first and nothing for two tabs to collide over. That removes the whole apparatus the old sequ...

Kamo·1mo ago
FeatureMediaService

Move credit on a newer link, and record the moment it moves

The ingest worker now calls reattributeWhileAnonymous after the traffic bumps. The repository method carries the entire rule, so there is nothing to check here ...

Kamo·1mo ago
FeatureMediaService

Serve the tracking-codes tab and ingest the visitor beacon

MediaService already backs the other marketing tabs, so it takes both halves of tracking codes: the authenticated CRUD and stats surface at /api/media/marketing...

Kamo·1mo ago
August 15, 2026
FeatureMediaService

Creating and resolving a meeting take the rights that name them

/api/meet/create checked only that you had a session, so every authenticated member of every organization could create a meeting with the org's provider — START...

Kamo·1mo ago
August 14, 2026
FeatureMediaService

Relay the outstanding-course count onto the member's own topic

The twin of the legal relay, because NavTop sums the two counts into one badge and a pair of halves that behaved differently would give the member chrome that w...

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