KamoCRM

Live Change Log

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

18,414
Total Changes
6,545
Features
5,540
Fixes
30
Projects
Filter by project
All Projects18,414AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService623InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,999TranslateService62VOIPService265VectorService11kamo-apps27kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,701kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,828kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,545Fix5,540Other1,001Performance174Refactor282Revert23Style45Test175Upgrade1
August 27, 2026
Featurekamo-internal

An emoji on a single message, and a message you can correct

A member asked for both on the individual chat. They land on the same per-message menu the window already has, beside Copy and Unsend. Reactions render as a ch...

kamo·2mo ago
Fixkamo-internal

The workspace you chose is the one you land in

Choose "ABC Mortgage" at sign-in and you arrived in a workspace wearing KamoCRM's logo and colours, with a left-hand menu offering White Labeling, Plans & Billi...

kamo·2mo ago
Fixkamo-internal

Keep support tickets out of the per-member unread badge

perSender is what puts a number on a person — their member-directory row, their hex head — so it has to mean "unread messages from them". It was summing every s...

kamo·2mo ago
August 26, 2026
Fixkamo-internal

Saving a settings page no longer repaints the tab as the platform

Signed into Wienerschnitzel, opened Settings → Branding, saved Company Info, and the entire workspace reverted to Kamo's logo and colours. Closing the tab and o...

kamo·2mo ago
Fixkamo-internal

Never lock the provider an org is already using

Two production orgs run 26 and 41 live mailboxes while holding no mail add-on code, so the picker would have told them KamoMail requires the KamoMail Hosting ad...

kamo·2mo ago
Featurekamo-internal

Review emergency access, and gate the last two surfaces

The break-glass review endpoint had a client function that nothing called: every emergency chart access was recorded and there was no screen to read them on. A ...

kamo·2mo ago
Featurekamo-internal

Raise and send a claim from the queue that found the work

The revenue cycle read seven queues and could not raise a claim. Each write now hangs off the queue that surfaced the need for it rather than living on a screen...

kamo·2mo ago
Featurekamo-internal

Correct a patient's details

Details could be entered once and never fixed. The panel sits under the summary rather than in a settings screen, because the moment somebody notices a misspelt...

kamo·2mo ago
Featurekamo-internal

Set up visit types and working hours

The first screen a new practice needs, and the one that did not exist. Booking offers visit types from one table and searches availability against another, so a...

kamo·2mo ago
Featurekamo-internal

Write a prescription, an order and a vaccination

The chart could show all three and create none. One panel rather than three, because they are one moment: a clinician finishing a visit writes the prescription,...

kamo·2mo ago
Featurekamo-internal

Choose who pays for mailboxes, and show the count per invoice

The cost-mode control appears only once a billing group exists — with none the setting changes nothing, and offering it invites the belief it is broken. Invoice...

kamo·2mo ago
Docskamo-internal

Close out SW4

Nine departures. The two that matter most: this plan's own Self-Review asserted a type was consistent across three places, and it was consistent and wrong; and ...

kamo·2mo ago
Featurekamo-internal

A closed head spins away instead of blinking out

Right-clicking a head and choosing Close, or putting one in the goal — thrown in or carried in and dropped — now plays a 500ms exit: a counter-clockwise three-q...

kamo·2mo ago
Featurekamo-internal

Explain the mailbox charge where mailboxes are made

Console rows price mail per mailbox with the live count; the mailboxes tab, department picker and provider help all state what counts, that a shared mailbox is ...

kamo·2mo ago
Featurekamo-internal

Gate provider choice on the add-on, show mailbox charges

Locked cards say which add-on unlocks them rather than being hidden or silently dead, and the gate fails open so a billing outage cannot strand an org mid-migra...

kamo·2mo ago
Docskamo-internal

QuoteConversionResult.orderUid is a String, not a UUID

Order extends BaseEntity, whose id is a Long — only Quote, QuoteOption and QuoteLineItem extend BaseUuidEntity. The plan declared UUID and its own Self-Review a...

