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

The browser half of the fifty easter eggs

THE CLAIM ROUTE DID NOT EXIST. The Java endpoint has accepted CLIENT claims since the catalogue's first ones shipped, but nothing in Next forwarded to it and no...

Kamo·1mo ago
Featurekamo-internal

An hourglass sprite for the Loitering track

The catalogue guard gives every TRACK a sprite no other track and no single action wears, so the ninth track needed its own 16x16. Drawn three times before it ...

Kamo·1mo ago
FeatureSecurityService

Probes for the eleven derived easter eggs

Eleven of the fifty secrets are questions about durable data rather than about whether a member has SEEN something, so they are DERIVED and they backfill: a mem...

Kamo·1mo ago
Featurekamo-shared-library

Fifty secret easter eggs, spread across the product

The catalogue was good at rewarding the parts of the product a member already uses and bad at getting them into the parts they do not. A prompt cannot fix that ...

Kamo·1mo ago
FeatureSecurityService

Award Loitering from the session that is still open

The measure is the age of the *** the member is holding, so the session had to start carrying the instant it was minted — nothing anywhere recorded it, because ...

Kamo·1mo ago
Featurekamo-shared-library

Loitering, nine levels of not leaving

A DERIVED track over the age of the session the member is holding right now, in minutes: 30, 45, 60, 90, 160, 360, 720, 1440, 2880. The first entry in DEDICATIO...

Kamo·1mo ago
Featurekamo-internal

Contact Effects moves inside Audio, Video & Controls

It was a top-level tab on the member page, sitting beside Audio & Video and answering the same question — what this shell does under your own hands. It is now t...

Kamo·1mo ago
Featurekamo-marketing

Labor Day — a working skyline clocking off

The nineteenth scene, and the first Monday in September with the Saturday and Sunday before it. It is the one window on this calendar that cannot collide with a...

Kamo·1mo ago
Featurekamo-internal

The celebration engine — an arcade machine installed inside the CRM

/achievements was already a 1987 cabinet, and nothing ever HAPPENED on it. This is the layer that happens: a banner that drops from the top shouting ACHIEVEMENT...

Kamo·1mo ago
Featurekamo-internal

Resolve contact effects through four layers, with a tab at the platform and the member

Contact effects were a single per-member setting on one organization page. They now resolve exactly the way event sounds do — shipped catalogue, then the platfo...

Kamo·1mo ago
FeatureSecurityService

Serve the three layers of the contact-effect stack

GET /api/security/contact-effects returns the platform, org and member layers in one round trip; PUT and DELETE on /{scope} write and reset one layer. The servi...

Kamo·1mo ago
Featurekamo-shared-library

The storage and the platform right for a three-layer contact-effect stack

CONTACT_EFFECT_PROFILES holds the platform, org and member layers of the animation painted where a pointer touches the screen — the same shape, and for the same...

Kamo·1mo ago
Featurekamo-internal

Eighteen sprites for the single-action achievements

Thirty-five new achievements arrived in the catalogue and every one of them was rendering the padlock fallback, because all eight existing sprites belong to the...

Kamo·1mo ago
FeatureSecurityService

Award and backfill the single-action achievements

Twenty-six of the thirty-five are questions the database can already answer, so they are awarded by asking it. SingleActionProbes holds one EXISTS per achieveme...

Kamo·1mo ago
Featurekamo-shared-library

Thirty-five single-action achievements, and a trigger kind

The "have you tried this yet" half of the catalogue: one tier at a threshold of one, cheap on purpose, existing to make the product's own surface discoverable. ...

Kamo·1mo ago
Featurekamo-internal

Skins — the one bar, wearing a different machine's clothes

The scrollbar already let a surface tint itself: five custom properties on the scroller, inherited, read by the overlay. For every screen in the app that is the...

Kamo·1mo ago
Featurekamo-internal

24 more contact effects, grouped by character rather than by geometry

