KamoCRM

Live Change Log

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

19,298
Total Changes
7,058
Features
5,848
Fixes
30
Projects
Filter by project
All Projects19,298AIService291APIService184BillingService169ConversionService125DaemonService153DocsService284ESigService106EmailService678InitializerService359KBService167KlusterServices783MCPGatewayService283MediaService644RAGService80SecurityService2,131TranslateService62VOIPService279VectorService11kamo-apps31kamo-asterisk-support32kamo-capcha17kamo-capcha-widget4kamo-internal9,032kamo-login362kamo-marketing642kamo-nowww20kamo-register224kamo-shared-library1,951kamo-signer-monorepo73kamolos121
Filter by type
All TypesBuild23CI528Chore810Docs3,305Feature7,058Fix5,848Other1,010Performance176Refactor286Revert23Style46Test184Upgrade1
August 27, 2026
FeatureSecurityService

Check the chart before writing a prescription

Prescribing was added with the allergy table, the interaction-checking query and a "safety context" endpoint all sitting beside it, unread. A system that record...

Kamo·2mo ago
FeatureKlusterServices

Phase 0 infrastructure gate

- TURN over TLS on 5349 with a real cert (turn-kamocrm-com-cert). Without turns:, a customer behind a 443-only egress firewall has no media path. Verified e...

Kamo·2mo ago
Featurekamo-shared-library

Carry a plan feature's unit to the buying surfaces

The catalog has stored a unit per feature all along - "GB/user", "users", "contacts" - and the plan-feature DTO dropped it, so every surface rendering a measure...

Kamo·2mo ago
FeatureKlusterServices

Swap the inbound greeting to KamoCRM-Main-Intro-2

Uploaded as a new file rather than overwriting the old one, so rolling back is a one-line change to KAMO_ATTENDANT_INTRO plus a dialplan reload — no re-upload n...

Kamo·2mo ago
Featurekamo-internal

Author a flat-rate task book, priced by the minute

Replaces the SW5 placeholder pane with the real authoring surface: three sub-views on one tab — books, categories, entries — following the SubView switcher Mark...

kamo·2mo ago
FeatureSecurityService

Right-gated task book API

SW5 Task 3, controller half. CRUD for books, categories, tasks and options, plus GET /{bookUid}/tasks/by-code/{code} - the lookup a quote or work order performs...

Kamo·2mo ago
Featurekamo-shared-library

Task book service with org-scoped CRUD and code resolution

SW5 Task 3, library half. ServiceTaskBookService exposes books, categories, tasks and options behind an org-scoped API, plus resolveTaskByCode - the lookup a qu...

Kamo·2mo ago
Featurekamo-internal

Un-gate pricing, tax and tiers for service markets

A SERVICE market got exactly three tabs — Overview, Vendors, Agreements. Customers, Tax & Shipping and Discounts & Pricing were all gated on commerceType === 'R...

kamo·2mo ago
Featurekamo-internal

Apply a remittance to a claim

"Unapplied money" is money the payer has sent that nobody attached to a claim, and the queue could only be looked at. POST_INSURANCE_PAYMENTS gated an operation...

kamo·2mo ago
FeatureSecurityService

Find a claim by the number a payer quotes

Posting a remittance needs the claim it settles, and a remittance carries no internal id — only the number the practice sent. Without this lookup, applying mone...

Kamo·2mo ago
Featurekamo-internal

Four things that could be looked at and not done

Each of these had a working endpoint, a client function, and no way for a person to reach it. Closing an order loop. The open-loops queue exists because the or...

kamo·2mo ago
Featurekamo-shared-library

Add the flat-rate task book

A priced task catalogue whose entries carry labourMinutes — the number that both prices a line and sizes a visit. ServiceLineItem.taskCode, landed in SW3, joins...

Kamo·2mo ago
FeatureInitializerService

Per-extension PBX billing schema, backfill and catalog

PbxBillingSchemaMigration is @Order(0) because it adds a column. The shared-library entity maps phone_cost_mode from the moment the build starts, so any runner ...

Kamo·2mo ago
FeatureBillingService

Bill phone service by the extension

PricingModel.PER_EXTENSION, its own reserved quantity key, an allocator, a nightly reconciler, a removal gate and the summary API - the phone twin of the per-ma...

Kamo·2mo ago
Featurekamo-marketing

Give the phone add-ons a phone icon

PER_EXTENSION already renders as "extension/month" - addOnUnitLabel handles it and needs no change. The icon map does: it is keyed on the lowercased catalog cod...

Kamo·2mo ago
Featurekamo-internal

Show what extensions cost, where extensions are managed

ExtensionUsagePanel on the stats tab, beside the mailbox and storage panels: count by class, the catalog rate, the monthly total, and the rule in plain language...

kamo·2mo ago
FeatureKlusterServices

Queue timeout and "press 0" both fall through to voicemail

