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 7, 2026
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
Featurekamo-internal

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

kamo·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FeatureDocsService

Outbound email client and a Redis notification ledger

Idempotency with NO schema change. The reminder bucket is a pure function of (dueDate, today) and never of "when we last sent", so the only durable state a noti...

Kamo·1mo ago
FeatureDocsService

DocsService's first inbound internal-auth filter

DocsService has no service-to-service authentication: ResourceServerConfig is anyRequest().permitAll() and OTKPreAuthFilter CONTINUES the chain when X-OTK is ab...

Kamo·1mo ago
Featurekamo-shared-library

Four canonical HR legal-package templates

hr.package_assigned, hr.package_reminder, hr.package_voided and hr.package_completed, as {json,html} pairs plus four CANONICAL_KEYS entries. The CONSTANT is no...

Kamo·1mo ago
Featurekamo-internal

Signature button with a live legal-package badge

Hand-written into the fixed left cluster between My Profile and Log out. NAV_REGISTRY cannot express a position between two fixed controls and its badgeKey fiel...

kamo·1mo ago
Featurekamo-internal

Live pending-package count over the EXISTING chat socket

LegalPackageCountContext consumes **************** rather than opening a fourteenth STOMP connection for one integer, and subscribes to **************** — the d...

kamo·1mo ago
FeatureMediaService

Relay the legal-package count and guard per-member SUBSCRIBEs

legal.packages.> -> **************** core NATS, no stream — the same shape SupportStompRelayController and PlatformStompRelayController already use. topicFor is...

Kamo·1mo ago
Featurekamo-internal

Proxy the member's pending-package count

A static segment sibling to [uid] so App Router matches it first. PATH ONLY — forwardToApi owns the query string — and one upstream call, because the OTK is sin...

kamo·1mo ago
FeatureDocsService

Serve the caller's own pending-package count

GET **************** through memberGuarded() and the identity funnel. No memberId and no orgId parameter — both come from the session, because an id in a path i...

Kamo·1mo ago
FeatureDocsService

Emit the badge count on every transition that moves it

Four sites: delivery (none -> PENDING), void (open -> VOIDED), redelivery (open -> SUPERSEDED) and finish (open -> EXECUTED). Each passes the status it read BEF...

Kamo·1mo ago
FeatureDocsService

Publish the member's open-package count to core NATS

Connection.publish on legal.packages.{memberId}, NOT NatsMessageService: that service pins .expectedStream(CHAT_MESSAGES) in both publish and publishSync, so a ...

Kamo·1mo ago
Featurekamo-internal

Give the executed-package repair an actual button

POST **************** existed upstream and was tested, but nothing in the product could reach it: no proxy route, no helper, no button. Every failure branch in ...

kamo·1mo ago
Featurekamo-login

Forward the login host so recovery can resolve the org

Password recovery now accepts a member's primary mailbox address, which only names an account within one org. This proxy reaches SecurityService over cluster DN...

Kamo·1mo ago
FeatureSecurityService

Accept a member's primary mailbox address as a login identifier

The address a member gives out is usually the org mailbox flagged Primary on their member settings, not whatever is on their user account — so typing it into th...

Kamo·1mo ago
Featurekamo-internal

Download the executed package from the grid and the member's own page

Both surfaces go through the LEGAL endpoints, keyed on the assignment, not /api/imaging/download/{imgId}: that path additionally needs organization.isDocs and V...

kamo·1mo ago
Featurekamo-internal

Draw non-image attachments with the document manager's file-type icons

A staged .docx or .xlsx was a grey MUI outline with the extension lettered underneath — a shape invented for the tray, and one that says less than the icon the ...

kamo·1mo ago
FeatureDocsService

File after Finish, repair from HR, and download BY imgId

Filing is queued AFTER COMMIT and OFF the request thread. Finish is @Transactional in a service that also serves WOPI; holding a connection across N ESigService...

Kamo·1mo ago
FeatureDocsService

File the merged executed package into the member's own library

uploadDocument takes the SUBJECT'S Member, so Img.organization and Img.createdByMember derive from them and HR ends up having filed a document the member owns. ...

Kamo·1mo ago
Featurekamo-internal

Say what is too big, instead of "Failed to send email"

A draft that outgrew the send endpoint's limits produced one flat line of red text after the whole payload had been uploaded — or, when the body itself was the ...

kamo·1mo ago
Featurekamo-internal

Gate each Human Resources tab on its own right

Overview needs VIEW_OVERVIEW, Attendance MANAGE_TIMECARDS, Legal & Compliance MANAGE_LEGAL_AND_COMPLIANCE, Training MANAGE_TRAINING and Resources MANAGE_RESOURC...

kamo·1mo ago
FeatureDocsService

Enforce MANAGE_LEGAL_AND_COMPLIANCE on the package endpoints

LegalPackageAccess mirrors the Legal & Compliance tab gate, and that tab is now gated on one right of its own instead of VIEW_EMPLOYEES || EDIT_EMPLOYEES || MAN...

Kamo·1mo ago
FeatureSecurityService

Carry existing HR holders onto the new per-tab rights

A right that gates something already reachable is a removal of access: new rights insert as NOT_SPECIFIED, so the /hr tabs would have vanished on deploy for eve...

Kamo·1mo ago
Featurekamo-shared-library

One security right per Human Resources tab

The /hr tabs were gated on whichever pre-existing HR right happened to be an OR-term in the front end: Attendance opened on VIEW_SCHEDULES, Training on VIEW_EMP...

Kamo·1mo ago
Featurekamo-internal

Measure a draft against the send limits before uploading it

A body carrying inline base64 — HTML pasted from a web page, a forward's quoted content, a signature's images — can pass the per-part ceiling on its own. The se...

kamo·1mo ago
FeatureDocsService

The executed package certificate and the ordered merge

The certificate carries the package, the frozen version, the subject, the moment and address of execution, the attestation wording verbatim and both digests the...

Kamo·1mo ago
Featurekamo-shared-library

Expose the content-addressed store so chat attachments can dedup

Chat attachments never went through the hashing pipeline — they wrote a private "<imgId>/<fileName>" object per upload, so the same file attached three times oc...

Kamo·1mo ago
FeatureDocsService

The two byte sources for the executed artifact

LegalPinnedPdf extracts the frozen-digest rule out of the member read path so the wizard and the filed artifact read the SAME bytes through the SAME check — con...

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