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
September 16, 2026
OtherAIService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1w ago
OtherKlusterServices

node-config(k3m1-ext): eno1 on DHCP as k3m1-ext, used only by traffic from its own address

k3m1's third cable is the port the shared bulk relay (postfix-orgs, 47.181.8.86) sends through. DHCP gives it an address and nothing else, so the main table is ...

Kamo·1w ago
Otherkamo-marketing

A guard for the damage English cannot see, and the numbers that disagreed

The last pass read the English and pronounced it clean. It was: the double hyphens were all in the TRANSLATED files, where an em dash comes back as `--`. The Ch...

Kamo·1w ago
Otherkamo-marketing

Stop the marketing site reading like it was generated

Thirty-seven industry pages opened "A Unified <noun> Platform for <industry>" and closed with the same sentence about the feature request system. Nine competito...

Kamo·1w ago
September 8, 2026
Otherkamo-shared-library

Merge branch 'main' of ****************

Kamo·3w ago
Otherkamo-internal

Merge branch 'main' of ****************

Kamo·3w ago
Otherkamo-internal

Stop the history fetch from deleting the text that just arrived

SmsThread loads its page and REPLACED the list with it. A message landing between the query executing and its response arriving was appended by the live subscri...

Kamo·3w ago
OtherVOIPService

Put the stream in the config the pod actually reads

The previous commit set nats.jetstream.stream in **************** shipped, deployed — and the new pod still logged NATS stream 'CHAT_MESSAGES' already exis...

Kamo·3w ago
Otherkamo-internal

Carry an arriving text across the boundary the dock sits above

An inbound SMS never reached an open SMS window, and the reason was not the transport everyone went looking at. SmsMessageProvider was mounted in Authenticated...

Kamo·3w ago
OtherMediaService

Stop letting one bad boot deafen the VOIP relay for the pod's life

The relay subscribed once, from @PostConstruct, and never again. When VOIPService's voip.> stream did not exist — which it did not — both replicas logged exactl...

Kamo·3w ago
OtherVOIPService

Give voip.* a stream to live in, and stop lying about who sent the text

