Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,987
Total Changes
4,647
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,987AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,528TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,600kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,647Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 26, 2026
Docskamo-internal

Close out SW3

Thirteen departures from plan. The two that mattered most: OrderLineItem .discountType should never have been a String, and exporting the DDL before applying it...

kamo·2w ago
Testkamo-internal

Pin toSessionType and backendCategoryFor

Neither had a single caller in this file before now, despite being exactly the class of function its own header warns about: a one-character typo ('Text' for 'T...

kamo·2w ago
Fixkamo-internal

Stop the text branch's retry storm, pin the observer re-root

voipApi.getConversations goes through apiCall, which throws on any non-2xx — unlike loadMore's other two branches, which fetch() directly and check res.ok. The ...

kamo·2w ago
Fixkamo-internal

Stop the previous commit's CRLF rewrite of memberColor

The previous commit's one-word doc-comment edit (dropping the ChatsList reference) rewrote the whole memberColor function from LF to CRLF: this file mixes line ...

kamo·2w ago
Refactorkamo-internal

Render the shared pane, and widen to 550

NavTopPanel's Chats tab now renders ConversationsPane instead of the old ChatsList, keeping its own search field and passing **************** so members keep th...

kamo·2w ago
Featurekamo-internal

Visit preparation, cancellation, and vaccine lot recall

The last endpoints without a screen. CANCEL, beside no-show on the day. They were one action short of each other and they are not the same thing: somebody TOLD...

kamo·2w ago
Featurekamo-internal

Problems, open orders and results

The clinician's working views. The endpoints existed; the chart showed a summary and nothing you could work from. THE PRESCRIBING BANNER IS THE POINT OF THE PA...

kamo·2w ago
Featurekamo-internal

A patient's insurance, claims, and the self-pay restriction

Practice-wide revenue cycle already lives under /commerce; the PER-PATIENT half had no screen — the front desk could not see who pays before a visit, and nothin...

kamo·2w ago
Featurekamo-internal

Register a patient, with the duplicate check first

The Register button switched tabs to Find and did nothing else — PatientSearchPanel took an onRegister callback that nothing ever passed, so a practice could no...

kamo·2w ago
Chorekamo-internal

Take @kamo/tool-core 0.1.3

Brings setMaximized, ToolWindow.preMaximize and ToolOpenDetail.maximized — the store API the conversation switcher column swaps windows through.

kamo·2w ago
Featurekamo-internal

Booking, and the notes-to-sign worklist

The two things a practice does all day that the app could not do. Both APIs have been on the server the whole time; neither had a screen, so the front desk coul...

kamo·2w ago
Fixkamo-internal

Stop deriving the org's theme domain, and freeze the form while it works

The wizard derived the new org's domain from GET /org/{id}. That endpoint returns the entity, and its `domains` is LAZY — serialized as null outside a transacti...

kamo·2w ago
Featurekamo-internal

Work the cross-practice match queue

The last exchange surface with no screen, and the one that decides whether the connection produces anything at all. A held match is another practice saying one...

kamo·2w ago
Featurekamo-internal

The screens the backend was missing

An audit of every EHR endpoint against its frontend callers turned up surfaces that shipped server-side and could not be reached from the app at all. HEALTHCAR...

kamo·2w ago
Fixkamo-internal

Stop the tracking-link strip clipping its own text

Marketing Tools -> Tracking Codes drew the member's link strip with the eyebrow cut through its capitals, the icon sliced top and bottom, and the line under it ...

kamo·2w ago
Docskamo-internal

Correct SW3's ServiceJob imports and pin the PROCUREMENT trap

Task 2 imported dao.beans.account.Account and dao.beans.organization .Organization. The real packages are accounts and orgs — it would not have compiled. Task ...

kamo·2w ago
Docskamo-internal

Correct the SW3 plan's policy-template claim

Task 6 pointed at RetailInventoryPolicy as the implemented member of the policy family to copy an injection shape from. It is never instantiated and never injec...

kamo·2w ago
Featurekamo-internal

Quality and Records office

Two sections for surfaces that had none. QUALITY. The rate is the headline; the care gap is the product. A practice shown "67% controlled" can do nothing with ...

kamo·2w ago
Docskamo-internal

Plan SW3, the Service Work domain core

ServiceJob 1..N ServiceVisit as a sibling of FulfillmentOrder, a filled ServiceLineItem, the four classification axes, and a status machine that throws instead ...

kamo·2w ago
Docskamo-internal

Close out SW2

Four tasks, five departures from plan. The sharpest: the plan's own restrictionMask snippet filtered out null dayOfWeek, which means 'every day' — it would have...

kamo·2w ago
Stylekamo-internal

The widget controls take the org's colour too

Follows 0c97c900, which did the masthead shortcuts. The same rule reaches the controls inside the panes: anything that carries a background wears var(--color-pr...

kamo·2w ago
Fixkamo-internal

The new workspace opens once, ready, and as itself

Three faults with one cause, reported after creating Carl's Jr: the new tab said ?org=kamocrm.com, showed Kamo's logo and none of the org's colours — while its ...

kamo·2w ago
Docskamo-internal

Correct two errors in the SW2 plan

The rsync recipe used a bare 'rsync -a', which preserves mtimes — a file restored to an earlier version arrives older than the .class already compiled from a la...

kamo·2w ago
Fixkamo-internal

Remove the recurrence control, which discarded what it collected

The switch, frequency select and occurrence count rendered on the calendar page and reached no payload: composeDraft never read them and onSave never sent them....

kamo·2w ago
Featurekamo-internal

The record's Communications tab shows communications

It rendered the record's media stream alone — the internal notes people write about a job. Useful, and not what anybody means by "the communications about this ...

kamo·2w ago
Fixkamo-internal

Settle the loading gate on the gate, not on a "load started" flag

Two follow-ups to the session store, one of them a real defect. ensureLoaded decided foreground-vs-background from an `everLoaded` flag set when the first fore...

kamo·2w ago
Docskamo-internal

Plan SW2, the three calendar repairs

Research corrected the spec on one point: recurrence is not dead at both ends. The UI renders on the calendar page today and silently discards what the member e...

kamo·2w ago
Fixkamo-internal

A tab only names an organization it actually has

Opening TacoBell from /network put ?org=kamocrm.com on the new tab. The tab lands on /validate, which renders inside this shell BEFORE its session exists — so t...

kamo·2w ago
Stylekamo-internal

The launchpad shortcuts wear the org's colour, not glass

The four controls in the launchpad masthead — My Widgets, My Wallpapers, the wallpaper switch wallpaper the member chose, and a translucent white pill over a ph...

kamo·2w ago
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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w 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·2w ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing