KamoCRM

Mabadiliko ya Tabianchi

Kila kipengele, kurekebisha na kuboresha, posted kama meli. Hakuna kitu kilichofichwa kwa ajili ya uzinduzi.

17,500
Mabadiliko ya Jumla
5,986
Features ya
5,284
Wa
30
Miradi ya Miradi
Filter ya Mradi
Miradi yote17,500AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices740MCPGatewayService251MediaService602RAGService79SecurityService1,847TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter ya aina
Aina zoteBuild16CI523Chore774Docs3,254Feature5,986Fix5,284Other994Performance165Refactor278Revert23Style42Test160Upgrade1
September 2, 2026
Docskamo-internal

Say that the status-label save is a whole set, not a patch

The endpoint's meaning changed underneath this client: a status left out of the list is now a deletion rather than a no-op, which is what lets a label be remove...

Kamo·1mo ago
Featurekamo-internal

The importer, and three things it taught us

Publishes the corpus by driving the real KBService API rather than writing rows -- a direct INSERT skips the version row, the kb.article.published event that is...

Kamo·1mo ago
Fixkamo-marketing

Keep made-up article paths out of the index

The canonical check already stops a wrong path rendering the article -- it serves the not-found page instead. What it cannot do is change the status code: this ...

Kamo·1mo ago
TestSecurityService

Pin the status-label body an org sends to drop a label

The two shapes that used to fail: an empty list, which is what clearing the last remaining label sends and what the handler rejected as malformed, and an entry ...

Kamo·1mo ago
Fixkamo-internal

Send a cleared status label as a removal, not as silence

Emptying a custom label box and saving did nothing. The save built its payload from the labels that had text in them, so a box the org had just cleared was not ...

Kamo·1mo ago
FixSecurityService

Accept a blank status label as the removal it is

The PUT is the org's complete set of custom labels, so it has to be able to carry an emptied box. Two things stopped it: an empty list was rejected as a malform...

Kamo·1mo ago
Fixkamo-shared-library

Let an org put a custom status label back to blank

A status label had no way to be removed. The settings screen saved through an upsert-only bulk write, so the only thing a request could say was "this status is ...

Kamo·1mo ago
Fixkamo-internal

Do not claim nothing matched when a filter hid the matches

The empty-list explanation added with the search results bar keyed off the query alone, so it also fired when the search had matched plenty and the Unread or St...

Kamo·1mo ago
FixKBService

Article translation has never worked

deleteByArticleUidAndLocale is a @Modifying query and JPA refuses to run one outside a transaction. Nothing on this path ever opened one, so every locale of eve...

Kamo·1mo ago
Fixkamo-internal

Stop mail search opening a strip down the side of the screen

MessageBrowser's root element is a horizontal flex row whose children are the columns of the mail UI. The search results bar was written as a bottom bar -- bord...

Kamo·1mo ago
Fixkamo-internal

Follow the maximized chat window's tab in the navigator

Maximizing a chat popup left the conversation navigator on whatever tab it was already showing. `visibleRows` drops every row outside the active bucket, so the ...

Kamo·1mo ago
ChoreSecurityService

Rebuild against the shared library that persists the quote contact

The market writer landed one commit after this service was last built, and CI clones kamo-shared-library at image-build time — so the deployed jar still has the...

Kamo·1mo ago
Docskamo-internal

The Report Studio design — Java-defined reports, a generic renderer

Reports are defined as Java classes in kamo-shared-library and rendered by one capability-driven frontend, so adding a report is a new class and nothing else. ...

Kamo·1mo ago
Featurekamo-shared-library

Persist a market's quote-contact rule, and refuse a half-stated one

The DTOs carried quoteContactMode and quoteContactMemberId but no writer read them, so the setting round-tripped through the form and was silently dropped. Both...

Kamo·1mo ago
Featurekamo-internal

Choose who a quote names as the customer's contact

The market dialog gains "Quote's Future Contact" under Enable quotes: the lead's assigned agent, a choice made per quote, or one explicit person picked with the...

Kamo·1mo ago
FixKBService

Saving an article blocked on 21 translation calls

