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
August 27, 2026
Fixkamo-marketing

The seat headline read a default, not a ceiling

The card printed "Up to 5 users" from plan.maxSeats, directly above its own feature list reading "Users (25)" and a comparison column reading 25 - the same card...

Kamo·4w ago
Fixkamo-marketing

The page contradicted itself, and the calculator billed email per user

Included-in badge named the wrong plan. All four per-seat modules are included in Business and Enterprise, and the badge picked the FIRST id in includedInPlanId...

Kamo·4w ago
Featurekamo-marketing

Give the phone add-ons a phone icon

PER_EXTENSION already renders as "extension/month" - addOnUnitLabel handles it and needs no change. The icon map does: it is keyed on the lowercased catalog cod...

Kamo·4w ago
August 26, 2026
Fixkamo-marketing

A per-mailbox add-on is not priced per user

PER_MAILBOX fell through to the default arm, so the public pricing page advertised the two e-mail add-ons as "/user/month" against a per-mailbox price. PER_EXTE...

Kamo·4w ago
Fixkamo-marketing

Read the platform's branding from its alias folder

The theme folder was derived from the hostname — kamocrm.com became kamocrm-com — which is where branding was written until a domain became optional and the org...

Kamo·4w ago
August 25, 2026
Revertkamo-marketing

Drop the headline from the top banner

Removes "Running Your Business without Kamo is a Mistake." from the fixed top banner, as reported. Confirmed live before the change — the running pod served it ...

Kamo·4w ago
August 24, 2026
Featurekamo-marketing

Stop counting a member's visits to their own link

A member checking that their own tracking link works is the most common first visit any code ever gets, and it is worse than useless: it inflates the number the...

Kamo·1mo ago
August 23, 2026
Fixkamo-marketing

Show cents on an add-on rate that has them

Additional Storage is $2.50 per 10 GB block, and the catalog stores that as a number — so 2.50 arrives as 2.5 and rendered straight into the card it read "+$2.5...

Kamo·1mo ago
August 22, 2026
Featurekamo-marketing

Set the headline in quotation marks

Quotes around the banner line, as asked — but rendered from CSS (`open-quote`/`close-quote` against `quotes: auto`) rather than typed into the string, for two r...

Kamo·1mo ago
CIkamo-marketing

Rebuild e67f59b against the dictionary commit it needs

e67f59b renamed previewBanner.nowLive -> previewBanner.headline and was pushed before the matching kamo-translation-dictionary commit (f4627d31). The build step...

Kamo·1mo ago
Featurekamo-marketing

Trade the NOW LIVE badge for the headline it was hiding

The top banner led with a six-character pill — bordered, uppercase, pulsing — and put the actual message after it. The pill now carries the message itself: "Run...

Kamo·1mo ago
August 21, 2026
Fixkamo-marketing

Quote the annual rate under the "billed annually" caption

The homepage cards read the month-to-month rate out of the catalog and printed it above a line saying "billed annually", so Starter advertised $34 and Business ...

Kamo·1mo ago
August 20, 2026
Performancekamo-marketing

Compress every response, not just the document

server-nonce.js asks upstream for `identity` so the HTML can be stamped with a CSP nonce without a decompress/recompress round trip, then recompresses on the wa...

Kamo·1mo ago
Performancekamo-marketing

Drain deferred work one item per idle period

Four components waited for the main thread to go quiet before doing their work — the toast/consent bundle, the scroll chrome, the touch target sweep and the ref...

Kamo·1mo ago
Performancekamo-marketing

Read the scroll position from an observer, not from layout

The nav's scrolled/at-top state came from a scroll handler that read window.scrollY, and the mount effect called that handler synchronously during React's commi...

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

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

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

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

Resolve the org's icons on the server and preconnect the origin

Lighthouse named theme.kamocrm.com as an unconnected origin worth 300 ms while also reporting no origins preconnected, and last round I read that as a stale com...

Kamo·1mo ago
Fixkamo-marketing

Make the server actually able to read the theme path

Completes the change 48493ae shipped half of. That commit swept four in-flight files — layout.tsx, DynamicMetaLoader, TouchOptimized and ThemedBackground — into...

Kamo·1mo ago
Fixkamo-marketing

Stop gating the referral beacon, and report the visit properly

Two corrections to what shipped, both restoring the behaviour this feature was asked for. The beacon was gating itself on the analytics consent record. That re...

Kamo·1mo ago
Performancekamo-marketing

Stop three route bundles being prefetched onto the homepage

Lighthouse's 103 KiB of "unused JavaScript" named four chunks, two of them essentially 100% unused. None of them appear in the homepage's HTML — they are other ...

Kamo·1mo ago
Performancekamo-marketing

Name the backdrop widths, and read the theme config on the server

Two findings, both of which were doing something other than what the code said. THE BACKDROP WAS FETCHING THE 1920 CANDIDATE. 149 KB, for a decorative picture ...

Kamo·1mo ago
Featurekamo-marketing

Honour a partner link and report what it brought

A visitor who follows https://www.<apex>?mrt=<code> gets two first-party cookies from the edge middleware — an opaque GUID that lasts two years and the code its...

Kamo·1mo ago
Performancekamo-marketing

Compress the images harder, hold the cards still, drop duplicate requests

Images. Every quality setting on the page goes down a step, and the allow-list in next.config.ts goes to [30, 50] so nothing can quietly ask for more: hero...

Kamo·1mo ago
August 19, 2026
Performancekamo-marketing

Split the hero, and take the last two libraries off the page

Step C. Neither GSAP nor Framer Motion is on the homepage any more, and the `home` message namespace is no longer sent to the browser at all. JS 24...

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