KamoCRM

Live Change Log

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

17,500
Total Changes
5,986
Features
5,284
Fixes
30
Projects
Filter by project
All Projects17,500AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices740MCPGatewayService251MediaService602RAGService79SecurityService1,847TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore774Docs3,254Feature5,986Fix5,284Other994Performance165Refactor278Revert23Style42Test160Upgrade1
July 9, 2026
FeatureSecurityService

Notify the assigned loan officer when a loan's borrower docs are all received

Fires LOAN_DOCS_READY_LO at the satisfy points alongside the borrower DOC_COMPLETE. Resolves the LO via loanFile -> **************** -> Member; self-guarded to ...

Kamo·3mo ago
Featurekamo-internal

Assign a loan officer to a deal from the originator section

The read-only Loan Originator section now has a loan-officer picker (org members via /members/names) + Assign, calling PUT **************** at the transaction l...

kamo·3mo ago
Revertkamo-internal

Scope the background back to the home + settings landings

Reverses the global-layout move — the member preferred the background on the landing(s) rather than behind every page. Backdrop is once again rendered per page ...

kamo·3mo ago
FixEmailService

Stop serializing computed xoauth2 getter that broke MailCredentials Redis cache

MailCredentials is cached in Redis (GenericJackson2Json). The added `isXoauth2()` boolean getter was serialized as a "xoauth2" property but has no field to read...

Kamo·3mo ago
Fixkamo-internal

Scope by org server-side (empty assocObjectId) — folders/list no longer empty

Keying materials on the org-id string was fragile: the id loses precision through a JS number on the write path and resolves inconsistently across proxy→APIServ...

kamo·3mo ago
Featurekamo-internal

Provider config fields for cloud mail access

Add the config inputs the EmailService resolver reads to authenticate cloud mailboxes: - Google Workspace: service-account key (JSON) for domain-wide-delegation...

kamo·3mo ago
FeatureEmailService

Route all cloud providers' mail through IMAP/SMTP with OAuth2 (XOAUTH2)

Cloud providers (Microsoft 365, Exchange Online, Google Workspace, Zoho, IceWarp) inherited read/send from **************** but the resolver never populated IMA...

Kamo·3mo ago
TestSecurityService

Lock the system-managed originator (projection, freeze, assignment)

8 tests over LoanTransactionService: live projection fills name/NMLS/subject-state license + org and marks LIVE; stale hand-entry is cleared when no LO is assig...

Kamo·3mo ago
Refactorkamo-internal

Render the console background globally in the layout, not per page

The background switch stays on the home page, but the chosen background (plain gradient or org slideshow) should be behind EVERY page, not just the two landings...

kamo·3mo ago
Featurekamo-internal

Deal-scope a vault upload from the account documents tab

