KamoCRM

Live Change Log

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

18,590
Total Changes
6,669
Features
5,584
Fixes
30
Projects
Filter by project
All Projects18,590AIService282APIService179BillingService166ConversionService118DaemonService147DocsService258ESigService99EmailService629InitializerService344KBService162KlusterServices771MCPGatewayService277MediaService622RAGService79SecurityService2,026TranslateService62VOIPService265VectorService11kamo-apps29kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,761kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,861kamo-signer-monorepo61kamolos115
Filter by type
All TypesBuild23CI527Chore794Docs3,288Feature6,669Fix5,584Other1,001Performance174Refactor284Revert23Style45Test177Upgrade1
August 7, 2026
Fixkamo-shared-library

Stamp AccountAddress dates so an address can actually be saved

DATE_CREATED is NOT NULL with a DEFAULT now(), but nothing ever set the field. Hibernate names every insertable column in its INSERT, so it sent an explicit NUL...

Kamo·3mo ago
FixAPIService

Forward the caller's query bytes on the public-facing proxies

The gateway stopped double-encoding forwarded query strings in 3c24d32, but four other proxies in this service still concatenated already-percent-encoded bytes ...

Kamo·3mo ago
Featurekamo-internal

Send the editor's back button where the member came from

The wallpaper editor was a dead end — no way out but the nav rail. Both entry points (the home top-bar chip and the member profile header shortcut) now stamp th...

kamo·3mo ago
Fixkamo-internal

Stop a menu click on an open settings page from bouncing back, and repair the dead tab links

Clicking Apps & Features (or Stats & Costs) while /settings/account was already open landed on the tab you came from. Next.js swaps the query string without rem...

kamo·3mo ago
Featurekamo-internal

Show a primary mailbox under its member's profile name

A mailbox held as somebody's primary is that person's address, so suggesting it as "Sales Desk" — whatever it happened to be labelled when it was provisioned — ...

kamo·3mo ago
FeatureEmailService

Name a primary mailbox after the member who holds it

A mailbox someone holds as their primary is that person's address, so presenting it under whatever the mailbox was labelled at provisioning time — "Sales Desk" ...

Kamo·3mo ago
Fixkamo-internal

Stop the tab content overflowing and touching the walls

Two causes, both mine. No padding. TabPanel deliberately supplies none — every tab pads itself, and I had not. The shell now uses p:{xs:3,md:4}, matching MyAcc...

kamo·3mo ago
Fixkamo-internal

Float the label off the placeholder on name prefix/suffix selects

MUI derives InputLabel shrink from `filled || focused || adornedStart`, and `isFilled({value: ''})` is false. Any select that still paints something while empty...

kamo·3mo ago
Fixkamo-internal

Send the timeline provider filter as repeated params, not a CSV

socialTimelineApi.timeline set providers to a joined CSV. A comma in a query VALUE travels as %2C, and any hop that re-encodes turns that into %252C — APIServic...

kamo·3mo ago
FixMediaService

Accept the timeline provider filter as repeated params

The web client sent ?providers=facebook,x as one CSV value. A comma in a query VALUE has to travel as %2C, and a hop that re-encodes turns that into %252C; we d...

Kamo·3mo ago
FixAPIService

Forward the caller's query bytes instead of encoding them twice

Every URL this gateway builds is assembled from getRequestURI() and getQueryString() — both already percent-encoded — and was then handed to RestTemplate as a S...

Kamo·3mo ago
Fixkamo-internal

Ask before any bulk action, not just the folder ones

Emptying and deleting a folder already confirmed. Everything else that moves mail or rewrites its read state did not — it ran the moment the icon was hit. The s...

kamo·3mo ago
Fixkamo-internal

Stop money fields loading a value that fails their own validation

The API stores money as NUMERIC(19,4) and serialises it with toPlainString(), so the shipped $50.00 minimum withdrawal arrived as "50.0000". Both money inputs a...

kamo·3mo ago
Fixkamo-internal

Commission links under My Account, tab reordered, duplicate headers removed

Nav and landing entries move under My Account rather than a separate section. The tabs live on that page, so that is where they belong; the reason I split them ...

kamo·3mo ago
Featurekamo-internal

