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
August 14, 2026
Performancekamo-internal

Ask for the unread count, not the whole folder tree

The mail badge needs one integer and was fetching every folder in the mailbox to find it, which on the IMAP providers is the most expensive call the mail backen...

kamo·2mo ago
Performancekamo-internal

Stop making the inbox wait on two lookups it can see the answer to

Two round trips still sat in front of a rendered inbox, and by this point they were the only thing left there — the folder tree and the first page already arriv...

kamo·2mo ago
Performancekamo-internal

Ask earlier, ask once, and stop asking for what has not changed

Three more things standing between opening /messages and seeing mail. Nothing was requested until the bundle had landed. /messages pulls several megabytes of J...

kamo·2mo ago
Performancekamo-internal

Stop paying for a key nothing reads, and stop waiting to ask

Three things were slowing /messages down before a single message was fetched. Every email call made a round trip to /api/generate-otk first and sent the result...

kamo·2mo ago
PerformanceEmailService

Stop opening every folder, and stop refetching every message

Two round-trip problems on the /messages critical path, both invisible in the code that caused them. listFolders opened each folder read-only to read two integ...

Kamo·2mo ago
August 12, 2026
Performancekamo-shared-library

Fetch the summary slices' to-one associations and count instead of scanning

The Overview's attention and recent slices read a title per row off a LAZY @ManyToOne, costing up to 16 extra selects per block under open-session-in-view. All ...

Kamo·2mo ago
August 10, 2026
PerformanceDaemonService

Refresh planner statistics after the weekly GeoLite rebuild

YugabyteDB does not auto-analyze, and the staging+rename swap replaces geolite_blocks wholesale -- so after every Sunday sync the planner had no statistics for ...

Kamo·2mo ago
PerformanceDaemonService

Geolite range index must be ASC, not YugabyteDB's default HASH

The IP lookup is a range scan: WHERE network_start <= ? ORDER BY network_start DESC LIMIT 1 YugabyteDB partitions the LEADING index column by HASH unless tol...

Kamo·2mo ago
Performancekamo-shared-library

Geolite range index must be ASC, not YugabyteDB's default HASH

The IP lookup is a range scan: WHERE network_start <= ? ORDER BY network_start DESC LIMIT 1 YugabyteDB partitions the LEADING index column by HASH unless tol...

Kamo·2mo ago
PerformanceKlusterServices

Give YugabyteDB real resources and pin its memory

It was running on LESS than the CockroachDB it replaced -- 20Gi/6cpu against CockroachDB's 32Gi/8cpu -- while needing more, because YSQL runs a separate Postgre...

Kamo·2mo ago
PerformanceKlusterServices

Give YugabyteDB real resources and pin its memory

It was running on LESS than the CockroachDB it replaced -- 20Gi/6cpu against CockroachDB's 32Gi/8cpu -- while needing more, because YSQL runs a separate Postgre...

Kamo·2mo ago
August 9, 2026
Performancekamo-internal

Hash with BLAKE3 only, so skipping the upload actually saves time

Dedup worked — the server logged 'linked WITHOUT upload' and 358 MB never left the machine — but the member still waited, because computing SHA3-256 alongside B...

kamo·2mo ago
PerformanceMediaService

Accept a BLAKE3-only claim so dedup is faster than uploading

The link endpoint demanded both hashes. A browser has no fast SHA3-256, so proving it already had a 358 MB file took ~20 seconds against an 18.8 second upload —...

Kamo·2mo ago
Performancekamo-shared-library

Match stored content on BLAKE3 alone, so a browser can afford to ask

Proving possession required both hashes, and a browser has no fast SHA3-256 — js-sha3 is pure JavaScript at ~25 MB/s. Measured on a 358 MB video that was ~20 se...

Kamo·2mo ago
Performancekamo-shared-library

Read the latest snapshot date without loading the history

A summary needs one date. It was reading it by loading a two-year range of snapshots and taking the max — five domains times every day of history, on every page...

Kamo·2mo ago
August 8, 2026
PerformanceSecurityService

One plan-matrix scan per app-catalog request

Also drops the now-unused DevelopmentStageType import and corrects the auto-provision comment, which still described the stage rule the catalog replaced.

Kamo·2mo ago
Performancekamo-shared-library

Answer the plan-matrix question for every app in one pass

The Apps & Features tab asks whether each app appears in the plan matrix, and the per-app form scans the plan-feature and add-on tables once per app — two dozen...

Kamo·2mo ago
August 5, 2026
PerformanceVOIPService

Stop re-querying call history per extension when the provider is instance-wide

RingCentral's endpoint is extension/~ and ignores the argument, so it returns the same log for every extension. Once a page adds nothing new, the remaining exte...

Kamo·2mo ago
July 6, 2026
June 26, 2026
PerformanceInitializerService

Stop per-boot customer_id FK tug-of-war in SchemaCleanupRunner

Remove the stale RetailCustomer->Account cleanup drops of commerce_carts.customer_id, **************** and **************** Those columns are now live, Hibernat...

Kamo·3mo ago
June 21, 2026
Performancekamo-capcha

Lower PoW difficulty (cost 1000, counter 2000-4000)

Solve cost is the product of CHALLENGE_COST x counter range; both were over-cranked (~37.5M PBKDF2 rounds, ~40-75x a stock Capcha), making the widget slow on lo...

Kamo·4mo ago
May 28, 2026
Performancekamolos

