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
August 4, 2026
CIKlusterServices

Manage ScyllaDB through deploy-services instead of by hand

scylladb/ held complete manifests but had no deploy step — the comment said it was "deployed MANUALLY after the 16TB drive swap" because the data dir /mnt/backu...

Kamo·1mo ago
FixKlusterServices

Resync drifted manifests with live before enabling full reconciles

Auditing what a full reconcile would apply turned up two manifests that had drifted far enough from the cluster that re-applying them would have caused an outag...

Kamo·1mo ago
RefactorKlusterServices

Rename cluster ratestack-scylla -> kamo-scylla, correct ownership docs

This instance is kamo's: it backs the `kamouniverse` keyspace (read/written by **************** through the scylladb-direct ExternalName) and the `audit` keyspa...

Kamo·1mo ago
Featurekamo-internal

Render the client's details on the preview, from the lead

Removing the quote's own addressee fields left "Prepared for" blank, because customerName only ever came from a linked Account and lead-raised quotes have none....

kamo·1mo ago
Featurekamo-signer-monorepo

Show the client's details on the customer's copy

Company heads the block when there is one — a quote to a business is addressed to the business, with the contact named beneath it. Matches the staff preview exa...

Kamo·1mo ago
FeatureSecurityService

Resolve the addressee lead for both the staff and customer views

Org-scoped in both places. On the public page the scope comes from the share link's own organization, so a token can never surface a lead belonging to another t...

Kamo·1mo ago
Featurekamo-shared-library

Put the client's details on the document, read off the lead

Dropping the quote's own addressee fields left the document with nothing to say about the client: customerName only ever came from a linked Account, which lead-...

Kamo·1mo ago
ChoreKlusterServices

Scale ratestack MySQL to 0 and suspend its backup job