Register the commission pages in the settings nav and landing page

The tabs existed but nothing linked to them. **************** is the cautionary example already in this repo: a real page with no card, no tab and no nav entry,...

kamo·3mo ago
FixSecurityService

Scope the opportunities read, and give the relay client timeouts

/me/opportunities called reservationRepository.findAll() and filtered org and member in Java. That pulls every reservation on the platform — every tenant's — in...

Kamo·3mo ago
Fixkamo-shared-library

Make the atomic claims actually atomic, and stop starving the oldest payout

An adversarial review of the money path found the concurrency design was not running at all. @Modifying without @Transactional. Spring Data opens no transactio...

Kamo·3mo ago
Fixkamo-internal

Send the status bucket as repeated params, not a CSV

Opening **************** errored with "Unknown status: **************** for every member. listMyAssignments sent the whole bucket as one CSV value. A comma in ...

kamo·3mo ago
Fixkamo-internal

Restore row positioning and make folders actually draggable

Two regressions from 8ab88d59. The message list grew a gap that widened with every row. This project builds Tailwind with `important: true`, so every utility o...

kamo·3mo ago
FixDocsService

Accept repeated status params so the gateway cannot corrupt the filter

Opening **************** answered "Unknown status: **************** for every member. The member grid sent the bucket as one CSV value. A comma in a query valu...

Kamo·3mo ago
Featurekamo-internal

Member commissions tab and the two finance account tabs

Member tab (self-only, team members only): balance + ledger, commissioned opportunities, payout setup, and withdrawals. Account settings gains Organization Stri...

kamo·3mo ago
Featurekamo-internal

Folders you can act on, mail you can select

Right-click any folder for its actions. The menu header is not chrome — it names the folder and shows its live unread/total, so Mark all read and Empty folder c...

kamo·3mo ago
FeatureEmailService

Act on a whole folder, not just the page you scrolled

Mark all read and Empty folder are folder-wide operations the client cannot express by batching uids: it only ever holds the page it has scrolled, so a folder w...

Kamo·3mo ago
FeatureSecurityService

Browser-facing relay for the commission feature

Resolves the session, authorizes, and relays to CommissionService with the org and member stamped from that session — never from anything the caller sent. This ...

Kamo·3mo ago
Featurekamo-shared-library

Find a member's commission splits for their own commissions view

Org-scoped rather than keyed on the member alone: ORG_ID is duplicated onto this table so a row can never be read cross-tenant by id, and a finder that ignored ...

Kamo·3mo ago
Featurekamo-internal

Make the member surface a real kamo data grid

The member's packages were a card list with no motion, which is not how the rest of kamo looks. This is now the house AG Grid: Pending and Completed sub-tabs sy...

kamo·3mo ago
Featurekamo-internal

Show the member's name without the "Hi," prefix

kamo·3mo ago
Refactorkamo-internal

Drop the Notes settings page and section

The Notes settings page was only a ComingSoonTab placeholder, so it gave members a nav entry and a landing card that led nowhere. Remove the route along with ev...

kamo·3mo ago
FeatureDocsService

Server-side paging for the member assignment listing

The member surface asked for MAX_SIZE unconditionally and sliced the result in the browser, so a grid that showed a page had already downloaded a whole employme...

Kamo·3mo ago
Featurekamo-internal

Personal Email Notifications card replaces the Notifications tab

Both switches move onto My Profile in the same shape as the password card: one card, an icon tile and help text per row, and a tinted inset that appears only wh...

kamo·3mo ago
FeatureSecurityService

Expose the user-account email on your own member profile

The profile's Personal Email Notifications card has to name the address missed-message notices actually reach, and that address is the user account's — not the ...

Kamo·3mo ago
FixMediaService

Send missed-message emails to the user account, not the org mailbox

The notice existed to say "you have a message waiting, sign in and read it", and it was being delivered to the mailbox this organization assigned the member — w...

Kamo·3mo ago
Featurekamo-internal

Accounting & Finance permission group and finance-right access to account settings

The Access Security and Administration groups existed only in SecurityRoleManager as inline name lists, so JobTitleManager, DepartmentManager and RolesPermissio...

