KamoCRM

Live Change Log

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

17,645
Total Changes
6,069
Features
5,336
Fixes
30
Projects
Filter by project
All Projects17,645AIService260APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService583InitializerService329KBService151KlusterServices744MCPGatewayService261MediaService604RAGService79SecurityService1,872TranslateService62VOIPService250VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,409kamo-login340kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,678kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore775Docs3,257Feature6,069Fix5,336Other998Performance165Refactor278Revert23Style42Test162Upgrade1
April 17, 2026
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

เรียกใช้ตัววิเคราะห์โดยปริยาย และรวมสิ่งที่ www รองรับไว้ในโดเมนที่อนุญาต

- ติดตามผู้เข้าชมทั้งหมดโดยปริยายเนื่องจากการวิเคราะห์เป็นคุกกี้ไม่มี/GDPR ที่เป็นมิตร - ปิดการใช้งานก็ต่อเมื่อผู้ใช้ปฏิเสธการวิเคราะห์อย่างชัดเจนในการปรับแต่งค...

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 + เชื่อมต่อสาย UNI ที่เข้ารหัสไว้ทั้งหมดไปยัง I18n

ระบบแปลภาษา: - แปล. ปัจจุบันดําเนินการในโหมดเดลต้า — เฉพาะกุญแจที่หายไปหรือ ยังคงเหมือนกับภาษาอังกฤษ จะถูกส่งไปยัง API; ใช้กุญแจที่แปลแล้ว ถูกเก็บรักษาไว้โดยไม่...

Kamo·6mo ago
Fixkamo-marketing

Suppress Chrome อัตโนมัติ Translate Pople on locale-signed page

เพิ่มการแปล "no" to <html> และ < metta name="google" เนื้อหา= "notranslate"] So Chorome ไม่เสนอที่จะแปลหน้าของผู้ใช้ได้ตั้งใจไว้อยู่แล้ว เปลี่ยนเป็นภาษาอื่น.

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

สืบค้น Logs Logs ด้วย JOIN เพื่อให้บันทึกการจําแนกเลขศูนย์ถูกจับโดยลองใหม่

การ สอบ ถาม แบบ เก่า ๆ ที่ เลือก ไว้ จาก การ ทํา ล็อก ล็อก ล็อก ล็อก ที่ ไม่ ได้ ทํา ฉบับ แปล ต่าง ๆ ไม่ ปรากฏ แก่ ตา. ใช้ JOIN ด้านล่าง ดัง นั้น การ แปล ความ ห...

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

ใช้การตอบกลับแบบ API ที่ว่าง และลดความน่าชังบนแท็บ

- เรียกเก็บเงินApi ได้รับ/วางตัวช่วยตอนนี้อย่างปลอดภัยถือร่างไม่ตอบสนอง แทนการชนกับ Rs.json () ด้วยค่าที่ว่างเปล่า - แผน BillingTab build datata ครอบคลุมค่าใช้จ...

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/ reptemberบริบทจาก *** สําหรับค่าใช้จ่ายพร็อกซี

เรียกตัวควบคุมบิลลิงเซอร์ไนด์ เรียกตัว X-Org-Id และ X-Member-Id headers เมื่อโทรโดยตรง (โดยทาง APISERDE) เหล่านี้ไม่ได้ตั้งค่า ตอนนี้ พร็อกซีต่อไป.js อ่านคุกกี้...

kamo·6mo ago
Fixkamo-internal

เพิ่มต่อไป. js API พาธพร็อกซีสําหรับ /api/ billling/*

ลูกความเรียกเก็บเงิน API กําลังเรียก /api/billling/* เป็นที่อยู่ใกล้เคียงกัน ซึ่งชนกับเซิร์ฟเวอร์ตัวต่อไป แทนที่จะเป็นประตูเอพิสเซอร์ เพิ่ม เส้นทางไปยังพร็อกซีแ...

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

เพิ่มรายการแม่และผู้ปกครองไปยังประเภทของ Org PreviewerPropps

ส่วนติดต่อขององค์กร Proups ขาดสาขาผู้ปกครองและผู้ปกครอง ทําให้พวกเขาลดลงในระหว่างการประกอบประเภท แบ็คอัพส่งพวกเขามา นี่ป้องกันองค์กรได้ จริงอยู่ ซึ่งซ่อนแผนการแ...

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

ความท้าทายของพร็อกซี *** โดยผ่านเซิร์ฟเวอร์ล็อกอินสําหรับการสนับสนุนมัลติมีเดียName

แทนที่การดึงข้อมูลครอสออริจินต์โดยตรงไปยังแคปช่า. {}/api/challenge ด้วย พร็อกซีแบบสุ่มที่ /api/capcha/challenge วิธีการก่อนหน้าที่ต้องการ Cert ที่ถูกต้องบนแคปค่...

Kamo·6mo 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·6mo 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·6mo 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·6mo 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·6mo 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·6mo 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·6mo ago
April 16, 2026
Fixkamo-marketing

ลดขนาดท่อนแปลภาษาเป็น 50 ปุ่มพร้อมปุ่มกลับแบบเอกซ์โปเนนเชียล

150 กุญแจยังคงมีขนาดใหญ่เกินไปสําหรับผู้ให้บริการบาง (ความยาวย่อหน้าของค่าใน ความเป็นส่วนตัว/ ระยะ/ จีดีพีอาร์). ตอนนี้ 50 คีย์ต่อชิ้น 4 หดด้วยเอกซ์โปเนนเชียล แ...

Kamo·6mo ago
Fixkamo-marketing

การ แปล แบบ ชุนก เพื่อ ไม่ ให้ มี การ เรียก เวลา ออก จาก งาน เมื่อ มี ภาระ มาก

ด้วยกุญแจแบบ 1500+ การเรียกใช้งานแบบกลุ่มเดียวทําให้การเชื่อมต่อ เวลานอกสําหรับผู้แปลบางส่วน ปัจจุบัน แบ่ง เป็น ชิ้น ๆ ของ กุญแจ 150 ดอก กับ 3 ครั้ง และเวลานอก ...

Kamo·6mo ago
FixSecurityService

Inject translate-service-secrets into pod env

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