KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
August 27, 2026
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·1mo 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·1mo ago
August 26, 2026
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·1mo 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·1mo 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·1mo 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·1mo ago
FeatureSecurityService

Provision an organization's branding under its alias, and migrate what exists

The folder every logo, colour, favicon and background is written to was the organization's hostname with the dots turned into dashes. A domain is optional now, ...

Kamo·1mo ago
FeatureSecurityService

$everything records a disclosure when a recipient is named

The whole chart in one response is the largest single thing this system hands out, and until now it wrote a PHI audit row and nothing else. That was right for t...

Kamo·1mo ago
FeatureSecurityService

The patient portal — sign-in, records, and proxy access

The §164.524 right of access, made real: a patient signs in and reads their own problems, medications, allergies, immunisations and appointments, and can downlo...

Kamo·1mo ago
FeatureSecurityService

Commerce records as owners, and one place for the matching rules

The third owner the spine was widened for, and the one that was still defined and unused. A record's documents already hang off it through the document manager'...

Kamo·1mo ago
FeatureSecurityService

The TEFCA responder — discovery, document query, document retrieve

The three operations a partner actually calls, expressed over FHIR rather than SOAP: IHE's XCPD and XCA shapes, on the QHIN Technical Framework's FHIR path, bec...

Kamo·1mo ago
FeatureSecurityService

Five real quality measures, and the engine that runs them

Measures are Java rather than CQL, and the trade is worth stating. The eCQM specifications are published in Clinical Quality Language, and an engine would let a...

Kamo·1mo ago
FeatureSecurityService

Bulk export, C-CDA, and one accounting that covers every channel

BULK EXPORT. Kickoff answers 202 with a Content-Location and no body; polling answers 202 while running and 200 with the manifest when done. Returning a friendl...

Kamo·1mo ago
FeatureSecurityService

An account-level communications timeline

The level most people mean when they say "this customer's calls". The spine is already keyed on an owner, so the account endpoint is the same merged, component ...

Kamo·1mo ago
FeatureSecurityService

A patient's calls, texts and email — on the platform's own spine

Not a second timeline. LeadCommunicationsService now takes a CommsSubject and the lead overload delegates to it, so /leads keeps its exact behaviour drift. A pa...

Kamo·1mo ago
FeatureSecurityService

The sign-in response carries each workspace's logo

The picker drew two letters per row because the response held a name and an alias and no image. A list of workspaces is read by mark long before it is read by n...

Kamo·1mo ago
August 25, 2026
FeatureSecurityService

The visit and its documentation — the loop a practice runs on

Starting a visit is what grants the clinician the chart, and that is the design rather than a side effect. A clinician about to see a patient has no relationshi...

Kamo·1mo ago
FeatureSecurityService

The FHIR R4 endpoint, with the same access rules as the chart

An interoperability endpoint is where a system is most likely to acquire a quiet bypass: it is machine-to-machine, nobody watches it, and "the integration needs...

Kamo·1mo ago
FeatureSecurityService

The revenue cycle worklists, and the one restriction that outranks them

Every list here exists because its failure mode is a MISSING row rather than a wrong one, which is why none of them show up in an ordinary report. A claim a cl...

Kamo·1mo ago
FeatureSecurityService

Seed MANAGE_WEBINAR_SCHEDULES from MANAGE_SUPPORT_SETTINGS

Until availability moved onto the member, MANAGE_SUPPORT_SETTINGS holders were the one group who set it — they authored the dated slots on each webinar type, wh...

Kamo·1mo ago
FeatureSecurityService

Keep room for the compact mark among a pile of lockups

A straight "best six by score" is the wrong cap for this, and the reason is the shape of real sites: a company's wide lockup appears in the header, in JSON-LD a...

Kamo·1mo ago
FeatureSecurityService

The clinical API — patients, schedule, chart, and the gate in front

The access rule is the part worth reading. Being logged in is not a reason to see a chart. The overwhelming majority of real HIPAA enforcement is not outside at...

Kamo·1mo ago
FeatureSecurityService

Expose the scan on /api/security/org/brand-scan

Its own controller rather than a method on OrganizationController, which already takes 25 constructor dependencies. The path still lands under the same prefix, ...

Kamo·1mo ago
FeatureSecurityService

Orchestrate the scan behind one cached, budgeted call

One response rather than three endpoints because it is one scan: the logo must be downloaded before its pixels can contribute a colour, and the colours are want...

Kamo·1mo ago
FeatureSecurityService

Take hero imagery, falling back to carousel slides

The fallback is conditional by design. A site with a hero has already chosen one picture to represent itself; sweeping its carousel too would bury that choice i...

Kamo·1mo ago
FeatureSecurityService

Reconcile brand colours from five independent sources

Five because each is authoritative on a different kind of site and silent on the rest: a design system states everything in CSS variables, a PWA in its manifest...

Kamo·1mo ago
FeatureSecurityService

Find a site's logo from twelve independent signals

Twelve rather than one because there is no single place a logo lives. A Shopify store declares it in JSON-LD; WordPress puts it in a header img; a React app ren...

Kamo·1mo ago
FeatureSecurityService