kamo·3mo ago
FeatureInitializerService

Migration for the commission ledger and Stripe payout tables

Mirrors com.kamo.z.shared.commission. ddl-auto would create these from the annotations anyway; the explicit DDL is the house convention and is what makes the sh...

Kamo·3mo ago
FeatureSecurityService

Seed the finance rights onto every branch model's ADMINISTRATOR template

The three commission rights gate a feature that did not previously exist, so NEW_RIGHT_SEEDS deliberately says nothing about them - that mechanism carries an ex...

Kamo·3mo ago
Featurekamo-shared-library

Team-member commission ledger and Stripe payout domain

Adds com.kamo.z.shared.commission: an append-only signed ledger, a per-member balance row that exists purely to serialize concurrent withdrawals, the Commission...

Kamo·3mo ago
Otherkamo-internal

Re-point the doc manager tab at editedDocs

f98c5edc rebuilt its tree from a pre-8cb0a485 index and carried the old line back with it. `modifiedDocs` no longer exists in the dictionary, so main was callin...

kamo·3mo ago
Featurekamo-internal

Fold MFA into the password card and drop the Sign-in Security tab

Two places asked one question — how do I get into this account — so the second factor now lives beside the password on My Profile, in a card retitled "Password ...

kamo·3mo ago
Otherkamo-internal

The second doc manager tab reads Edited Docs

Points at the renamed key `docManager.tabs.editedDocs`; `modifiedDocs` is gone from the dictionary, so this has to move with it.

kamo·3mo ago
FixDocsService

Never chase a member who already signed, and keep the subject plain

Two behavioural defects in the phase-8 notification path. 1. The reminder sweep ran over OPEN_STATES, which includes AWAITING_OTHERS — "this member finished...

Kamo·3mo ago
Fixkamo-shared-library

Stop HTML-escaping the package title in the four HR subjects

EmailTemplateService renders a template's SUBJECT and BODY from ONE variable map, and all four canonical HR subjects carry {{packageTitle}} — which LegalNotific...

Kamo·3mo ago
Featurekamo-internal

Suggest the org's own mailboxes, aliases and shared mailboxes

The recipient autocomplete only knew contacts and addresses scraped out of the Sent folder, so the organisation's own addresses — everything managed on ********...

kamo·3mo ago
Featurekamo-internal

One mailbox view, and a column that is all list

The Conversational/Classic toggle is gone and every member gets the classic list. Conversation view carried its own list, its own thread pane and its own API su...

kamo·3mo ago
Refactorkamo-internal

Consolidate the member surface onto ?tab=legal-compliance

The standalone **************** route rendered the same component as the settings tab behind a second URL. Delete it and keep the tab: one surface, one entrance...

kamo·3mo ago
FeatureSecurityService

Expose contact email in the by-department roster

The Interaction Center needs a member's address to pre-fill a composer, and the only endpoint that carried one was the single-member detail fetch — one request ...

Kamo·3mo ago
Featurekamo-internal

Email a member straight from their row

The row's action dock could chat, meet, dial and open a profile — the one thing it could not do was start an email, so reaching a colleague by mail meant leavin...

kamo·3mo ago
Chorekamo-internal

Extract the HR Legal & Compliance rendered key set

A literal t('…') scan misses 8 of the module's 81 keys: assignmentStatusKey and statusStateKey return key strings as DATA, and hrTabs.ts holds labelKey and desc...

kamo·3mo ago
FeatureDaemonService

Daily legal-package reminder tick

DaemonService owns the tick because DocsService cannot. DaemonService is strategy:Recreate — the old pod is gone before the new one starts, so a deploy window c...

Kamo·3mo ago
FeatureDocsService

Due-date reminder ladder and the batched, read-only sweep

The bucket is a pure function of (dueDate, today) and never of "when we last sent": UPCOMING_D{n} for the configured offsets, DUE_TODAY, then PAST_DUE_P{floor(d...

Kamo·3mo ago
August 6, 2026
FeatureDocsService

Tell the member — assigned, voided and completed

ONE hr.package_assigned per member per package, never one per document: that is what suppressInvite exists for, and 8 documents x 200 members is 1,600 envelopes...

Kamo·3mo 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