kamo·2mo ago
Docskamo-internal

SW4's dictionary keys land in the dictionary repo

Task 6a's file list named kamo-internal/messages/en.json, which is gitignored and cannot be committed. The step's prose was right; the list was not.

kamo·2mo ago
Featurekamo-internal

Each org chooses what an order takes from an accepted quote

A radio group, not a switch — both are legitimate ways to sell, and neither is 'off'. Shows which is the default and what each does to a real charge: for a thre...

kamo·2mo ago
Fixkamo-internal

Ask a host that exists for the organization ?org= names

A new organization was created with its logo, colours and three backgrounds. All of it provisioned correctly into public/wienerschnitzel/ — 15 objects, the righ...

kamo·2mo ago
Featurekamo-internal

Say who holds a contested mailbox, and that aliases are free

The snackbar replaced the server's 409 message with a generic failure, so a manager could not tell which member held the mailbox. Adds the note that sharing a m...

kamo·2mo ago
Fixkamo-internal

Every catalogued event fires where the event actually happens

Most of the sound catalogue was configurable and inaudible. Two causes, both silent by construction: a sound that never plays looks exactly like one the member ...

kamo·2mo ago
Docskamo-internal

Plan SW5, the flat-rate task book

The spec's premise that no line carries a labour duration went stale hours ago — SW3 landed labourMinutes and taskCode on ServiceLineItem, and the javadoc on ta...

kamo·2mo ago
Fixkamo-internal

Dropping in the goal scores, and aiming at it no longer gathers

Two complaints about the same gesture — taking a head to the goal. **Dropping in the goal did nothing.** Scoring lived entirely inside the throw RAF loop, whic...

kamo·2mo ago
Featurekamo-internal

Paint each tab from its organization's alias, not from the hostname

The theme base was built from a hostname: drop the leading label, join the rest with dashes, and that is the bucket folder. It answered correctly while every or...

kamo·2mo ago
Featurekamo-internal

A tap opens the tool, a right-click opens its menu

Clicking a hex head opened a context menu, which meant the common act — get my chat back — cost two clicks, and the menu itself was reachable no other way. The ...

kamo·2mo ago
Fixkamo-internal

A healthcare market could not be edited

The edit screen still built its picker by mapping over a hardcoded array of seven verticals. HEALTHCARE was not among them, so a healthcare market opened to a s...

kamo·2mo ago
Fixkamo-internal

Gate the population-level surfaces on their own rights

EXPORT_PATIENT_DATA, VIEW_QUALITY_MEASURES and MANAGE_PATIENT_PORTAL were added to Java in August and never mirrored into the client enum, so RoleRightType.THE_...

kamo·2mo ago
Docskamo-internal

Define SW4's behaviour for a market-less quote

Task 1 made create() read marketUid but did not backfill, so every quote that exists today still has a null market. The converter must fall back to PurchaseLine...

kamo·2mo ago
Fixkamo-internal

The clinical rights were ungrantable

The permission editors render one section per enabled app and filter each role's rights by that section's serviceType. There was no EHR section, so all ~30 clin...

kamo·2mo ago
Chorekamo-internal

Follow Java — the EHR is TESTING in both mirrors

Java moved the app off PLANNING now the vertical is built. Neither mirror is read for its stage — consumers match on id and copy comes from GET /api/security/fe...

kamo·2mo ago
Docskamo-internal

SW4's billing choice is per-org configuration

Owner's call, and the right one: a maintenance contractor bills each period, a capital-equipment installer bills the term up front. Either hard-coded choice cha...

kamo·2mo ago
Featurekamo-internal

Hand the patient a link, not a token

The invitation now has somewhere to go — the portal lives on apps.<practice> — so the panel shows the whole activation URL with a copy button rather than the op...

kamo·2mo ago
Fixkamo-internal

Remove the AI unread-count indicator entirely

It never told the member anything actionable: AIService has no push channel for assistant replies, so a nonzero count only ever meant "you minimized the window ...

kamo·2mo ago
Featurekamo-internal