Replaces the hand-rolled Dial()+Goto queue loop with app_queue. The deciding factor is DTMF: digits are NOT matched against the dialplan while Dial() is running...

Kamo·2mo ago
Featurekamo-shared-library

Count the extensions a third-party server does not charge for

Queues, IVRs, ring groups and spares are the extensions nobody is assigned to, and under the third-party rule they are free - twelve of one production org's sev...

Kamo·2mo ago
Featurekamo-shared-library

Count billable phone extensions

Adds the phone twin of the per-mailbox aggregator: PbxBillingClass with an exhaustive VoipProviderType switch and no default arm, OrgPbxBillingAggregator (no Sp...

Kamo·2mo ago
FeatureKlusterServices

Hold-music queue ringing 8000 and 8080 simultaneously

Eight hold tracks uploaded as the `kamocrm-hold` MOH class, shuffled. The random ordering comes from `random=1` on the row in FreePBX's `music` table, which is ...

Kamo·2mo ago
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
FeatureMediaService

React to a message with an emoji, and correct one you sent

POST **************** sets or clears the caller's emoji and answers with the message's whole reaction set, so a client that raced itself converges on the server...

kamo·2mo ago
Featurekamo-shared-library

Per-message emoji reactions, and a message its sender can correct

Two things a member asked for on the individual chat: an emoji anyone in the conversation can put on a single message, and the ability to fix a message you have...

kamo·2mo ago
FeatureKlusterServices

Recorded greeting, dial-by-extension, 1/2 to operator

Replaces the music-on-hold hold pattern with the recorded intro: - **************** plays the greeting AND listens at the same time, so a caller can dial ove...

Kamo·2mo ago
August 26, 2026
FeatureKlusterServices

Inbound auto-attendant — music on hold + dial-by-extension

Inbound calls had nowhere to go: the `incoming` table was completely empty, so even a delivered call would have dead-ended. Adds the attendant context plus the ...

Kamo·2mo ago
FeatureInitializerService

One shared calendar per org, one primary per member

Provisioning had nothing underneath it, so two simultaneous first loads both inserted. Collapses what that already made — twenty duplicate rows across seven org...

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
FeatureInitializerService

Schema for member-connected inboxes

The old member-only unique on member_imap_configs is discovered by shape rather than by its Hibernate-generated name, and dropped only after the wider key exist...

Kamo·2mo ago
Featurekamo-shared-library

Count connected personal mailboxes

Kamo·2mo ago
FeatureSecurityService

Edit demographics, set up the schedule, bill and post

The last four rights that named operations which did not exist. EDIT_PATIENT_DEMOGRAPHICS: a patient's details could be entered once and never corrected. A fie...

Kamo·2mo ago
FeatureSecurityService

POST /quotes/{uid}/convert

On QuoteController rather than POSController: this controller enforces a right on every handler, POSController enforces none on any order endpoint, and it resol...

Kamo·2mo ago
FeatureEmailService

Back the personal-mailbox API the console already calls

Eighteen client methods over twelve routes that had been shipping with no backend behind them. A member reaches only their own inbox and configures it only once...

Kamo·2mo ago
Featurekamo-shared-library

Personal mailbox entities and two consumer providers

GMAIL_PERSONAL and OUTLOOK_PERSONAL were offered by the picker and were not members of the enum, so selecting either produced an unusable org.

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
FeatureSecurityService

Prescribe, order and immunise

The chart could display medications, orders and vaccinations and could produce none of them. The read paths, the FHIR renderers and the safety queues were all b...

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
FeatureInitializerService

Both mail add-ons are priced per mailbox

Prices unchanged at $5 and $2; only the unit changes. Copy now states what actually counts, and that aliases are unlimited and free.

Kamo·2mo ago
FeatureBillingService

Expose mailbox counts, entitlement and cost mode

Kamo·2mo ago
FeatureBillingService

Bill e-mail per mailbox, reconciled nightly

Quantity is server-computed under a reserved key a request body cannot reach, and pushed through the existing amend path — so Stripe's CREATE_PRORATIONS charges...

Kamo·2mo ago
Featurekamo-shared-library

An accepted quote becomes an order

acceptPublic wrote four columns and appended an event. No Commitment, no Order, no Transaction — the Quote javadoc's claim that accepting mints a Commitment des...

Kamo·2mo ago
Featurekamo-shared-library

Count an org's billable mailboxes

Adds PER_MAILBOX pricing, the mail cost mode, and a stereotype-free aggregator: hosted bills every box on the server, third-party bills only what was mapped int...

Kamo·2mo ago
FeatureInitializerService

Schema for per-mailbox billing

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
FeatureSecurityService

The config body carries a scalar, and absence means unchanged

updatePOSConfig bound Map<String, List<String>>, a shape that cannot carry quoteConversionBilling at all. Widened to Map<String, Object>. A key that is absent ...

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