The ratestack estate has been torn down to free cluster resources for kamocrm. The cluster-services MySQL instance serves ratestack only (kamo and mail each run...

Kamo·1mo ago
Fixkamo-internal

Line the commission-split controls up with the text fields

The Percent/Amount and One-time/Recurring toggles rendered at MUI's default toggle height while the member picker and the share amount beside them come out at 4...

kamo·1mo ago
Fixkamo-internal

Pane owns its spacing and scroll; drop the addressee fields from the form

The lead view's content card is overflow:hidden with no padding — every pane supplies its own, as Details and History do. The quotes pane supplied neither, so t...

kamo·1mo ago
Featurekamo-internal

Move quotes out of commerce and onto the lead

Quotes sat in the commerce pipeline, beside orders and carts rather than beside the client they are for. They now live on the lead: a Quotes tab directly after ...

kamo·1mo ago
ChoreInitializerService

Drop the quote recipient columns

The lead holds the client's name, address and phone; snapshotting them on the quote duplicated a record edited elsewhere. The columns existed only briefly and c...

Kamo·1mo ago
FeatureSecurityService

Expose per-market quote settings; enforce the terms grant

market-config now tells the lead view whether to offer a Quotes tab and what wording a new quote starts with, and the market endpoints round-trip both fields. ...

Kamo·1mo ago
Featurekamo-shared-library

Quotes belong to leads, configured per market

Quotes were a commerce-pipeline artifact, which put them beside orders and carts rather than beside the client they are for. They now hang off the lead: the mar...

Kamo·1mo ago
Fixkamo-internal

Review findings on the reserved list and split editor

Five defects an adversarial review confirmed against the first cut: - The page rendered "You don't have access" on every load. checkRole returns false while ...

kamo·1mo ago
FeatureSecurityService

Reserve, approve and audit lead opportunity claims

REST surface behind /leads/opportunities/reserved and the Reserve Opportunity control in the lead header, plus the service that owns the invariants. Rights, en...

Kamo·1mo ago
FeatureInitializerService

Tables for lead opportunity reservations

Mirrors LeadOpportunityReservation, LeadOpportunityCommissionSplit and **************** in kamo-shared-library. ddl-auto:update would create them from the entit...

Kamo·1mo ago
Featurekamo-shared-library

Entities for time-boxed lead opportunity reservations

An agent stakes an exclusive claim on closing a lead for a bounded window; an approver grants, edits or denies it, and colleagues can be offered a share of the ...

Kamo·1mo ago
Featurekamo-internal

Address the quote to a person; summary stops costing header height

Moving the summary out of the right-hand column fixed the width but bought it back as a band under the title. It now sits in the gap that already existed betwee...

kamo·1mo ago
Featurekamo-shared-library

Address a quote to someone who is not yet an account

The addressee was derived solely from a linked Account, so any quote raised for a prospect — which is most of them — printed a blank "Prepared for" line and the...

Kamo·1mo ago
Fixkamo-internal

Give the commitment and setup fee fields room for their labels

"Commitment (months)" shares its width with an info adornment and "One-time setup fee" is the longest label on its row; both were truncating.

kamo·1mo ago
Fixkamo-shared-library

Resolve the org's real hostname and logo extension for the letterhead

Correcting the theme URL was necessary but not sufficient — the logo still did not render, for two further reasons found in the live data. org_domains stores a...

Kamo·1mo ago
Fixkamo-internal

Keep the profile heading on the current membership type

The heading reads "<Member> Profile" or "<Team Member> Profile" off the type MyAccountTab reports through onMemberTypeLoaded, which only fired from the mount-ti...

kamo·1mo ago
Fixkamo-internal

Fill the Position card the moment a member is promoted

Department, job title, official title, work location, membership status and the two Autocomplete option lists were only ever loaded inside the memberType === 'T...

kamo·1mo ago
Featurekamo-internal

Open a member's profile from their row

Adds a fourth action to the row's hover dock, linking to **************** It is a real NextLink rather than a click handler, so middle-click and "open in new t...

kamo·1mo ago
Fixkamo-internal

Summary moves into the header, records get the full page width

The summary sat in a fixed 320px right-hand column on every record page, permanently costing a fifth of the width. On the quote editor that squeezed the line-it...

kamo·1mo ago
Fixkamo-shared-library

Point the letterhead logo at the path the theme bucket actually serves

The logo URL was built as **************** which that host answers with a 308 rather than an image — so every quote, sent as well as previewed, silently fell ba...

Kamo·1mo ago
Featurekamo-internal

Fail the build when a component calls a key messages/ does not define

next-intl renders the key path verbatim for a missing key, and messages/ is gitignored here — populated at image-build time from kamo-translation-dictionary — s...

kamo·1mo ago
Featurekamo-internal

Pin/unpin nav options from the navs and the home launchpad

Members could move an option between the side bar and the top bar, but never take one out of the navs entirely. Adds a third placement — NONE, "unpinned" — and ...

kamo·1mo ago
Stylekamo-internal

Directory sub-tabs pick up the same scrim as the Chats sub-tabs

The Chats sub-tabs have no shadow of their own — the soft edge under the tab strip is the panel's 16px top scroll scrim, which lands on them because they render...

kamo·1mo ago
Fixkamo-internal

Department contact fields showed raw i18n keys

The contact block added with the bulk-email work called departments.departmentEmail / departmentEmailHelper / departmentPhone / departmentExtension, but the dic...

kamo·1mo ago
Stylekamo-internal

Directory status filter adopts the Chats sub-tab treatment

The All/Online/Offline control was a pill segmented toggle while the Chats pane directly below used underline sub-tabs, so the two panes filtered their content ...

kamo·1mo ago
Fixkamo-internal

Deliver attached images, and stop two compose windows sharing a toolbar

AI chat attachments were never reaching the AI. AiChatInput sent the storage paths as `imageUrls`, but the REST body in AiChatWebSocketContext reads `imageObjec...

kamo·1mo ago
Fixkamo-internal

Stop tool windows losing and leaking member-typed content

Follow-up to the popup-window persistence work. Each of these was verified against real code first; three of the original reports turned out to be wrong or over...

kamo·1mo ago
Featurekamo-internal

Hide empty departments, move the status filter into the Directory

- Departments with no members no longer render. The by-department endpoint returns every department in the org including empty ones, so the roster was showi...

kamo·1mo ago
Fixkamo-internal

Departments no longer open invisible on first render

The Directory tab came up empty until you switched to Chats and back. The members were always there — every department was parked at opacity 0. Sections were r...

kamo·1mo ago
Fixkamo-internal

Stop losing popup tool windows (and unsent drafts) on page changes

Tool windows lived only in a module-level in-memory store, so any full document load destroyed every open window and everything typed into it. Several internal ...

kamo·1mo ago
Refactorkamo-internal

Move break glass into the primary rail

The activation control was a fixed pill anchored to the bottom-left of the viewport. That put a privileged action somewhere nothing else lives, which reads as a...

kamo·1mo ago
Featurekamo-internal

Rebuild the slideout as one continuous surface

Member rows now form the department body directly — no card-on-card nesting — and departments run full-bleed with sticky bands, reclaiming ~30px of row width an...

kamo·1mo ago
Refactorkamo-internal

Drop the dead 'just extended' UI from the timeout popup

justExtended was never set to true — the popup closes on extension rather than showing a success state — so the CheckCircle2/Shield branches, the alternate titl...

kamo·1mo ago
FixSecurityService

Require ACTIVATED god mode to read the trail, not eligibility

PhiAuditController.hasRight() bypassed the right check on session GD alone. GD means "may activate god mode"; godModeActive means "has activated it, deliberatel...

Kamo·1mo ago
Fixkamo-internal

Selecting Quotes no longer bounces back to the first sub-tab

Clicking Quotes set the index to 2 and wrote ?sub=quotes, but the effect syncing state back from the URL mapped anything that was not "commitments" to 0 — so it...

kamo·1mo ago
Fixkamo-internal

Harden the original session-timeout stack

Review of the **************** path after removing the duplicate idle stack turned up four real defects: - sessionMonitor.start() left its 3s bootstrap setTime...

kamo·1mo ago
Fixkamo-internal

Let the stage grow so the chrome pod gets an even gap

The pod (now taller with the tone slider) becomes the stage's only in-flow child: fixed height becomes a minHeight, with 16px padding above and below the pod (c...

kamo·1mo ago
Revertkamo-internal

Remove duplicate idle-logoff stack; SessionManager already covers it

The Aug 2 HIPAA session added **************** as a second, parallel idle system. The layout already had the original one — ClientActivityTracker + SessionManag...

kamo·1mo ago
FeatureSecurityService

Detection and alerting over the record-access audit trail

phi_access_log has been accumulating evidence nobody looks at. That satisfies §164.312(b) — the trail exists — and satisfies nothing about §164.308(a)(1)(ii)(D)...

Kamo·1mo ago
FeatureEmailService

Preview variables for PHI_ACCESS_ALERT

Without a sampleVariables arm the admin Email Templates preview renders every placeholder blank, so whoever is asked to approve the wording of a security alert ...

Kamo·1mo ago
Featurekamo-shared-library

PHI_ACCESS_ALERT canonical template

SecurityService's hourly review of phi_access_log needs somewhere to send what it finds. Rather than invent a channel it uses the existing transactional-email r...

Kamo·1mo ago
Chorekamo-internal

Restore CRLF endings on CustomFormFieldsComponent

The previous commit rewrote the file whole and flattened its line endings, turning a nine-line change into a 633-line diff and setting up a needless conflict fo...

kamo·1mo ago
Featurekamo-internal

Mirror the lead minimum-necessary mask on the client (§164.502(b))

SecurityService now withholds custom-form answers from a caller who is not the lead's assignee (and, in a handlesPhi tenant, even from a holder of right 161). T...

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