@Async was inert. **************** called translateArticle on the same bean, so the call went straight to this and never reached the proxy that makes it asynchr...

Kamo·1mo ago
Fixkamo-internal

Stop Send To AI resetting the boxes while they are being typed in

A member filed this against the Send To AI dialog: the description "often resets back to the original description while you are editing it". It reset the instru...

Kamo·1mo ago
FeatureSecurityService

Honour a market's contact rule wherever a quote names somebody

The staff detail, the staff preview and the customer's own page now resolve the contact through one method, so they cannot disagree about who is printed on the ...

Kamo·1mo ago
Featurekamo-internal

The article corpus, and the pipeline that builds it

307 articles across 16 categories and 29 sections, from the 248 draft articles under Documentation/ plus 59 written here: every category and section landing pag...

Kamo·1mo ago
Featurekamo-shared-library

A market decides who a quote names as the customer's contact

QuoteContactMode gives a LeadMarket three answers: the lead's assigned agent (resolved per read, which is what every quote does today and what a null column mea...

Kamo·1mo ago
FeatureInitializerService

Columns for a market's quote contact and the per-quote snapshot

A market names its answer in QUOTE_CONTACT_MODE (+ QUOTE_CONTACT_MEMBER_ID when that answer is one explicit person), and each quote keeps the contact it was rai...

Kamo·1mo ago
Fixkamo-internal

A window that raised itself has not been read

The chat unread badge was invisible everywhere — the Chat button, the Interaction Center, the hexhead — and the reason was not the badge. All three read one cou...

Kamo·1mo ago
Fixkamo-marketing

Point at the real org, keep the tree in the URL, show related articles

KB_ORG_ID was "1". The help center lives in org 1168485648209608710, so every KB read on this site missed -- /help-center rendered its empty state no matter wha...

Kamo·1mo ago
FixMediaService

Announce a message only once it can be read

POST /sessions/{guid}/messages is @Transactional, and the NATS publish of the message has always waited for the commit — with a comment saying exactly why: publ...

Kamo·1mo ago
Featurekamo-internal

Curate an article's related articles

KbRelatedPanel is one component in three places: it curates in the composer and the editor, and reads back on the article view. Adding an article here also adds...

Kamo·1mo ago
FeatureKBService

Related articles, and a public path that keeps the tree

Three things, all reaching the same page. Related articles. KbArticleRelationService owns the symmetric "see also" links: list, set, suggest, and a clear that ...

Kamo·1mo ago
FeatureInitializerService

Migration for KB_ARTICLE_RELATIONS

Mirrors KbArticleRelation in kamo-shared-library. Written explicitly rather than left to ddl-auto so the UID and DATE_CREATED defaults live in the database, whi...

Kamo·1mo ago
Featurekamo-shared-library

Article-to-article relations

KB_ARTICLE_RELATIONS holds the curated "see also" links between articles in one knowledge base. Rows are per direction and the pair is kept symmetric by KbArtic...

Kamo·1mo ago
Fixkamo-internal

Add the missing form-fillable route, and stop offering ungranted actions

Two defects behind one report: the PDF editor would not open, and delete was offered to a member who may not delete. **The editor.** DocManager posts to /api/d...

Kamo·1mo ago
Fixkamo-internal

Ride down to your own message when you had scrolled up

Sending while scrolled up into the history left the member parked where they were, with their own message appended below the fold. From the seat it looks exactl...

Kamo·1mo ago
Docskamo-internal

Design for the Help Center KB build, related articles, and public wiring

Covers the 248 source drafts under Documentation/, the tree they map to under the existing Help Center article, the new KB_ARTICLE_RELATIONS feature, and the th...

Kamo·1mo ago
FeatureSecurityService

Page and search the org directory, and stop two row builders drifting

The networks endpoints answer with the whole set in one body. That is fine for a member of a dozen orgs and impossible for an operator on an estate meant to rea...

Kamo·1mo ago
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·1mo ago
August 31, 2026
Featurekamo-marketing

Starter base up $10 on every term

