KamoCRM

Live Change Log

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

17,395
Total Changes
5,910
Features
5,260
Fixes
30
Projects
Filter by project
All Projects17,395AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,830TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,328kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,637kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,910Fix5,260Other993Performance165Refactor278Revert23Style42Test159Upgrade1
July 2, 2026
FixSecurityService

Fail-closed tenant guard on underwriting waivers/validations

Review found the org guard was a no-op on the common empty-list case for the by-id waivers/validations reads (which the MLOS service does not org-filter), leaki...

Kamo·3mo ago
Fixkamo-internal

Add missing /api/security/lead-imports proxy route; default to Import Templates

- The base GET/POST /api/security/lead-imports had NO Next proxy route.ts (only sub-paths did), so Past Imports fetch (and the import POST) 500'd at the Next ...

kamo·3mo ago
FixSecurityService

Gate FFA acceptability on suspension in available-summary + available

available-summary now resolves the member's allotment and skips the product when suspended BEFORE the free-for-all short-circuit, and available() gates creditOk...

Kamo·3mo ago
Fixkamo-shared-library

Suspension now actually blocks acceptance (alert + accept + FFA)

findApplicableAllotments filtered 'AND la.isActive = true', so getMostSpecificAllotment returned a less-specific ACTIVE fallback (or nothing) when a member's sp...

Kamo·3mo ago
FixVOIPService

Implement POST /api/bulktext/send internal transactional SMS

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was ...

Sage·3mo ago
Fixkamo-internal

Send leadId as string when creating a comment

parseInt() rounded lead ids past JS MAX_SAFE_INTEGER, so the backend looked up a nonexistent lead and returned 404, surfacing as 'Failed to create post' on the ...

kamo·3mo ago
FixSecurityService

Accept leadId as string in createPost to preserve CRDB id precision

Lead IDs are CRDB unique_rowid() values that exceed JS MAX_SAFE_INTEGER. The frontend now sends leadId as a string; parse both String and numeric forms so findB...

Kamo·3mo ago
Fixkamo-internal

Resolve member names on /leads/credits + link to their account

The member column and filter showed raw ids because the name map was built from /api/security/members, whose CockroachDB Long ids serialize as JSON numbers and ...

kamo·3mo ago
Fixkamo-internal

Make EditableCard onEdit optional so reassignment gating type-checks

The assignment card passes `canReassignManually ? startEditAssignment : undefined` to EditableCard.onEdit, but onEdit was typed `() => void` (required), failing...

kamo·3mo ago
Fixkamo-internal

Busy state on Start Import + drop debug logs

