KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
April 18, 2026
FixVOIPService

Bump kamo-shared-library to 1.4.0

Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...

Kamo·6mo ago
Fixkamo-register

Apply SP6 correctness and implementation quality fixes

C1: use NEXT_PUBLIC_H***_SITE_KEY env var instead of hardcoded placeholder C2: change RegisterResponse.userId and all API params from number to string (Cockroac...

Kamo·6mo ago
FixSecurityService

Address 4 code-review findings in registration and login paths

- Hide raw exception message in /register 500 path; log instead - Fail-closed (503) on email-verified DB check failure in login - verifyEmailToken throws if use...

Kamo·6mo ago
FixSecurityService

Append Z to dateCommitted so JS parses it as UTC

LocalDateTime.toString() produces no timezone designator, causing JavaScript's new Date() to treat the UTC value as local time and display timestamps 7-8 hours ...

Kamo·6mo ago
FixSecurityService

Convert PT midnight cutoff to UTC for today-count query

Commits are stored in UTC but the cutoff was a naive LocalDateTime in PT, causing yesterday-evening PT commits (00:00–06:59 UTC) to be counted as today.

Kamo·6mo ago
FixEmailService

Rename mailboxId→id and providerStatus→status in mailbox list response

Align field names with frontend expectations for member mailbox listings.

Kamo·6mo ago
Fixkamo-marketing

Replace all CSS-filter logo instances with white SVG

Navigation, SubNavigation, Footer, SubFooter, and Preloader all used the same broken filter brightness-0 invert pattern. Replaced with logo-full-white.svg acros...

Kamo·6mo ago
Fixkamo-marketing

Use white SVG logo in footer instead of CSS filter

Same fix as the nav — CSS filter on img inside backdrop-filter is unreliable on iOS Safari.

Kamo·6mo ago
Fixkamo-marketing

Guard color-scheme with !important against theme CSS override

DynamicMetaLoader can inject remote CSS that wins the cascade. Adding !important ensures color-scheme: dark can never be overridden by theme stylesheets.

Kamo·6mo ago
Fixkamo-marketing

Exclude footer and nav links from TouchOptimized min-height enforcement

TouchOptimized was setting minHeight:44px on all <a> elements shorter than 44px, including footer nav links (~20px tall). This ran during hydration on hard refr...

Kamo·6mo ago
Fixkamo-marketing

Use pre-rendered white SVG logo instead of CSS filter

CSS filter on img inside backdrop-filter is unreliable on iOS Safari. Generate logo-full-white.svg with all fills set to #ffffff and load it directly — no filte...

Kamo·6mo ago
Fixkamo-marketing

Lock Tailwind dark mode variant to class-based, never OS media query

Tailwind v4 defaults dark: utilities to respond to prefers-color-scheme (OS preference). The @variant override ensures dark: classes only activate when a .dark ...

Kamo·6mo ago
Fixkamo-marketing

Use inline filter style on logo link for reliable white rendering

Tailwind filter classes on img elements are inconsistent across mobile browsers. Inline style on the anchor element guarantees brightness(0) invert(1) applies e...

Kamo·6mo ago
Fixkamo-marketing

Force dark color-scheme so browser never applies light mode rendering

Changing from 'light only' to 'dark' in globals.css, generateViewport, and the html element style — this stops the browser from rendering SVGs and native UI in ...

Kamo·6mo ago
Fixkamo-marketing

Prevent logo from rendering behind nav row on mobile

The div wrapper with CSS filter created a new stacking context that conflicted with the header's backdrop-filter on mobile browsers, causing the logo to paint b...

Kamo·6mo ago
Fixkamo-marketing

Resolve scrollbar and mobile clipping on JumpToBar and PreviewBanner

- Add overflowY: hidden to JumpToBar inner container to prevent vertical scrollbar - Allow PreviewBanner content to wrap on mobile so text isn't clipped on port...

Kamo·6mo ago
Fixkamo-marketing

Replace space-y-4 with inline flex gap on footer link lists

Tailwind space-y-4 uses :where() (specificity 0) which races with CSS loading on hard refresh causing inconsistent vertical spacing. Inline styles are embedded ...

Kamo·6mo ago
FixKlusterServices

Set Traefik externalTrafficPolicy=Local to preserve client IP

With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...

Kamo·6mo ago
Fixkamo-marketing

Add missing requestIntegration i18n key across all locales

The "Submit a request" button under the "Need a custom integration?" CTA on /integrations was falling back to the raw key **************** because the key wasn'...

Kamo·6mo ago
April 17, 2026
Fixkamo-login

Backlink target to www.kamocrm.com (canonical host)

The PoweredByKamo component shipped pointing at apex https://kamocrm.com/ but the canonical kamo-marketing host is https://www.kamocrm.com/. Updating all three ...

Kamo·6mo ago
FixKlusterServices

Clean up legacy analytics deployment on each CI run

Delete old analytics deployment, service, and ingressroute that conflict with the kamo-analytics deployment managed by its own CI/CD pipeline.

Kamo·6mo ago
FixKlusterServices

Strip X-Frame-Options header in iframe-compatible middleware

Set X-Frame-Options to empty string to remove the SAMEORIGIN value that was being inherited, allowing CSP frame-ancestors to control iframe embedding instead.

Kamo·6mo ago
FixKlusterServices

Reset document.title in rebrand() when React overwrites it

React re-applies RSC payload after hydration, resetting the title to "analytics". Add a title check inside the MutationObserver callback so it gets corrected ev...

Kamo·6mo ago
FixKlusterServices

Use TreeWalker to remove all "analytics" text nodes from rendered DOM

The workspace nav title "analytics" comes from JS bundles loaded after auth, rendered as a text node next to the logo SVG. Uses TreeWalker to find and clear all...

Kamo·6mo ago
FixKlusterServices

Add guarded MutationObserver for client-side rendered logo/text

Login page and dashboard content is rendered by Next.js JS bundles, not in the HTML body, so sub_filter can't reach it. Adds a script with a busy-flag-guarded M...

Kamo·6mo ago
FixKlusterServices

Redirect favicons at nginx level, fix RSC payload escaping

- Serve favicon via nginx 302 redirect instead of trying to rewrite HTML/RSC payload href strings (cleaner, always works) - Fix RSC title replacement with pro...

Kamo·6mo ago
FixKlusterServices

Use pure sub_filter replacements instead of MutationObserver

MutationObserver caused infinite loop (DOM change -> observer fires -> DOM change). Switch to direct nginx sub_filter string replacements targeting both static ...

Kamo·6mo ago
Fixkamo-marketing

Load analytics by default and include www subdomain in allowed domains

- Track all visitors by default since analytics is cookieless/GDPR-friendly - Only disable if user explicitly denies analytics in cookie preferences - Add www.k...

Kamo·6mo ago
FixKlusterServices

Comprehensive analytics rebranding for login page and dashboard

- Replace title dynamically (handles "Login | analytics", "Dashboard | analytics" etc.) - Replace "analytics" h2 text on login page with Kamo logo image - Repla...

Kamo·6mo ago
FixKlusterServices

Use MutationObserver to rebrand analytics client-side rendered UI

analytics is a Next.js app that sets title/logo via JavaScript after initial HTML load. Replaces static sub_filter approach with injected script that uses Mutat...

Kamo·6mo ago
FixTranslateService

Fall through to next provider when translation equals source text

Bergamot was returning the source text unchanged for single-word nav items, acronym phrases (API, CRM), and compound words (Change Log) while reporting success ...

Kamo·6mo ago
Fixkamo-marketing

Delta translation engine + wire all hardcoded UI strings to i18n

Translation system: - translate.ts now operates in delta mode — only keys that are missing or still identical to English are sent to the API; existing transla...

Kamo·6mo ago
Fixkamo-marketing

Suppress Chrome auto-translate popup on locale-switched pages

Add translate="no" to <html> and <meta name="google" content="notranslate"> so Chrome does not offer to translate pages the user has already intentionally switc...

Kamo·6mo ago
FixSecurityService

Bound translation concurrency to 3 threads to prevent DB pool exhaustion

Unbounded @Async (SimpleAsyncTaskExecutor) created 50 threads simultaneously when the retry scheduler fired, each opening a DB transaction and draining HikariCP...

Kamo·6mo ago
FixSecurityService

Three bugs preventing changelog translations from being saved

1. **************** was discarding events because handleWebhook() had no @Transactional — save + publishEvent() ran outside any transaction. Add @Transact...

Kamo·6mo ago
Fixkamo-shared-library

Query CommitLogs with LEFT JOIN so zero-translation records are caught by retry

The old query selected from CommitLogTranslation — commit logs with no translations at all were invisible to it. Use LEFT JOIN from CommitLog so the HAVING COUN...

Kamo·6mo ago
FixSecurityService

Apply word replacement at translation time, not ingestion

Original text is preserved in the DB so that adding a new rule and re-triggering translation is all that is needed to update existing records. Changes: - Chang...

Kamo·6mo ago
Fixkamo-internal

Handle empty API responses and graceful degradation on billing tab

- billingApi get/put helpers now safely handle empty response bodies instead of crashing on res.json() with empty input - PlansBillingTab loadData wraps every...

kamo·6mo ago
FixSecurityService

Check TeamMember.isOrganizationOwner flag for owner detection in my-networks endpoint

The previous check only looked at org.getOwner() (user_id_owner column) which can be null for existing orgs. The authoritative owner flag lives on the TeamMembe...

Kamo·6mo ago
Fixkamo-internal

Resolve org/member context from *** session for billing proxy

BillingService controllers require X-Org-Id and X-Member-Id headers. When calling directly (bypassing APIService), these weren't being set. Now the Next.js prox...

kamo·6mo ago
Fixkamo-internal

Add Next.js API proxy route for /api/billing/*

The billing API client was calling /api/billing/* as a relative URL, which hit the Next.js server instead of the APIService gateway. Added a catch-all proxy rou...

kamo·6mo 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