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 28, 2026
Featurekamo-internal

Touch up a traced logo by hand, and download the converted file

Four things on the raster-to-vector converter and the simple logo slot. **The scroll bar on the raster options is three times wider.** 4px was a hard target to...

Kamo·4w ago
Featurekamo-internal

One-page field set and the defaults that replace the dropped steps

CreateOrgFields is what the new single-page /network/create form actually asks for: a branch type, name, alias, the app switches, and a handful of optional fiel...

Kamo·4w ago
Featurekamo-internal

Per-pane minimum size, applied on read as well as on drag

Threads an optional `min?: PaneSize | null` through clampPaneSize, the two resize-delta helpers, and the two preference read/write functions in the pure launchp...

Kamo·4w ago
Fixkamo-internal

Switching conversations no longer stacks windows behind the maximized pane

Takes @kamo/tool-core 0.1.5, where leaving the maximized pane became two gestures instead of one. A navigator row click hands the pane to another conversation a...

Kamo·4w ago
Fixkamo-internal

Give the new tab a session, instead of one that bounces to login

"Open in new tab" was `window.open(location.href, '_blank', 'noopener,noreferrer')`. The session id is not in a cookie — it lives in sessionStorage, per tab, be...

Kamo·4w ago
Featurekamo-internal

The org's year established is optional, and unset renders as absent

Nothing on the server ever required it — the column is nullable, the create parser maps an empty value to null, and patchOrganization applies only the keys a PU...

Kamo·4w ago
Performancekamo-internal

A conversation outlives the window showing it

Opening a chat window cost seven requests before a message rendered — history, members, receipts, mark-read, the unread snapshot, the counterpart's avatar and t...

Kamo·4w ago
Featurekamo-internal

Show a member only the tabs that are theirs to see

Three member-settings surfaces were open to people they cannot mean anything for. Each gate is on the MEMBER TYPE or the org's apps, never on checkRight — check...

Kamo·4w ago
Fixkamo-internal

Centre the launchpad tiles that are only an icon and a name

A leaf app pane in its compact form shows no sub-item rows and no description, so the icon/title row was heading a column with nothing in it — pinned to the top...

Kamo·4w ago
Featurekamo-internal

Offer a member only the kinds they can receive

The notification centre and its settings drew every kind to everybody. A member with no Leads app was shown a "Lead callback" filter that could only ever return...

Kamo·4w ago
Featurekamo-internal

The console shows a reader what they may have, and no more

Two things the /kb page reported to anyone holding VIEW_KB_ARTICLES. The corpus. The audience chips an author ticks in the composer — Members, Team Members, Pu...

Kamo·4w ago
Fixkamo-internal

Restore the image-proxy and wallpaper work 266357d0 reverted, and land the permissions change it was meant to carry

266357d0 was built with the wrong index. Its tree came from a stale local HEAD rather than from the staged one, so it carried none of the permissions work its m...

Kamo·4w ago
Featurekamo-internal

A group per app, a console to grant them, and master notes as widgets

Three changes that turned out to be one. THE HOME PAGE. "My Master Note" and "Our Master Note" were bespoke panes rendered straight out of page.tsx, gated on n...

Kamo·4w ago
August 27, 2026
Fixkamo-internal

Stop force-cache pinning "this org has no wallpapers" forever

The console backdrop and the member Wallpaper editor both read the tenant's `config.json` for `backgroundImageCount`, and both asked for it with `cache: 'force-...

Kamo·4w ago
Fixkamo-internal

The grid fetched every page twice, then blanked itself to do it

Opening /leads showed the rows, dropped back to a loading state, and showed them again. It was fetching twice. STOMP raises onConnect on the INITIAL connect ex...

Kamo·4w ago
Fixkamo-internal

Stop the image proxy serving an hour-old copy of another org's branding

Theme asset URLs are stable and say nothing about their contents: an org's simple logo is always `<alias>/img/logo.svg`. Every org is also seeded with the base ...

Kamo·4w ago
Featurekamo-internal

Choose the KamoDesktop resolution, and stop hiding why a launch failed

The remote desktop tracks the browser window and always has, so there was no way to have MORE desktop than window. A picker now sets a fixed size, stored per br...

kamo·4w ago
Docskamo-internal

Check in the useUserInfo shared-store handoff

The "no .md in repos" rule is retired. This handoff doc had been kept local-only; it belongs next to the code it describes.

kamo·4w ago
Docskamo-internal

Close out BL1 and MS1

kamo·4w ago
Fixkamo-internal

Format every phone number a signature prints

The company lines went out as whatever the org record stored — "5555555555" — next to a member's line in the same block, so a signature could show a formatted n...

kamo·4w ago
Fixkamo-internal

One formatter for every number, US and international alike

The formatter every phone surface shared kept the LAST TEN DIGITS of whatever it was handed and dressed them as a NANP number, so "+44 20 7946 0958" rendered as...

kamo·4w ago
Featurekamo-internal

The billing proxy route, and MANAGE_BILLING_PROVIDER's four TS mirrors

Task 8, the kamo-internal half. Six mirrors of the rights architecture; four of them live here. 3. app/lib/rightsHierarchy.ts MANAGE_BILLING_PROVIDER ...