There was no VOIP_MESSAGES stream in NATS at all. Every `voip.*` publish answered 503 No Responders Available and both media pods logged, once, at boot: [V...

Kamo·3w ago
September 7, 2026
OtherVOIPService

Record what the carrier says happened to a text, and check 10DLC before it matters

Sending now succeeds and nothing arrives. Telnyx accepts the message, returns an id, and Verizon then refuses to deliver it: status delivery_failed code ...

Kamo·3w ago
OtherVOIPService

Normalise the sender at the gateway, and stop calling a refusal retryable

The previous commit normalised the sender number where it is stored in the number inventory and on the carrier, and the send still failed with the same carrier ...

Kamo·3w ago
OtherVOIPService

Normalise sender numbers to E.164 before they reach a carrier

Sending a text failed with "The message could not be sent. Try again in a moment.". Telnyx's own answer, from the voipservice log, was specific: Telnyx POST ...

Kamo·3w ago
Otherkamo-internal

Merge branch 'main' of ****************

Kamo CI·3w ago
September 5, 2026
Otherkamo-internal

Merge branch 'feat/one-scrollbar'

One scrollbar for every scroller in the app, with the terminal window's five controls on all of them.

Kamo·3w ago
September 4, 2026
OtherSecurityService

Merge remote-tracking branch 'origin/main'

Kamo·3w ago
OtherEmailService

Merge remote-tracking branch 'origin/main'

Kamo·3w ago
September 2, 2026
Otherkamo-internal

Take the two "could not start" fallbacks out of the source

Both SMS refusal paths quote the server when it gives a sentence and fall back to one of their own when it gives only a machine code. Those two fallbacks were E...

Kamo·3w ago
August 27, 2026
Otherkamo-internal

Stop the prescribing-disclosure test being flaky

It passed alone and failed inside the full suite. The effect calls **************** and sets state in a .then(), so settling the mock's promise, running the con...

Kamo·4w ago
OtherSecurityService

Pin the exact JSON the clinical client parses

Every field in these bodies is read by name in app/lib/patients/ehrApi.ts and nothing was checking the server still emits them. The service tests pin that the e...

Kamo·4w ago
Otherkamo-internal

Show why the exchange network is unreachable

The outside-records panel could only say "not connected", which reads as an outage to wait out. The server now sends the reason alongside -- this practice has n...

Kamo·4w ago
OtherSecurityService

The exchange status says what would make it connected

The status endpoint is asked before the UI offers a network query, so a practice that is not onboarded sees an explanation instead of a button that always fails...

Kamo·4w ago
Otherkamo-internal

Mirror the EHR stage, and guard the mirror

ServiceType.ts is a hand-maintained mirror of the Java enum and nothing was checking it. RoleRightType has had a parity guard since three EHR rights went missin...

Kamo·4w ago
OtherSecurityService

Never auto-provision Patient Records into a tenant

Two of the three paths that would hand a clinical record system to orgs that never asked for one, now that ServiceType.EHR is COMPLETED and therefore available....

Kamo·4w ago
Otherkamo-shared-library

Publish Patient Records, and make that safe to do

ServiceType.EHR was held at TESTING long after the vertical was finished, because AppCatalogService derives availability from COMPLETED and three separate paths...

Kamo·4w ago
Otherkamo-internal

Say what the prescribing safety check did not cover

The panel rendered a safety block only when there were warnings, so a prescription that came back clean said nothing at all -- and this platform has no licensed...

Kamo·4w ago
OtherSecurityService

Disclose that drug interactions are not checked

Prescribing ran three checks the practice's own data can answer and no drug-drug interaction check at all. Declining to build one was right -- interaction knowl...

Kamo·4w ago
August 25, 2026
Otherkamo-internal

Tighten the screenshot drop hint

"Drag images here, paste from your clipboard, or click to browse" becomes "Drop image, paste from clipboard, or click to browse" — the three things you can do, ...

kamo·4w ago
August 23, 2026
OtherKlusterServices

auto-cert: let the junk-cert cleanup actually see the junk it was written for

cleanup_orphan_certificates() listed with '-l auto-cert.kamo/fqdn'. That label is newer than the scanner certs the function exists to remove, so the selector ex...

Kamo·1mo ago
OtherKlusterServices

auto-cert: issue an org's certificates as a batch, not one every 90 seconds

A new organization needs a certificate for all eleven of its hosts, and each one is a separate cert-manager Certificate. The loop waited for each host to become...

Kamo·1mo ago
August 20, 2026
OtherKlusterServices

Prefer brotli on the theme host, and correct the previous rationale

Two things, one of them a correction to the commit before this. The previous commit justified `encodings: [br, gzip]` with a probe against api.kamocrm.com. Tha...

Kamo·1mo ago
OtherKlusterServices

Prefer brotli, stop compressing what is already compressed

The shared `compress` middleware was `compress: {}`, which is three separate defaults and none of them is the one we want. Traefik picks gzip whenever the clie...

Kamo·1mo ago
Otherkamo-marketing

Revert "feat(security): enforce a CSP, COOP and Trusted Types"

This reverts commit ****************

Kamo·1mo ago
Otherkamo-internal

Finish the details the first pass left rough

Nine small corrections, each with a visible symptom. The drawer opened on ~0.4s of blank panel: `loading` started false, so the first committed render fell thr...

kamo·1mo ago
August 18, 2026
OtherSecurityService

Update DomainController

Kamo·1mo ago
August 17, 2026
Otherkamo-marketing

Update Kamo Marketing Site

Kamo·1mo ago
Otherkamo-marketing

Update Kamo Marketing Site

Kamo·1mo ago
Otherkamo-marketing

Update Kamo Marketing Site

Kamo·1mo ago
Otherkamo-marketing

Update Kamo Marketing Site

Kamo·1mo ago
Otherkamo-marketing

Update Kamo Marketing Site

Kamo·1mo ago
August 10, 2026
OtherKlusterServices

Load with explicit column lists -- positional COPY corrupts silently

COPY t FROM STDIN with no column list maps CSV fields to the table's PHYSICAL column order. The CSVs come from COPY (SELECT *) on CockroachDB, and Hibernate cre...

Kamo·1mo ago
OtherKlusterServices

Load with explicit column lists -- positional COPY corrupts silently

COPY t FROM STDIN with no column list maps CSV fields to the table's PHYSICAL column order. The CSVs come from COPY (SELECT *) on CockroachDB, and Hibernate cre...

Kamo·1mo ago
OtherKlusterServices

Schema parity with CockroachDB -- 714 tables, 8706 columns

The drift diff earned its place. KamoInitializerService builds the schema from JPA entities and produced 599 tables; production carries 714. The 115 difference ...

Kamo·1mo ago
OtherKlusterServices

Schema parity with CockroachDB -- 714 tables, 8706 columns

The drift diff earned its place. KamoInitializerService builds the schema from JPA entities and produced 599 tables; production carries 714. The 115 difference ...

Kamo·1mo ago
August 9, 2026
OtherKlusterServices

Full CockroachDB->YSQL translator for the universe migrations

All 15 migrations now apply cleanly to YugabyteDB: 111 tables, matching CockroachDB exactly. Eight distinct CockroachDB-only constructs had to be handled, found...

Kamo·1mo ago
OtherKlusterServices

Full CockroachDB->YSQL translator for the universe migrations

All 15 migrations now apply cleanly to YugabyteDB: 111 tables, matching CockroachDB exactly. Eight distinct CockroachDB-only constructs had to be handled, found...

Kamo·1mo ago
OtherKlusterServices

CSV export via COPY TO STDOUT, plus a CSV-aware verifier

Transport is COPY ... TO STDOUT WITH (FORMAT CSV), not `cockroach sql --format=csv`. The latter renders SQL NULL as the literal string "NULL", indistinguishable...

Kamo·1mo ago
OtherKlusterServices

CSV export via COPY TO STDOUT, plus a CSV-aware verifier

Transport is COPY ... TO STDOUT WITH (FORMAT CSV), not `cockroach sql --format=csv`. The latter renders SQL NULL as the literal string "NULL", indistinguishable...

Kamo·1mo ago
OtherKlusterServices

Make every sweep schema-aware; kamo has 714 tables, not 680

Cross-checking SHOW BACKUP (714 objects) against a table_schema='public' inventory (680) exposed 34 tables living in five other schemas: email_metadata, email_p...

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