Index a site's CSS and parse its page once

A declaration scanner rather than a CSS grammar: the scan has three questions (custom properties, background images, colours) and none needs the cascade resolve...

Kamo·1mo ago
FeatureSecurityService

Start the 3-day trial on first entry into the org, not at creation

Creating an org and opening it are different events. An org can be created and left sitting, and one nobody has walked into must not have spent its evaluation —...

Kamo·1mo ago
FeatureSecurityService

Rank colours perceptually rather than by RGB frequency

Counting RGB values across a stylesheet elects the site's off-white page background every time -- it is the most-used colour on almost every site ever built. Wh...

Kamo·1mo ago
FeatureSecurityService

Read real image dimensions from the bytes

Nothing here trusts the page. An HTML width attribute is a layout instruction, not a fact about the file -- a 2400px logo is routinely declared width="180" and ...

Kamo·1mo ago
FeatureSecurityService

Ask for different work for a bug and an enhancement

A bug says 'find out why and fix it' and points at the logs; an enhancement says 'this already works, build the better version' and points at the current behavi...

Kamo·1mo ago
FeatureSecurityService

Guarded outbound fetching for the website brand scan

The member types the URL, so every request this issues is an SSRF primitive, and there is no egress NetworkPolicy and no forward proxy in this cluster -- Redis ...

Kamo·1mo ago
FeatureSecurityService

Remind the dispatched session to push its work

A session that fixes a bug and leaves the change sitting on the dev machine has not fixed anything anybody else can see. The sentence is split out of the entit...

Kamo·1mo ago
FeatureSecurityService

Start the 3-day trial when the org is created

The trial was seeded pending and started on the owner's first sign-in, because an org was unreachable until its DNS verified — starting the clock at creation wo...

Kamo·1mo ago
FeatureSecurityService

Internal probe endpoint so the access canary tests the real path

The KamoDesktop canary needs a link minted the way the icon mints one. It holds the same signing key, so it could build its own — and would then be testing itse...

Kamo·1mo ago
FeatureSecurityService

Answer whether a web alias is still free

The org-creation wizard is eleven steps long and the alias was only checked when the form was submitted, so someone who picked a name another organization alrea...

Kamo·1mo ago
FeatureSecurityService

Send To AI, gated on MANAGE_SYSTEM_BUGS

The class carries @RequirePlatformRight, so the interceptor resolves the caller and refuses before any handler runs — a per-method check would have been one for...

Kamo·1mo ago
FeatureSecurityService

Turn the workspace picker on

A member of several organizations now chooses which one to open after their password, instead of it being chosen for them by the hostname. This is the switch th...

Kamo·1mo ago
FeatureSecurityService

Turn the workspace picker on

A member of several organizations now chooses which one to open after their password, instead of having it chosen for them by the hostname. This is the switch t...

Kamo·1mo ago
FeatureSecurityService

Accept an explicit org, not only the host

Registration bound the account to whatever organization the host resolved to. On register.kamocrm.com — the signup page for every organization with no register ...

Kamo·1mo ago
FeatureSecurityService

Refuse the AI training corpus exports for PHI tenants

ANALYTICS_EXPORT is blocked because exports leave the boundary with no de-identification. Both training exports already had a fail-closed audit — there IS a rec...

Kamo·1mo ago
FeatureSecurityService

Send the tree on the app-catalog endpoint too

Branch Types → Allowed Apps builds its editor from /features/app-catalog, not from the tenant features listing, so it was the one surface that could not see whi...

Kamo·2mo ago
August 24, 2026
FeatureSecurityService

Serve an org's branding to a screen with no session

Login, registration and the meeting lobby paint an organization's colours before any session exists. They knew which one from the hostname, which is exactly wha...

Kamo·2mo ago
FeatureSecurityService

Serve the app tree, and fix the unguarded auto-enable

FeatureController now sends parent/children/isParent on every serialized app so the client can render children nested under their parent. Served rather than mir...

Kamo·2mo ago
FeatureSecurityService

Entitlement-check every vertical, not just the gated two

Every CommerceType now names its own child app under POS, so the isGated() short-circuit that waved retail, rentals, service, subscriptions and procurement stra...

Kamo·2mo ago
FeatureSecurityService

Let the shell fetch its org from the session, not the host

kamo-internal's root layout reads the Host header, strips "internal." and fetches /org/domain/<that>. On a host serving one tenant that is the same question as ...

Kamo·2mo ago
FeatureSecurityService

Let a member sign in without a host naming their org

Adds the second half of the split: a sign-in that names no organization authenticates the user, then asks which workspace. POST /api/security/session/select tur...

Kamo·2mo ago
August 22, 2026
FeatureSecurityService

Frame and media endpoints, and seed the new rights

Self only, and enforced in the QUERY. Every read and write resolves the member from the session and every repository call takes that id, including the single-fr...

Kamo·2mo ago
FeatureSecurityService

Seed the mail and lead widgets, and add a universal seed for the timecard one

The mail and lead widgets follow their data rights exactly as the calendar ones do — ACCESS_MAIL and VIEW_LEADS — so a holder gains no data they could not alrea...

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