Release the record as FHIR as well as C-CDA

§164.524(c)(2)(ii) is the form and format the individual requested if it is readily producible. Both were already producible; only one was offered. A C-CDA is ...

kamo·2mo ago
Fixkamo-internal

The new workspace is opened by a click, from /network

Creating an org disabled the form, did the work, and then appeared to do nothing: no new tab, and the button back to reading "Create Organization". window.open...

kamo·2mo ago
Featurekamo-internal

The unread badge goes red, pulses, and sits on the hexagon

Three things, all about a badge nobody notices. It was `--presence-color`, so it was GREEN whenever the member was online — the one state in which it is least ...

kamo·2mo ago
Featurekamo-internal

Bank reconciliation on the healthcare revenue cycle

The last EHR endpoint without a caller, and it belongs beside the other six revenue-cycle queues rather than anywhere new. The gap between posted and banked. A...

kamo·2mo ago
Docskamo-internal

Plan SW4, quote to order conversion

Five defects, not the spec's three. The converter deliberately does NOT mint a Commitment: processOrderPaid returns immediately when one exists, so hand-creatin...

kamo·2mo ago
Featurekamo-internal

Who asked — unrecognised callers and Part 2 disclosures

Two compliance queues that were recorded server-side and never shown. UNRECOGNISED CALLERS. Every inbound exchange request that could not be attributed to a pa...

kamo·2mo ago
Featurekamo-internal

Resolve duplicate records, and record the ones that are not

Registration prevents duplicates; nothing could fix the ones already there — from an import, a phone booking taken before the record was found, a married name. ...

kamo·2mo ago
Docskamo-internal

Record what the chat switcher column left undone

Ordered by what would hurt most if left alone. The first entry is the one worth from MediaService's, which was not looked at — five of the switcher's six bucket...

kamo·2mo ago
Fixkamo-internal

Patch a self-created session's guid back onto the window's props

When opened without a sessionGuid (launcher / nav / command palette), AiChatTool POSTs a new session and calls setSessionGuid(guid) but never told the tool-wind...

kamo·2mo ago
Fixkamo-internal

Switcher column opts out of presence it cannot honestly show

Passes showPresence={false} to its ConversationsPane mount. This column renders under ToolDock, a sibling of **************** (see ToolProviders.tsx's own doc c...

kamo·2mo ago
Fixkamo-internal

Thread showPresence to rows, and gate the empty state on prefsLoaded

- Adds `showPresence` (default true), forwarded to every ConversationRow — the pane-side half of the switcher-column presence fix (see ConversationRow's own...

kamo·2mo ago
Fixkamo-internal

Row honors showPresence, and formats a TEXT preview's E.164 sender

Two whole-branch-review findings against this component: - ConversationRow always read **************** directly. Mounted inside the switcher column (a sibli...

kamo·2mo ago
Fixkamo-internal

Give the Chats tab pane a definite height, not just min-height

The chats-tab motion.div had `height: undefined` (only `minHeight: '100%'`), so its containing block was auto-height and ConversationsPane's own `height: 100%` ...

kamo·2mo ago
Fixkamo-internal

Close review round 1 on the chat-switcher column

- ChatSwitcherColumn: move the collapse preference's PUT out of the setCollapsed updater into the click handler itself. The updater was impure (it fired a f...

kamo·2mo ago
Refactorkamo-internal

One window per session, and the shared column

AI chat was the only tool deriving "maximized" from a ResizeObserver threshold instead of reading the flag every other tool reads, and the only one switching co...

kamo·2mo ago
Featurekamo-internal

A conversation switcher beside every maximized chat

ChatSwitcherColumn mounts ConversationsPane beside a maximized chat window's own content, so a member can switch conversations without leaving the window. ToolD...

kamo·2mo ago
Fixkamo-internal

Stop the fallback-bucket flash, guard the double-click

Review found the pane had dropped the old chats-list component's prefsLoaded gate: activeBucket started at initialBucket/DEFAULT_BUCKET and was handed to useCon...

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