Tier 2 — Hikari + RestTemplate timeouts + Stripe SDK + Redis cache

- RestClientConfig: single shared RestTemplate bean with 5s connect / 30s read timeouts. MediaServiceClient / NotificationDispatchService / OfacSanctionsSer...

Kamo·4mo ago
Performancekamo-shared-library

Paged repo queries + countByStatus for hot paths

- LoanRepository: countByStatus / countByOrganizationAndStatus + Page<Loan> findByStatus(...) / **************** / **************** + **************** for...

Kamo·4mo ago
May 15, 2026
Performancekamo-internal

Merge partial DTOs into local state, drop refetch-after-patch

Every edit-style autosave (name fields, employment, assets, liabilities, REO, declarations, military, HMDA demographics, originator) used to issue a full mortga...

kamo·5mo ago
Performancekamo-shared-library

Collapse pipeline kanban N+1 to a single grouped count query

listForOrganization() used to issue one condition-fetch per loan (201 queries at 200 loans). Now a single grouped JPQL aggregate keyed by loanFile.uid projects ...

Kamo·5mo ago
April 25, 2026
PerformanceMediaService

Store geo on ticket at creation, drop GeoLite reads

**************** now captures the visitor's geo once (via GeoLookupService) and persists ip/country/city/subdivision on the SupportTicket itself. SupportTicket...

Kamo·6mo ago
PerformanceMediaService

Bulk-load visitors and skip GeoLite lookup in list

The /api/support/tickets list endpoint was running, per page of 20 rows: - 20 **************** calls (N+1) - 20 calls into GeoLookupService.lookup, each of ...

Kamo·6mo ago
Performancekamo-shared-library

Add findBySessionGuidIn for bulk loading

Used by the support-ticket list endpoint to fetch all visitors for a page in one query instead of N separate findBySessionGuid calls.

Kamo·6mo ago
March 12, 2026
PerformanceMediaService

Skip DB member lookup for messages auth check

Extract getMemberIdFromRequest() that reads memberID from the Redis session without hitting the DB. Use it in getMessages() instead of getCurrentMember() — the ...

Kamo·7mo ago
Performancekamo-internal

Eliminate OTK Redis overhead and proxy log noise for message fetches

- Bypass OTK generation in the MediaService proxy route: forward the *** cookie directly instead of generating a one-time key, removing 4 Redis round-trips ...

kamo·7mo ago
PerformanceMediaService

Eliminate per-request logging overhead and async TTL refresh

- k8s configmap (the actual production config): lower security/hikari logging from INFO/DEBUG to WARN, add HikariCP pool config (max 20) - KSessionService: st...

Kamo·7mo ago
PerformanceMediaService

Reduce log noise and tune connection pool

- Lower Spring Security from TRACE to WARN and HikariCP from DEBUG to WARN — eliminates dozens of synchronous log writes per request - Add explicit HikariCP p...

Kamo·7mo ago
Performancekamo-shared-library

Fetch parent message in same query to eliminate reply N+1

Alias m.msg and LEFT JOIN FETCH msg.parent so that threaded reply messages have their parent loaded in the initial query rather than triggering a separate SELEC...

Kamo·7mo ago
Performancekamo-internal

Improve chat message loading performance

- Cache getCurrentMemberId() result in a ref to avoid repeated /api/user-info calls on every WebSocket message and typing indicator - Parallelize message hist...

kamo·7mo ago
PerformanceMediaService

Remove per-message logging from chat message endpoint

Remove System.out.println calls inside the message stream map that were firing once per message (100 I/O operations per request), and the final log that streame...

Kamo·7mo ago
Performancekamo-shared-library

Fix N+1 query and add composite index for chat message loading

- Add LEFT JOIN FETCH m.msg to both repository queries to eagerly load MediaObjMsg in the same query, eliminating up to 100 extra SQL queries per chat windo...

Kamo·7mo ago
March 11, 2026
PerformanceSecurityService

Batch-load custom form data in getAllLeads (eliminate N+1)

Replace per-lead getCustomFormDataForLead calls (N+1 queries) with a single batch load via getCustomFormDataForLeads, grouped by lead ID using a Map lookup when...

Kamo·7mo ago
Performancekamo-shared-library

Eliminate full-table scan and N+1 queries on leads endpoint

- LeadRepository: add findByOrganizationId JPQL query (uses ORG_ID index) instead of loading entire LEADS table and filtering in Java - LeadCustomFormDataRepo...

Kamo·7mo ago
January 3, 2026
December 14, 2025
Performancekamo-login

Optimize page performance by 40-50% while maintaining visual appeal

- Lazy load Swiper background carousel to reduce initial bundle size - Memoize components (ThemeLogo, BrandIcon, LazySwiperBackground) to prevent unnecessary re...

snadjafinia·10mo ago
December 12, 2025
Performancekamo-marketing

Optimize calculator page for 40%+ performance improvement

snadjafinia·10mo ago
Performancekamo-marketing

Optimize marketing site for 40%+ performance improvement

snadjafinia·10mo ago
PerformanceSecurityService

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo ago
PerformanceMediaService

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo ago
PerformanceAPIService

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo ago
Performancekamo-register

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo ago
Performancekamo-marketing

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo ago
Performancekamo-login

Refactor to parallel deployment for k1m1 and k2m1

- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly

snadjafinia·10mo 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