kamo·4w ago
Featurekamo-internal

`?bug=<id>` opens that report's drawer

Where the new status-change email lands. It has to name the report rather than the tab: the status filter defaults to New, and that email is by definition about...

Kamo·4w ago
Featurekamo-internal

Glimmering unread cards, a live badge, and per-status counts

THE BADGE IS ABOUT YOU NOW, NOT ABOUT THE QUEUE. It counted every NEW report platform-wide, so it only ever fell when somebody moved a status — reading the queu...

kamo·4w ago
Fixkamo-internal

A window only announces its own conversation

The messageReceived handler dispatches chat:message-received, which is what makes ChatNotificationListener raise a chat window, and plays the arrival tone. Neit...

kamo·4w ago
Fixkamo-internal

Show what THIS phone server costs, not just the org total

The extensions tab showed only the organization-wide figure, so an empty KamoPBX server displayed "21 billable extensions — $63.00 / month". The 21 were on a Fr...

kamo·4w ago
Featurekamo-internal

Detach the chat navigator from the window it maximizes

The conversation navigator was a child prop of ToolWindowShell, rendered inside the maximized window's content box. Clicking a row in it opens that conversation...

kamo·4w ago
Featurekamo-internal

Company phone (main/toll free) on a member's signature, with their extension

The Content tab of **************** gains two switches: Company Phone (Main) and Company Phone (Toll Free). Enabled, they print the organization's published lin...

kamo·4w ago
Fixkamo-internal

Offer Finish setup on a KamoPBX server that was never provisioned

The card told the admin their phone system was "still being set up" and to wait. That was never going to clear: KamoPBX provisioning runs synchronously when the...

kamo·4w ago
Fixkamo-internal

Format the numbers in call history

The History tab was the one softphone surface rendering a raw provider number: the incoming-call banner and every number in SoftphoneCRM already run through for...

kamo·4w ago
Fixkamo-internal

Keep long app descriptions inside the Apps & Features row

The collapsed accordion summary already set nowrap + ellipsis on the description, but nothing in the flex chain could shrink: a flex item defaults to min-width:...

kamo·4w ago
Fixkamo-internal

Remove the vendors tab, which could only ever show its own mocks

The three pickers classified vendors by id range — 200s appraiser, 300s title, 400s escrow. `commerce_vendors.uid` is INT8 DEFAULT unique_rowid(), about 19 digi...

kamo·4w ago
Fixkamo-internal

Tighten the masthead band and sit both sides on the bottom edge

The launchpad's first band was costing more height than it earned. The page container's uniform inset gave the masthead a 40px top gutter, and the header carrie...

kamo·4w ago
Fixkamo-internal

Call history names the far side, not the member themselves

A history row exists to answer "who was this call with", and that side flips with the direction. HistoryRow read `fromName || fromNumber` unconditionally, so ev...

kamo·4w ago
Docskamo-internal

Close out SW6c, and with it SW6

kamo·4w ago
Featurekamo-internal

ServiceJobApi.createJob, and the back-link builder

Restores the client half of SW6c Task 2, which landed as 157fa714 and was dropped by a history rewrite in a concurrent session; the create screen itself survive...

kamo·4w ago
Featurekamo-internal

The service-request grid and client read the real endpoints

Restores the rest of SW6c Task 4, which landed as d58a6aba and was dropped by a history rewrite in a concurrent session; the detail page survived inside bddd361...

kamo·4w ago
Fixkamo-internal

One back-link that resolves, instead of four that never did

Every service screen's back button was `/commerce?tab=service`. There has never been a tab with that id: `PipelineView.tsx:69-70` builds them as `market-${marke...

kamo·4w ago
Featurekamo-internal

Screenshots AND videos on a bug report

Reporters were describing screen recordings in prose and then posting the file into a chat, because the report form only took stills. It now takes MP4, MOV and ...

kamo·4w ago
Featurekamo-internal

Restore the pipeline Quotes tab and wire quote conversion

`POST /quotes/{uid}/convert` shipped in SW4 and nothing has ever called it: `quotesApi` had ten methods and `convert` was not among them, so the endpoint was li...

kamo·4w ago
Fixkamo-internal

The browser tab is named after the workspace, not the host

Enter Wienerschnitzel or Wendy's and the tab read "KamoCRM", while nothing inside the workspace said KamoCRM anywhere. ABC Mortgage was correct, which made it l...

kamo·4w ago
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
Featurekamo-internal

Mirror VIEW/MANAGE_ORDERS and VIEW/MANAGE_PRICING

The client half of closing the order-mutation hole. SecurityService now gates 39 order, pricing and tax endpoints on four new rights; these are the two mirrors ...

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
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
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
Fixkamo-internal

The agreement sample quotes seats at catalog prices

The default agreement template shipped a worked example that contradicted the catalog on every line it mentioned: 50 users on a 25-seat plan, 25 GB of storage p...

kamo·4w ago
Fixkamo-internal

The platform save dropped every KamoPBX field client-side

Entering the credentials in the UI reported success and changed nothing. systemConfigApi.update serialises an explicit allowlist rather than the caller's object...

Kamo·4w 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