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
August 20, 2026
Fixkamo-shared-library

Move the pool-availability recount after commit

createLead saved the lead and then, in the same transaction, ran countAssignablePool to broadcast the new "Leads Available" figure. On YugabyteDB a read after a...

Kamo·2mo ago
Featurekamo-internal

Offer Company Name as a mappable import field

leadFields.ts is the list the mapping canvas draws from, and it must mirror the backend switch in LeadImportController — a path missing from either side is acce...

kamo·2mo ago
FeatureSecurityService

Map companyName so a spreadsheet can carry the business name

setDirectFieldOnCreateRequest had no companyName case, so the field was unreachable from the manual-import wizard even though CreateLeadRequest carries it and L...

Kamo·2mo ago
FeatureDaemonService

Let a mapped payload carry companyName and source

The intake job's direct-field switch stopped at vendorLeadID, so a mapping onto companyName or source was accepted by the UI, stored on the endpoint and then si...

Kamo·2mo ago
Performancekamo-marketing

Serve static assets as build-time brotli

The flagged chunk is react-dom, and I checked it properly before concluding anything: it is the production build (no dev markers, and the profiling hooks `injec...

Kamo·2mo ago
Performancekamo-marketing

Drop the unused preconnect, and fix the 565 ms of brotli I added

Two findings, and the second one was mine. THE DOCUMENT TOOK 1,259 ms BECAUSE OF THE NONCE WRAPPER. Measured against the live site: the HTML answered in ~900 ...

Kamo·2mo ago
Featurekamo-marketing

Put the headline's swept band back

Restored exactly as it was — same two-layer gradient, same 120deg band, same 9s/1.1s timing and easing — after removing it in the compositing pass. The cost is...

Kamo·2mo ago
Performancekamo-marketing

Move every looping animation onto the compositor

All 26 elements Lighthouse listed under "avoid non-composited animations" were the same mistake in four places: animating a paint property. Measured with Chrome...

Kamo·2mo ago
Featurekamo-internal

Retitle Modified to Converted and fix two tab icons

Both tabs wore an icon that already means something else in this grid: the Modify tab used GetApp, the row-level download button, and Converted used EditNote, t...

kamo·2mo ago
FixMediaService

Stamp every unread frame with the instant its counts were read

The four places that built a member's unread snapshot — the REST read, the frame sent when a message arrives, the frame sent when a session is marked read, and ...

Kamo·2mo ago
Fixkamo-internal

Clear the unread badge for a conversation the member is reading

The badge was fed by two unordered sources — the REST unread read and MediaService's unread topic — and applied whichever landed last, with nothing ever re-read...

kamo·2mo ago
Featurekamo-internal

Choose which page a tracking link lands on

A code is not tied to a page — the marketing site captures it site-wide — so the only real question when sharing one is where the visitor should land. The produ...

kamo·2mo ago
Fixkamo-marketing

Catch the silent version of "sound is not allowed here"

Follow-up to the still. Testing tap-to-play against the deployed site turned up a failure mode the muted fallback did not cover. A refused `play()` rejects, an...

Kamo·2mo ago
Fixkamo-internal

Show the code as a handle, not 36 characters of hex

Moving the token to a UUID left the grid rendering the whole thing, which is correct in a URL and useless in a table: it cannot be scanned, compared against the...

kamo·2mo ago
Fixkamo-marketing

The microservice count reads 64+, not 30+

The number is 64+ services now. Five untranslated surfaces still claimed 30+: the technology answer in the homepage FAQ JSON-LD (which is what a search result q...

Kamo·2mo ago
Featurekamo-marketing

Show a still of the reel instead of a grey pulse

Adds public/img/hero-still.webp — 1280x720, matching the aperture's 16/9 exactly — and makes it what the hero shows until someone presses play. This also fixes...

Kamo·2mo ago
FixKlusterServices

Cache CORS preflights for two hours, not 100 seconds

`accessControlMaxAge: 100` meant browsers re-ran the preflight roughly once per visit, so every page load on the marketing site paid two extra OPTIONS round-tri...

Kamo·2mo ago
Performancekamo-marketing

63 HTTP requests down to 22

Implements the request-budget report. Measured the same way it was written — Chrome over the debugging protocol, mobile emulation, sixteen-second window. 6...

Kamo·2mo ago
Featurekamo-internal

Build the shared link as ?discount=<uuid>

buildTrackingLink emits the new parameter, and the link strip highlights the ?discount= segment it used to highlight as ?mrt=. The token itself is now an opaque...

kamo·2mo ago
Featurekamo-register

Read the discount cookies and send the discount* fields

Follows the marketing site: kdsc_vid / kdsc_src, with ?discount= as the query-param fallback for a visitor who lands on the register form with the link still in...

Kamo·2mo ago
Featurekamo-marketing

The referral parameter is ?discount= and the token is a UUID

The link a member shares is **************** It used to be ?mrt=<memberId>.<iteration>, which put a real member id in every shared URL and let anyone enumerate ...

Kamo·2mo ago
FeatureSecurityService

Accept the discount* signup fields, keep the mrt* ones working

The register site now sends discountVisitorGuid / discountCode. Both names are read, new first, because the two services deploy independently — for the minutes ...

Kamo·2mo ago
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·2mo ago
Featurekamo-shared-library

Make the shared token an opaque UUID

The public token was <memberId>.<iteration>, which was wrong on two counts. It published a real member id in every link anyone shared — on a business card, in a...

Kamo·2mo ago
FeatureInitializerService

Retire ****************

Tracking codes are shared as ?discount=<uuid> now. The old <memberId>.<n> token published a real member id in every shared link and made the space walkable — on...

Kamo·2mo ago
Performancekamo-marketing

The reel was never using hls.js, and phones paid for it

Chasing "make fewer HTTP requests" found two real things, and the second is much larger than the audit that led to it. THE HLS BRANCH NOBODY WAS TAKING. HeroSt...

Kamo·2mo ago
CIkamo-marketing

Retry npm ci through the runner's transfer corruption

The build failed on: npm error code ERR_SSL_CIPHER_OPERATION_FAILED ossl_gcm_stream_update:cipher operation failed That is a GCM authentication-tag mi...

Kamo·2mo ago
Fixkamo-marketing

Clear every console error and DevTools issue

Diagnosed with Chrome over the debugging protocol rather than by reasoning, collecting exactly what Lighthouse's errors-in-console and inspector-issues audits c...

Kamo·2mo ago
Featurekamo-marketing

Serve a real per-request CSP nonce with strict-dynamic

Clears both remaining High findings on script-src: the 'unsafe-inline' one and "host allowlists can frequently be bypassed". Only a nonce with 'strict-dynamic'...

Kamo·2mo ago
Featurekamo-marketing

Enforce Trusted Types, path-scope the script allowlist

Clears the "No Content-Security-Policy header with Trusted Types directive found" finding by moving require-trusted-types-for into the enforced policy. This is...

Kamo·2mo ago
Fixkamo-marketing

Clean the console, and restore the static rendering I broke

Three things from the console, one of them much bigger than the other two. THE BIG ONE. Chasing the "Fetch failed loading" lines led to the prefetch payload, a...

Kamo·2mo ago
Fixkamo-marketing

The Trusted Types policy was being injected by next/script

The report-only console showed two violations, and one of them was the policy component's own doing: This document requires 'TrustedScript' assignment. Thi...

Kamo·2mo ago
Featurekamo-internal

Show when a visitor's credit moved to another link

The timeline gains ATTRIBUTION_MOVED, in the warn tone — not a conversion and not a failure, but the moment this visitor stopped being this member's to earn fro...

kamo·2mo 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·2mo ago
Featurekamo-shared-library

Credit the newest link until an account exists, then freeze it

Attribution was frozen at first touch, which gets the common case wrong: someone who follows member A's link in March and member B's in June, and only then sign...

Kamo·2mo ago
Featurekamo-internal

Move Windows Desktop and Master Machine into Platform Admins

Both are Guacamole targets that share one credential between everybody, which makes them operator tooling rather than a member's own workspace. They were top-ba...

kamo·2mo ago
Featurekamo-marketing

CSP and COOP enforced; Trusted Types report-only

Re-lands the security headers after I took the site down with them, minus the one directive that did it, plus a build guard so it cannot happen again. WHAT BRO...

Kamo·2mo ago
Otherkamo-marketing

Revert "feat(security): enforce a CSP, COOP and Trusted Types"

This reverts commit ****************

Kamo·2mo ago
Featurekamo-marketing

Enforce a CSP, COOP and Trusted Types

Adds the three headers the Trust and Safety audit asked for, plus Referrer-Policy and Permissions-Policy. Every origin in the policy was taken from what the sit...

Kamo·2mo ago
FixKlusterServices

Stop the edge rate limit from 429ing every cold KamoDesktop load

Opening an assigned Linux instance always landed on Guacamole's generic "An error has occurred and this action cannot be completed" modal, and always worked aft...

Kamo·2mo ago
Fixkamo-internal

A popup with nowhere to dock now overlaps instead of not opening

A tool window — the email composer, a support conversation, a chat, the softphone — would sometimes simply not appear, and be fine after a reload. Three silent ...

kamo·2mo ago
Performancekamo-marketing

Stop re-measuring the document on every scroll frame

Two scroll listeners on the homepage read `scrollHeight` per event. That is a layout query, and this page is the worst place to make one repeatedly: its section...

Kamo·2mo ago
Fixkamo-internal

Say which link the strip is offering

"Your tracking link" showed exactly one link while a member can hold any number of them, so the strip silently rendered whichever code the sort put first and ga...

kamo·2mo ago
Performancekamo-marketing

Drop backdrop-filter on phones

The homepage renders 94 elements carrying `backdrop-filter: blur(20px)`. Every one is a separate compositing layer that has to read back everything painted behi...

Kamo·2mo ago
Performancekamo-marketing

Take the footer and the scroll chrome off the client

Three changes, all removing work from the window where the page is being judged. `(pages)/layout.tsx` carried `"use client"` and never needed it — no state, no...

Kamo·2mo ago
Performancekamo-marketing

Stop three resources from outranking the LCP element

The LCP breakdown is where the remaining time is, and its two loading subparts — 270 ms of resource load delay, 500 ms of load duration — are a priority problem...

Kamo·2mo ago
Fixkamo-marketing

A fixed-position banner cannot use a scroll-driven reveal

Fallout from the framer sweep, caught before it could matter. The rewrite maps entrance animations onto `.reveal`, which is driven by `animation-timeline: view(...

Kamo·2mo ago
Performancekamo-marketing

Remove gsap, the second animation runtime on the homepage

Framer was the chunk Lighthouse named. GSAP is the one it did not, because it arrives late enough to fall outside "unused JavaScript" — but it is 69 KB in its o...

Kamo·2mo ago
Fixkamo-marketing

The platform runs YugabyteDB, not CockroachDB

Unrelated to the performance work — found while reading the homepage's inline payload, where the string turned up in the FAQ answers. CockroachDB was retired f...

Kamo·2mo ago
Performancekamo-marketing

Remove framer-motion from the site

"Reduce unused JavaScript" has named the same 35.4 KB chunk in every report, and it is Framer Motion. It is not an eager script on the homepage, which is why it...

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