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
April 17, 2026
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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo 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·5mo ago
FixSecurityService

Include parent org in /org/domain response

The getOrganizationByDomain endpoint manually builds a response map but never included the parent organization reference. This prevented the frontend from knowi...

Kamo·5mo ago
Fixkamo-internal

Add parentId and parent to OrgProviderProps type

The Organization props interface was missing parentId and parent fields, causing them to be dropped during TypeScript compilation even though the backend sends ...

kamo·5mo ago
FixKlusterServices

Purge incomplete model directories in init container

The service crashes on startup if it finds a directory in /models that has missing or partial model files. Add a sweep at init start that removes any directory ...

Kamo·5mo ago
FixKlusterServices

Remove GitHub LFS downloads, use only data.statmt.org models

GitHub raw URLs return LFS pointer files, not actual binaries. Drop enru/enar downloads entirely — LibreTranslate handles those locales. Only download the 4 pai...

Kamo·5mo ago
FixTranslateService

Narrow bergamot to es/fr/de/pl, restore bergamot-first order

GitHub LFS files can't be downloaded with plain curl (raw URL returns the pointer not the content). Removing enru/enar from bergamot scope; those locales fall t...

Kamo·5mo ago
FixTranslateService

Narrow BergamotProvider targets to 6 pairs with available models

pt, it, uk, tr, ro, id, vi have no bergamot model source — LibreTranslate handles them. bergamot now claims: es, fr, de, pl, ru, ar.

Kamo·5mo ago
FixKlusterServices

Scale bergamot to 0, update image to mozilla/translation-service

The Google Cloud Storage model download bucket (bergamot-models-sandbox) returns 404 for all files and the firefox-translations-models repo was archived Dec 202...

Kamo·5mo ago
FixTranslateService

Route all translations through LibreTranslate while bergamot is offline

BergamotProvider is moved to fallback position. LibreTranslate supports all 13 locales bergamot was handling **************** so this eliminates the flood of "C...

Kamo·5mo ago
Fixkamo-login

Proxy *** challenge through login server for multi-domain support

Replaces direct cross-origin fetch to capcha.{domain}/api/challenge with a same-origin proxy at /api/capcha/challenge. The previous approach required a valid TL...

Kamo·5mo ago
FixKlusterServices

Scale bergamot back to 1 replica — translation failures caused by missing pod

Bergamot was at 0 replicas with its service still registered. The ProviderRouter in TranslateService had no circuit breaker, so every request for es/fr/de/pt/it...

Kamo·5mo ago
FixSecurityService

Don't let null translated description hide the English original in changelog

The translation lookup for non-en locales was unconditionally overwriting description with **************** which is null when: - the translation was saved befo...

Kamo·5mo ago
FixBillingService

Resolve 23 compilation errors from controller-service signature mismatches

Controllers were built by a separate agent from services, causing method name and parameter type mismatches. Fixed all controllers to match actual service signa...

Kamo·5mo ago
FixInitializerService

Update kamo-shared-library version from 1.0.0 to 1.1.0

Needed to resolve the new billing entities in the commerce.billing package added to shared library 1.1.0.

Kamo·5mo ago
FixBillingService

Update kamo-shared-library version from 1.0.0 to 1.1.0

The shared library is published as 1.1.0, not 1.0.0. This was causing the Docker build to fail with "artifact not found" since Maven could not resolve the depen...

Kamo·5mo ago
FixBillingService

Add -U flag to maven build steps to resolve shared library from local repo

The dependency:go-offline step was trying Maven Central first, getting a cached failure for kamo-shared-library (which is local-only), and that poisoned the sub...

Kamo·5mo ago
April 16, 2026
Fixkamo-marketing

Reduce translation chunk size to 50 keys with exponential backoff

150 keys still too large for some providers (long paragraph values in privacy/terms/GDPR). Now: 50 keys per chunk, 4 retries with exponential backoff (2s→4s→8s→...

Kamo·5mo ago
Fixkamo-marketing

Chunk translation requests to prevent fetch timeouts on large payloads

With 1500+ keys, the single batch request payload was causing connection timeouts for some translation providers. Now splits into chunks of 150 keys with 3 retr...

Kamo·5mo ago
FixSecurityService

Inject translate-service-secrets into pod env

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