The catalogue sorted itself by what an effect DID — converging, expanding, lively. Nobody opens a settings pane wanting "something that expands"; they want some...

Kamo·1mo ago
Featurekamo-internal

Make the contact effect a choice — 24 of them, one dropdown per event

The six animations shipped last change were hard-wired to the six contact events. They are now a catalogue any of which binds to any event, and the member picks...

Kamo·1mo ago
FeatureSecurityService

Award the six tracking-link achievements, and backfill them

**************** reads all six of a member's marketing counters in one row and settles all six tracks against them. Wired into /self and /self/pending beside th...

Kamo·1mo ago
Featurekamo-shared-library

Six tracking-link achievements, ten levels each

The marketing funnel, read six ways, one track per counter already carried on MARKETING_TRACKING_CODES: DRAW_A_CROWD uniqueVisitors 1 .. 50,000 B...

Kamo·1mo ago
Featurekamo-internal

A storage meter beside My Widgets, for the owner who is filling up

An owner had no way to know how much of their plan's storage they had spent without opening a settings tab they had no reason to open. The bar that told them li...

Kamo·1mo ago
FeatureSecurityService

An owner's storage position, carried on a payload that already exists

The launchpad is getting a storage meter, and the obvious way to feed it is a request of its own on every page load. The numbers do not deserve one: "used" come...

Kamo·1mo ago
Featurekamo-shared-library

How fast an organization's storage is growing

The snapshot table has recorded a daily position per organization since metering began, and nothing read two rows of it together. So the only question storage c...

Kamo·1mo ago
FeatureMediaService

An approval settles the member's achievement

Approving a submission now tells SecurityService to recount that member's SPREAD_THE_WORD standing, so the trophy lands in the same second as the decision rathe...

Kamo·1mo ago
FeatureSecurityService

Award SPREAD_THE_WORD from the Growth Hub

**************** counts a member's APPROVED Growth Hub submissions and settles their SPREAD_THE_WORD level against that count. It RECOUNTS rather than being to...

Kamo·1mo ago
Featurekamo-shared-library

SPREAD_THE_WORD, a nine-level Growth Hub track

The second entry in the catalogue, and the first that is a track rather than an event. One level per stretch of Growth Hub missions a member has had APPROVED: 1...

Kamo·1mo ago
Featurekamo-internal

Tear the page down and rebuild it as an arcade cabinet

Two things were wrong and the first one is a rule, not a preference. FULL WIDTH. The page shipped with `maxWidth: 1240, margin: '0 auto'` inside a content area...

Kamo·1mo ago
Featurekamo-internal

An animation at the point of contact, six of them, one for each way a press can happen

Left down, left up, middle down, middle up, touch down and touch up each get their own animation around the point of contact. They are one family rather than si...

Kamo·1mo ago
Featurekamo-internal

Growth Hub — one thing at a time, beside the App Shelf

The launchpad pane a member works their organisation's growth requests through, and the Marketing settings tab an admin writes and reviews them from. `WidgetDe...

Kamo·1mo ago
FeatureMediaService

The queue a member works through, and the queue an admin reviews

MediaService's Growth Hub surface at /api/media/marketing/growth. It owns this for the same reason it owns tracking, the scoreboard, materials and Canva — and b...

Kamo·1mo ago
Featurekamo-shared-library

The requests an org asks of its people, and the evidence back

Three entities, seven rights and two enum appends behind Growth Hub: a short ordered list of things an organisation asks of everybody — leave a review, share th...

Kamo·1mo ago
Featurekamo-internal

A trophy cabinet, and a celebration that finds the member

Adds the Achievements surface: the trophy in the rail, /achievements, the launchpad leaderboard, and the unlock popup that arrives over whatever page a member h...

Kamo·1mo ago
FeatureMediaService

Relay an unlock to the member it happened to, and to nobody else

SecurityService publishes **************** on core NATS; this puts it on **************** Same arrangement as the training badge, and for the same underlying re...