69 / 59 / 49, from 59 / 49 / 39. The commitment ladder is untouched by design — still exactly $10 off for a year and $20 for three — which is the standard every...

Kamo·1mo ago
Fixkamo-internal

Offer the billing term up front, and stop hiding it over Enterprise

Two separate ways this page withheld the choice. The org console HAD a three-term control, but it was tucked into the right of the "Choose plan" heading behind...

Kamo·1mo ago
Fixkamo-internal

Quote the commitment saving in dollars on the plan cards

The discount is a flat $10 a year and $20 on three years, which is how the catalog sets it and how it is advertised everywhere else. Rendered as a percentage it...

Kamo·1mo ago
Docskamo-internal

Say which subscription the launchpad pill's gate is about

"Not already paying" means the VIEWER's own seat — the same question the Plans & billing page answers when it decides whether to offer them one. Worth stating, ...

Kamo·1mo ago
FixBillingService

Stop offering the internal platform-owner plan for sale

listPlansForMarket filtered on isActive alone, and active is not the same as on the menu. OWNER_UNLIMITED ("Platform Owner — Internal") is active, carries no pr...

Kamo·1mo ago
Featurekamo-internal

The running offer, on Plans & billing and on the launchpad

The console quoted list prices while kamocrm.com advertised a third off the same plan, because nothing in kamo-internal could see that an offer existed. It now ...

Kamo·1mo ago
FeatureBillingService

Serve the running offer, and say whether a seat is actually PAID for

Adds GET /markets/{id}/promotion. There was no way for an in-app buying surface to know an offer was running at all — the marketing site read promotions through...

Kamo·1mo ago
Fixkamo-marketing

Set "/seat/month" to the right of its own line

The price keeps the left edge and the unit takes the right, so the two bracket the card's width instead of stacking flush left — which left the number looking l...

Kamo·1mo ago
Featurekamo-marketing

The offer reaches the hero and the pricing strip

The hero had a countdown ribbon already, and it had been rendering NOTHING since the catalog moved to a percentage: `pickHeroOffer` filtered on FLAT_PER_SEAT be...

Kamo·1mo ago
Fixkamo-marketing

Put "/seat/month" under the price, not beside it

Three-figure rates and "/seat/month" do not share a line on a four-across card. Inline at 1rem the label either wrapped mid-text or squeezed the number it was d...

Kamo·1mo ago
Fixkamo-marketing

A promotion that fails to resolve must not widen to every plan

An EMPTY applicablePlanIds means "no restriction" downstream, so a restriction that fails to TRANSLATE must not be allowed to become an empty list. A Business-o...

Kamo·1mo ago
ChoreSecurityService

Rebuild to pick up BillingCycle.TRIENNIAL

No source change. SecurityService clones kamo-shared-library at image-build time, and the catalog it serves is about to carry TRIENNIAL price rows. @Enumerated ...

Kamo·1mo ago
Fixkamo-marketing

A promo code works on its own last day

The end date is the LAST day a code works, not the first day it does not — SubscriptionPromotions.check reads it that way on the server, and the offer band's co...

Kamo·1mo ago
Featurekamo-marketing

A three-term commitment rail, and a promotion the page can prove

New prices: Starter $59/$49/$39 and Business $119/$109/$99 per seat per month on monthly, yearly and three-year terms. The rail replaces the monthly/annual pair...

Kamo·1mo ago
Featurekamo-internal

Sell the three-year term, and stop four copies of the cycle drifting

The billing cycles were typed out by hand in five places. One of them, the plan-pricing editor, offered "BIENNIAL" — a value the server has never had — so choos...

Kamo·1mo ago
FeatureBillingService

Bill the three-year term, and quote its rate to the console

BillingCycles gains TRIENNIAL, expressed to Stripe as three YEARs rather than thirty-six MONTHs so the renewal tracks the signup anniversary — the same reason A...

Kamo·1mo ago

Je, unaona nini kuhusu usafiri?

Kila kitu kinaingia kwenye tovuti yako mwenyewe. Anza kwenye mpango wa bure na usome ukurasa huu tena katika mwezi mmoja.

Kuwa Huru MileleMtazamo wa bei