The upload dialog now offers an optional "Deal" selector (the account's transactions); choosing one stamps loanTransactionId so a time-sensitive doc (credit rep...

kamo·3mo ago
FeatureSecurityService

Vault upload can deal-scope a document (loanTransactionId)

The vault upload now accepts an optional loanTransactionId, stamped onto the MemberDocument so a time-sensitive doc (credit report / bank statement) can be boun...

Kamo·3mo ago
Featurekamo-internal

Per-device background switch — plain gradient or org photo slideshow

Adds a two-icon switch top-right (under the trial pill; it rises into the pill's place once the trial ends) to choose the console background: - Plain gradient (...

kamo·3mo ago
FeatureSecurityService

Freeze the originator snapshot at initial Loan Estimate (Reg Z/TRID)

Completes the originator lifecycle: a shared resolveProjection() now feeds BOTH the live read projection and the freeze (no drift). On issuing an INITIAL_LE dis...

Kamo·3mo ago
Fixkamo-internal

Folders/list empty (org-id precision) + default visibility Team-Members-Only + custom labels

Root cause: materials store assocObjectId as the org id, which round-trips through a JS number on the write path (precision loss >2^53), so reads with the preci...

kamo·3mo ago
Featurekamo-internal

Transaction-first pipeline — PrimeReact expandable rows

Replaces the flat loan grid with a PrimeReact DataTable of TRANSACTIONS that start collapsed and expand IN PLACE to their member loans (no two-click drawer), so...

kamo·3mo ago
Featurekamo-internal

Re-add the trial pill top-right (color-swapped NavPri pill)

Keeps the trial line in the masthead status strip and re-adds a prominent pill in the top-right so an org's trial mode stays obvious. It's the NavPri expanded t...

kamo·3mo ago
Featurekamo-internal

Live "insert between" while dragging, not just drop-to-swap

Previously the order only changed on drop, so it read as swapping into a slot. Now the list re-flows live as you drag: dnd-kit onDragOver moves the dragged opti...

kamo·3mo ago
Featurekamo-internal

Sibling-loan switcher on the application view

A transaction can group multiple loans; the app header now shows a switcher to jump between the deal's sibling loans (hidden for single-loan deals) instead of o...

kamo·3mo ago
Featurekamo-shared-library

LoanFileDTO.loanTransactionId (app view knows its deal)

Surfaces the loan's transaction so the /applications view can show/switch sibling loans. Verified: mvn install clean.

Kamo·3mo ago
Featurekamo-internal

**************** (FE type)

Mirrors the backend field for the pipeline Transaction # column. Verified: tsc --noEmit clean.

kamo·3mo ago
FeatureSecurityService

Surface transactionNumber on TransactionSummaryDTO (pipeline Transaction #)

The per-transaction pipeline row now carries the human transaction number. Verified: mvn compile clean.

Kamo·3mo ago
Fixkamo-internal

Stop external-images banner flashing on already-allowed messages

The reading pane renders a message from its IndexedDB cache before the network fetch returns, and the cached copy lacks the server remoteImagesAllowed flag (und...

kamo·3mo ago
FeatureSecurityService

Originator projection resolves the per-state license

Completes the live originator projection: the assigned LO's StewardLicense (NMLS_MLO) for the SUBJECT PROPERTY's state (from property.address.subdivision, norma...

Kamo·3mo ago
Featurekamo-internal

Drag-and-drop to rearrange launchpad options, saved per member

Members can now reorder their home options by dragging, and the arrangement is persisted server-side per member (survives reloads and follows them across device...

kamo·3mo ago
Featurekamo-internal

Make Materials the first tab + default landing; remove Overview

Overview tab removed; Materials is now first. The /marketing index redirects to the first accessible tab (Materials by default), so anyone opening Marketing lan...

kamo·3mo ago
FixDocsService

Folder create/rename 500 on root folders (Map.of null value)

createFolder/renameFolder built the response with Map.of(..."parentId", parentId), which throws NullPointerException when parentId is null (a root folder) — the...

Kamo·3mo ago
FeatureSecurityService

Live originator projection — org + assigned LO, on read

GET /mortgage-apps/{uid} now overlays a LIVE, system-managed originator projection (computed on read, never stored) unless the row is frozen: org name/NMLS/addr...

Kamo·3mo ago
Featurekamo-internal

Loan Originator section is read-only / system-managed

The Loan Originator card no longer hand-edits URLA §9 data (the duplication of **************** it was re-capturing). It renders read-only: a LIVE projection of...

kamo·3mo ago
FeatureSecurityService

Transaction-level loan-officer assignment + transaction number

ensureTransactionForApp now stamps an org-unique transactionNumber (TXN-<uid>). New **************** + PUT /mortgage-apps/transactions/ {uid}/loan-officer sets ...

Kamo·3mo ago
Fixkamo-internal

Masonry layout so mixed-height option cards pack without ragged gaps

Leaf cards are short and parent cards vary with their sub-item count (Calculator has 9 modes, VoIP 2), so a uniform grid left big gaps under the short cards in ...

kamo·3mo ago
FeatureInitializerService

Originator/transaction-first columns (@Order 90)

Additive nullable columns + org-unique transaction-number index for the MLOS originator/transaction refactor: mlos_loan_transaction (transaction_number + assign...

Kamo·3mo ago
Featurekamo-shared-library

Originator/transaction-first schema — LO assignment, WORM freeze, deal-scoped docs

Backbone for the system-managed-originator + transaction-first refactor (spec 2026-07-08): - LoanTransaction: transactionNumber (org-unique) + assignedLoanOffic...

Kamo·3mo ago
Fixkamo-internal

Add missing account-assign proxy route

The lead-account assign/unassign UI called POST/DELETE **************** but the Next.js proxy route was never created — so requests 404'd and surfaced as "Unkno...

kamo·3mo ago
Featurekamo-internal

Add Product filter dependent on Vendor

Adds a Product filter to the /leads filter bar, immediately right of the Vendor filter. It behaves like the Status/SubStatus pair: disabled until a vendor is se...

kamo·3mo ago
Featurekamo-shared-library

Shared AusEngineClassifier — one source of truth for the §8.2 agency mapping

The program→engine, run→engine, and decision→gate mappings were local to **************** The capital-markets lock-stage AUS hard-stop needs the identical class...

Kamo·3mo ago
July 8, 2026
FixAIService

Robust vision provider/model selection across vendors

Two-pass selectVisionProvider: prefer any org provider that has an active vision-capable model adapter already emits image_url content and reports supportsVisio...

Kamo·3mo ago
Featurekamo-internal

AI auto-tag + caption UI; provider cost-tier/vision settings (P3)

Settings → AI → Providers: each provider gains a Cost tier (Light/Medium/Heavy) select and a Supports vision toggle (+ list chips). Materials drawer: 'Suggest t...

kamo·3mo ago
FeatureAIService

Provider cost-tier/vision passthrough + internal one-shot vision endpoint

AiProviderController reads/echoes costTier + supportsVision. ProviderRoutingService gains selectVisionProvider(orgId, tier). **************** runs a one-shot vi...

Kamo·3mo ago
FeatureMediaService

AI auto-tag + caption via org's providers (P3)

MaterialAiController POST **************** verifies ownership, mints a short-lived signed material URL, and calls AIService's internal vision endpoint (org's ow...

Kamo·3mo ago
Featurekamo-shared-library

AiProvider cost tier + vision flag (two orthogonal capability axes)

Adds costTier (LIGHT/MEDIUM/HEAVY via new AiProviderTier enum) and supportsVision boolean to AiProvider, so integrations can pick how expensive a provider to us...

Kamo·3mo ago
Fixkamo-internal

Persist "display external images" server-side instead of localStorage

The choice now comes from the message's server-recorded remoteImagesAllowed flag and is saved via POST **************** so it's durable and consistent across de...

kamo·3mo ago
FeatureEmailService

Server-side "display external images" consent

Replaces the client-local (localStorage) remembering of the external-image choice with a durable per-member record. New RemoteImageConsentService (fail-soft rea...

Kamo·3mo ago
Featurekamo-shared-library

EmailRemoteImageConsent entity + repository

Member-scoped record that a member has chosen to display external (remote) images for a specific message, keyed by member_id + normalized RFC Message-ID (unique...

Kamo·3mo ago
FeatureInitializerService

Add INVESTOR_PRICE column to rate_locks + loan_pricing_snapshots

@Order(80) idempotent ADD COLUMN IF NOT EXISTS (DECIMAL(9,4), matching the price-to-100 grids) so the MLOS RCE can record the true non-par investor execution pr...

Kamo·3mo ago
Featurekamo-shared-library

Record the true non-par investor price on RateLock + LoanPricingSnapshot

The binding rate-lock-of-record and its bound quote carried only rate + lockDays; discount/origination points were left null, so the core entities read PAR whil...

Kamo·3mo ago
Fixkamo-internal

Parent options expose their sub-items instead of being single links

Mail, Docs, VoIP, Calculator and Support are nav options that open a sub-menu rather than navigating, so on the home launchpad they must not be a single link. E...

kamo·3mo ago
Fixkamo-internal

Persist OAuth provider selection immediately so the switch sticks

Selecting Microsoft 365 / Google Workspace / Zoho only navigated to the connect screen without saving, so leaving before completing OAuth reverted to the previo...

kamo·3mo ago
FixEmailService

Scope KamoMail mailbox/domain listing to the org's own domains (cross-tenant leak)

SECURITY: **************** ran 'SELECT email FROM virtual_users' (and **************** 'SELECT name FROM virtual_domains') with no org scoping, so mailbox/domai...

Kamo·3mo ago
Featurekamo-internal

Let admins connect RingCentral on a member's behalf

On another member's phone settings, an admin with manage-VOIP rights (canManageVoipConfig) now sees Connect/Reconnect/Disconnect for the member's RingCentral ac...

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