Kamo·1mo ago
FeatureSecurityService

Award Join The Team to everybody, without a backfill

SecurityService owns the member, so it owns the achievement. It awards, reads, acknowledges and publishes; MediaService only relays. EVERY MEMBER GETS JOIN THE...

Kamo·1mo ago
Featurekamo-shared-library

The achievement a member holds, and the record that proves it

Adds the Gamification app and the domain behind it: a catalogue of achievements in code, a member's standing in data, and a log of every unlock so that nothing ...

Kamo·1mo ago
Featurekamo-internal

The board every org can read, and a vote on every improvement

The organization column is on for everybody now, because every viewer sees every organization's reports. What varies is whether a given ROW can be named, and th...

Kamo·1mo ago
FeatureMediaService

Open the board to every org, withhold who filed each report

The tenancy check is gone from visibleOr404 and from all four queries, so every organization can read, comment on and vote on every report. SystemBugIdentityPol...

Kamo·1mo ago
Featurekamo-shared-library

Every org sees every report, and improvements can be voted on

The tenancy predicate is gone from all four queries, and its absence is the feature: a defect in the platform is not one tenant's private business, and a reques...

Kamo·1mo ago
Featurekamo-internal

A way onto a paid plan that is not hidden under a profile

An owner deciding whether to pay had to know the answer lived under their own profile, three clicks from the page they open every morning, signposted only by a ...

Kamo CI·1mo ago
Featurekamo-internal

Give a member their text numbers, and let them choose which one sends

Two screens, one idea: a phone line usually is not one person's. MEMBER SETTINGS → PHONE A card modelled on the Email tab's mailbox list, because the two scre...

Kamo·1mo ago
FeatureVOIPService

A number can be shared by several members, and one of them receives it

A single OWNER_MEMBER_ID could say "this number belongs to Sarah" and nothing else. Real desks are not shaped like that: a support line is answered by four peop...

Kamo·1mo ago
Featurekamo-internal

The repeat interval goes down to one second

Asked for on 2026-09-06. The floor was five; it is one everywhere now — the control, the clamp the browser applies, and the clamp the service applies. Zero is s...

Kamo·1mo ago
Featurekamo-internal

One checkbox on a callback, to tell the lead

The callback dialog hid the invite controls, and the note under it said "The lead is not notified." That was true, and it was the right call for the control bei...

Kamo·1mo ago
FeatureSecurityService

A callback can invite the lead it is with

Scheduling a callback told the lead nothing. The dialog said so outright — "The lead is not notified" — and the only way to get a customer the time in writing w...

Kamo·1mo ago
FeatureEmailService

A guest a service put on an event is actually told about it

InternalCalendarService wrote the attendee rows and stopped. It never set sendInvites and never called EventInviteService, so a guest arriving through the servi...

Kamo·1mo ago
Featurekamo-shared-library

The three letters a lead gets about a callback

A callback has always been private to the organisation. The member who books one gets a calendar entry and a reminder; the person on the other end of the call i...

Kamo·1mo ago
Featurekamo-internal

Tell me about new mail and unread chat, and keep saying it

Two more tiles under "What you are told about", and the two things behind them. New email is raised off the inbox socket the app already holds open. Unread cha...

Kamo·1mo ago
FeatureInitializerService

The repeat-sound columns, for a fresh environment

EmailService runs ddl-auto: none, so neither column can appear on its own — the entity declares them and Hibernate reads the table happily without them, then fa...

Kamo·1mo ago
FeatureEmailService

Let a browser report the two conditions only it can see

Every notification so far is raised by the service that watched something happen. These two cannot be: whether a member looked at a conversation within five sec...

Kamo·1mo ago
Featurekamo-shared-library

New-email and unread-chat kinds, and a repeating tone

Two kinds a member can be told about and mute like any other. Both announce a condition that stays true rather than a moment that passed, so both are raised onc...

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