- disable Start Import / Back and show a spinner + 'Importing…' while the import POST is in flight, preventing duplicate submissions on large files - remove [...

kamo·3mo ago
FixSecurityService

Correctness, scale & PII hardening in LeadImportController

- dedup via scoped LeadRepository query instead of findAll() over all tenants (was an OOM/DoS + cross-tenant exposure risk, re-run per 1000-row batch) - cap i...

Kamo·3mo ago
Fixkamo-shared-library

Scope import dedup query + org-guard member/vendor-product assignment

- **************** scoped, projection-only duplicate lookup for the manual importer (replaces a per-batch findAll() that hydrated every lead across all tena...

Kamo·3mo ago
July 1, 2026
Fixkamo-shared-library

Pin markedForReassignmentBy FK to INT8 (no inherited default)

Without columnDefinition, Hibernate copies members.id (INT8 DEFAULT unique_rowid()), so CockroachDB backfilled existing leads rows with bogus member ids on ALTE...

Kamo·3mo ago
Fixkamo-internal

Stop refresh icon blinking via infinite check loop

Once a domain was SSL-confirmed, checkDns unconditionally built a new domain object even when sslConfirmed was already true. The new object reference re-trigger...

kamo·3mo ago
FixEmailService

Return 422 (not 500) when member has no mailbox

listFolders and other read endpoints threw IllegalStateException from MailContext.toMailCredentials() when a member had no IMAP credentials provisioned, which t...

Sage·3mo ago
Fixkamo-internal

Don't fetch org with a precision-truncated id

LabelManager derived orgIdStr from getOrgIdString() (precision-safe) with a fallback to String(organization.id). organization.id is a JS number and silently tru...

kamo·3mo ago
FixSecurityService

Set site region + use node-local MinIO per pod

- Add kamo.minio.region (MINIO_REGION, default us-west-ca-s-1) so SigV4 signatures match the server's enforced site region; fixes background upload and sett...

Kamo·3mo ago
Fixkamo-shared-library

Sign requests with configurable site region

MinIO now enforces MINIO_SITE_REGION (us-west-ca-s-1) in the SigV4 authorization scope since site replication was enabled. The client was built without a region...

Kamo·3mo ago
Fixkamo-login

Drop background images that 404 instead of showing a broken frame

Track failed background image loads and filter them out of the Swiper carousel, so an incompletely provisioned theme (e.g. optionone, whose bg/2.webp was never ...

Kamo·3mo ago
Fixkamo-shared-library

Comp provisioning clears trial deadline (comp supersedes trial)

In the existing-subscription update path of provisionCompSubscription, set trialExpiresAt to null so a previously trialling org is cleanly promoted to comp with...

Kamo·3mo ago
Fixkamo-internal

Persist background reorder via commit endpoint (no data loss)

Save now stages new uploads to incoming, then commits the full desired order (existing-by-srcIndex or new-by-token) so reordered existing images are re-slotted ...

kamo·3mo ago
FixSecurityService

Stop cross-org background image leak; order-safe reorder + staging bucket

Reordering only re-uploaded new files to their new index, dropping reordered existing images and leaving imageBgCount claiming unpopulated slots; provisioning t...

Kamo·3mo ago
FixSecurityService

Return 404 for a missing org instead of 200 with empty body

getOrganizationById returned a bare null, which Spring serialized to HTTP 200 with an empty body; clients calling response.json() then threw 'Unexpected end of ...

Kamo·3mo ago
Fixkamo-internal

Map missing org (404 or empty body) to a null payload

Pairs with the SecurityService change that now returns 404 for a missing org instead of 200-with-empty-body. Callers already null-check the org, so both the pro...

kamo·3mo ago
FixSecurityService

Let the System User resolve any org's applied model

The cross-org gate returned 403 when orgId != session org and the caller had no Member row in the target org. The platform-wide System User operates across ever...

Kamo·3mo ago
Fixkamo-internal

Stop spurious errors flooding the console

- org/[id] proxy: backend returns 200 with an empty body for null orgs; response.json() threw 'Unexpected end of JSON input' -> spurious 500. Parse defensiv...

kamo·3mo ago
Fixkamo-internal

Resolve org tab title in generateMetadata to stop title flip

Static metadata.title rendered 'Kamo' server-side; Next re-asserted it after hydration, overriding DynamicMetaLoader's client update and flipping the tab back f...

kamo·3mo ago
Fixkamo-internal

Withhold rows until Myself member id resolves

ag-grid renders rowData beneath the loading overlay, so gating only the loading prop still flashed all leads while getMemberId() was 0. Blank the rows and stay ...

kamo·3mo ago
Fixkamo-internal

Default filter to Myself on load, hide market bar for single market, relocate toolbar

- Default agentFilter to __MYSELF__ at init + gate grid on userInfo load so it no longer flashes All Leads - Single market: auto-select it and hide the market-t...

kamo·3mo ago
FixDocsService

URI-encode WOPISrc + trust all api.* WOPI hosts (multi-tenant)

Opening a doc for a non-kamocrm tenant failed with 'unauthorized WOPI host'. Docs's alias_groups only trusted api.kamocrm.com (the Docs-deployment env hardcoded...

Sage·3mo 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