KamoCRM

Mabadiliko ya Tabianchi

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

17,570
Mabadiliko ya Jumla
6,034
Features ya
5,300
Wa
30
Miradi ya Miradi
Filter ya Mradi
Miradi yote17,570AIService258APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService582InitializerService329KBService151KlusterServices744MCPGatewayService256MediaService602RAGService79SecurityService1,858TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,371kamo-login337kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,670kamo-signer-monorepo56kamolos114
Filter ya aina
Aina zoteBuild16CI523Chore775Docs3,257Feature6,034Fix5,300Other994Performance165Refactor278Revert23Style42Test162Upgrade1
August 26, 2026
Performancekamo-internal

One session snapshot for the tab, not one per hook instance

useUserInfo held its session in three useState cells. It has 187 call sites and roughly 27 of them are mounted for the whole session — the nav, every shell prov...

kamo·2mo ago
Fixkamo-internal

The org reference belongs in proxy.ts, not a second middleware file

Next 16 replaced middleware with proxy, and this repo already had proxy.ts — so adding middleware.ts alongside it failed the build outright: "Both middleware fi...

kamo·2mo ago
Featurekamo-internal

Mirror the Service Work rights into TypeScript

VIEW_SERVICE_WORK, VIEW_OWN_SERVICE_WORK, MANAGE_SERVICE_WORK, ASSIGN_SERVICE_WORK and COMPLETE_SERVICE_WORK land at ids 268-272, not the 265-269 the plan assum...

kamo·2mo ago
Fixkamo-internal

One tab, one tenant — stop resolving the org from the shared cookie

Open KamoCRM in one tab and another organization in a second, refresh the first, and it rendered as the second. Close that tab, refresh again, and it came back....

kamo·2mo ago
Docskamo-internal

Notification-spine follow-ups, triaged

Deferred items from the 33-task plan, all raised by review and all non-blocking. The whole-branch review's four must-fix findings were fixed and are not listed....

kamo·2mo ago
Fixkamo-internal

Stop standing workload from flashing the browser tab forever

TabAttention fed navGrandTotal into a 1100ms title flasher. Four of its eight addends are queue depth that never reaches zero when a member reads something: sup...

kamo·2mo ago
Fixkamo-internal

Wire markSmsRead/markAiRead/social mark-read to their windows

Final review found markSmsRead and markAiRead had zero callers, and SocialChatWindow never called markAsRead/beginViewing at all — three of five conversation su...

kamo·2mo ago
Performancekamo-internal

Ship Geist as WOFF2

Both faces are preloaded on every route, so the format is paid on every first visit. 134,132 B of WOFF became 112,252 B of WOFF2 — 21,880 B, a 16% cut. That is...

kamo·2mo ago
Docskamo-internal

Take the softphone measurements instead of waiting for them

38 calls in the entire history of PHONE_CALL_LOG, 26 in the last 30 days. The drop-then-redial fingerprint finds 4 pairs, all provisioning test calls from April...

kamo·2mo ago
Fixkamo-internal

Give the web media path a TURN relay

The browser SIP path built its peer connection with one hardcoded public STUN /api/voip/turn/credentials for as long as that endpoint has existed — TurnControll...

kamo·2mo ago
Docskamo-internal

Plan Service Work's first rights and the commerce permission gap

Corrects two spec assumptions against real code: no RoleRightType uses **************** (all 36 commerce rights use POS, and the editors filter on exact equalit...

kamo·2mo ago
Testkamo-internal

Pin down bucketOf and unreadForRow against a repeat

This file just shipped four silent defects in one review round — an AI row that fell through to the wrong bucket, a title that was never read off the row, a buc...

kamo·2mo ago
Performancekamo-internal

A retail market should not download the mortgage tabs

The market settings page imported all 24 tabs statically, so every market shipped every tab — a retail market carried the seven mortgage tabs, the four personal...

kamo·2mo ago
Performancekamo-internal

Show the first wallpaper without waiting for the slowest

The slideshow preloaded every wallpaper behind a single Promise.all, so nothing painted until the LAST image in the set had settled. On a tenant with a dozen ba...

kamo·2mo ago
Fixkamo-internal

Stop the app tree's rails putting a scrollbar on the viewport

/settings/account?tab=apps scrolled the whole window, down into empty space below the shell, while the apps column it was supposedly scrolling had its own scrol...

kamo·2mo ago
Docskamo-internal

Mark the line window executed

All eight tasks shipped across four repos, with the four deliberate deviations recorded — most importantly that Task 6's call surface was written fresh rather t...

kamo·2mo ago
Featurekamo-internal

Gate the line window per member, and show which mode you are in

The rollout control. Default off, opt-in per member from Phone Settings, nested under the VOIP switch because it means nothing for a member with no line. One h...

kamo·2mo ago
Performancekamo-internal

Every context and hook now reads user-info through the coalescer

Seven independent /api/user-info calls fired on a cold authenticated load, each one asking for the member id a sibling was already asking for at the same moment...

kamo·2mo ago
Performancekamo-internal

One refresh timer for the whole app, not one per useUserInfo()

useUserInfo has 194 call sites, roughly a dozen of them mounted for the entire session — the nav, the shell providers, the launchpad. Each instance armed its ow...

kamo·2mo ago
Docskamo-internal

Keep the decision record — 18 rulings and what each costs if wrong

The plan records what shipped; this records why it differs from the plan. Three rulings were themselves corrected by a later review (the Stripe write count went...

kamo·2mo ago
Performancekamo-internal

Server-render the authenticated app, and fix the fallback org that 500s

MemberListProvider returned null until its mount effect ran, and it sits above NavTop AND {children} — so that one line kept the ENTIRE authenticated applicatio...

kamo·2mo ago
Featurekamo-internal

An AI sub-tab in the Interaction Center

AI sessions live in AIService and are not MediaSessions, so this bucket gets its own loader in front of the /api/media/sessions/chat fetch the other four share,...

kamo·2mo ago
Featurekamo-internal

The dedicated line window

The call now lives in a window a refresh of the workspace cannot touch. SoftphoneProvider becomes owner-or-follower. Only the owner REGISTERs and opens the STO...

kamo·2mo ago
Featurekamo-internal

A communications tab that rolls up the account's leads

The level most people mean when they say "this customer's calls". Several leads commonly hang off one account precisely because they are the same person enquiri...

kamo·2mo ago
Docskamo-internal

The KamoDesktop link is single-use now

The comment claimed a reload re-submits ?data= and restores the session. It no longer does: the link is spent the moment the tab opens it, so it is worthless af...

kamo·2mo ago
Fixkamo-internal

Thump the first real message, not just the second

shouldThump(undefined, n) meant "first render" — but a spawned head's unread starts genuinely undefined, and applyUnreadToHeads's own undefined-vs-0 guard never...

kamo·2mo ago
Featurekamo-internal

Line ownership, the bridge, and the no-yank handover rule

Three pure modules with no consumers yet, so this ships inert. lineOwnership elects exactly one SIP registrar per browser via Web Locks. That is mandatory here...

kamo·2mo ago
Docskamo-internal

Stop the plan instructing the money-path bug it was corrected on

Task 8 Step 4 still told the reader to key update/cancel/detach/del with "the current intent in the key". That is the Critical defect the final review reversed:...

kamo·2mo ago
Featurekamo-internal

The tab title counts everything waiting, not just chat

The tab strip has room for one number, and 'chat and support only' stopped being what a member is waiting on once SMS, AI, missed calls and unreviewed reports e...

kamo·2mo ago
Docskamo-internal

Answer the softphone spec's biggest open question

Verified live on the cluster: every FreePBX AOR is max_contacts=1 with remove_existing=yes. That value was set nowhere in any Kamo repo, which is why it had gon...

kamo·2mo ago
Featurekamo-internal

Badge the AI option with unreviewed replies

kamo·2mo ago
Fixkamo-internal

Make every client component safe to render on the server

Next server-renders client components, so `window`, `document`, `localStorage`, `sessionStorage` and `navigator` do not exist during the render that produces th...

kamo·2mo ago
Featurekamo-internal

A total on the phone icon, the breakdown in the menu

This icon carried no badge at all, so a missed call while the softphone was closed reached the member nowhere. Opening the phone clears the missed count.

kamo·2mo ago
Featurekamo-internal

A total on the icon, the breakdown in the menu

pendingCount was the whole badge, so unreviewed bug reports and webinars booked on somebody's behalf had no way to reach anyone. Opening the webinar row stamps ...

kamo·2mo ago
Refactorkamo-internal

The settings tab opens the calendar's editor

Sharing the day picker was the half-measure. It left two forms that still had to agree with each other about recurrence, times, effective range, note, save sema...

kamo·2mo ago
Featurekamo-internal

The chat badge counts chats

It was silently chat plus support, so a ticket lit the chat bell and nothing distinguished the two. Support has its own icon now; social joins chat, because a s...

kamo·2mo ago
Featurekamo-internal

Let a dropdown row carry its own count

The icon shows the sum and the rows show the breakdown — the point of splitting the indicators is seeing WHICH thing wants you without opening anything.

kamo·2mo ago
Featurekamo-internal

Thump on arrival, with the glow dissipating outward

Its own layer inside .hex-scale: that element already animates transform for the hover grow, and two animations on one element do not compose — the second repla...

kamo·2mo ago
Featurekamo-internal

One context for the four indicators' counts

Composes what exists and owns the three that had no home: unreviewed bug reports, unreviewed webinars, and the phone's missed calls and voicemails. The 60s for...

kamo·2mo ago
Docskamo-internal

Mark the softphone guardrails plan executed

Real commit SHAs in place of the placeholder, and 47 steps ticked. A finished plan showing all-unchecked boxes misreads as abandoned work.

kamo·2mo ago
Performancekamo-internal

A checkbox click should not re-render the folder sidebar

Six call sites read the email store with a bare `useEmailStore()`. In zustand that subscribes to the WHOLE store, so any change anywhere in it re-renders the co...

kamo·2mo ago
Featurekamo-internal

The drop beacon reports which path ICE actually chose

The beacon shipped iceCandidateType as a permanently-null field. That is worse than omitting it: it makes the telemetry look more informative than it is, and th...

kamo·2mo ago
Performancekamo-internal

Memoize the app-wide unread value, fix a self-retriggering effect

UnreadContext published a fourteen-member object literal as its context value, so React saw the context change on every render of the provider and woke every co...

kamo·2mo ago
Performancekamo-internal

Stop polling for badges nobody is looking at, and stop waking every consumer

Two always-mounted providers ran a one-minute poll with no visibility gate. LegalPackageCount had none at all; TrainingPendingCount had a visibilitychange re-re...

kamo·2mo ago
Performancekamo-internal

A phone-less org should not open a call socket

The softphone opened its SockJS/STOMP connection to media.<domain> unconditionally at boot. getCapabilities() is awaited a few lines above and is the backend's ...

kamo·2mo ago
Featurekamo-internal

One day picker, shared by the calendar and the settings tab

The two surfaces had each grown their own answer to "which days?". The settings tab put Workweek Days, Weekend Days and Every Day behind a dropdown; the calenda...

kamo·2mo ago
Performancekamo-internal

Stop re-merging the whole catalogue on every request

getRequestConfig runs per request, and for any non-English member it called mergeWithFallback over the entire 23,252-key catalogue every time — rebuilding a res...

kamo·2mo 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