Live Change Log

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

17,915
Total Changes
4,605
Features
4,535
Fixes
32
Projects
Filter by project
All Projects17,915AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService371InitializerService300KBService74KlusterServices545MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,572kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,321kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs226Feature4,605Fix4,535Other6,781Performance136Refactor274Revert23Style48Test69Upgrade1
September 8, 2026
Featurekamo-internal

A capture shelf where the move list was, and a hexhead that says it is your turn

THE SHELF. A move list is a record; between two colleagues playing for fun the pieces you have taken are the thing worth looking at, so they get that space and ...

Kamo·3d ago
Featurekamo-internal

The board you play on now lives in the same room as the pane that started it

You chose a game in a dark room of board lacquer and brass, pressed start, and landed on a white MUI form with a board floating on it — `var(--surface)`, `divid...

Kamo·3d ago
Fixkamo-internal

The two mode plates were clipped by their own scroller, at every size

The selected plate lifts 2px and carries a 1px ring, and it is the first child of an `overflow-y: auto` column — so its top border sat 3px above the clip edge a...

Kamo·4d ago
Featurekamo-internal

Starting a game from a chat asks once, then plays — it never asks who

Clicking chess in a conversation opened the new-game pane and asked whether you wanted to play the computer or a person, then made you pick the person. The pers...

Kamo·4d ago
Featurekamo-internal

The opening pane, rebuilt around a game instead of an icon

The pane you get when chess has no opponent yet was the SaaS-card kit: an icon in a rounded square, two tab-cards, two segmented rows, a button. It looked like ...

Kamo·4d ago
Fixkamo-internal

The proxy could still be walked out of, because a dot is not encoded

The catch-all re-encodes each segment, and the comment claimed that meant it could only ever address the chess API. `encodeURIComponent('..')` is `'..'` — dots ...

Kamo·4d ago
Fixkamo-internal

The error test did not typecheck, and next build runs tsc

`await promise.catch((e: Error) => e)` does not give you an Error. The catch handler's return type unions with the promise's resolve type, so the result is `Che...

Kamo·4d ago
Otherkamo-internal

Merge branch 'main' of ****************

Kamo·4d ago
Fixkamo-internal

The BFF route that was never written, and an error that was a megabyte of HTML

Pressing Start game returned 1,529,239 bytes of markup. `/api/media/*` is not a proxied prefix — every path under it is a hand-written Next route and there is n...

Kamo·4d ago
Fixkamo-internal

AppType hid two live apps, and the guard could not see the place they were hidden

The Java app enum is mirrored into TypeScript twice, and only one of the two was guarded. AppType.ts — the mirror Organization's app getters actually read — had...

Kamo·4d ago
Refactorkamo-internal

Drop aiThinking from the client mirror too

It was always false on the wire and nothing rendered it. Removed alongside the server field so the two shapes stay identical — a mirror that keeps a field the s...

Kamo·4d ago
Otherkamo-internal

Stop the history fetch from deleting the text that just arrived

SmsThread loads its page and REPLACED the list with it. A message landing between the query executing and its response arriving was appended by the live subscri...

Kamo·4d ago
Fixkamo-internal

A black piece on the Kamo board was the colour of the square under it

Only a browser found this. The Kamo scheme derived its piece colours from `--color-primary` as well as its squares, and both mixed the same token into similar d...

Kamo·4d ago
Chorekamo-internal

@kamo/chat-core 0.1.18, for the game-invite fields

The lockfile is edited by hand — four lines: the root range, and the version, resolved URL and integrity of the one package. `npm install --package-lock-only` r...

Kamo·4d ago
Otherkamo-internal

Carry an arriving text across the boundary the dock sits above

An inbound SMS never reached an open SMS window, and the reason was not the transport everyone went looking at. SmsMessageProvider was mounted in Authenticated...

Kamo·4d ago
September 7, 2026
Fixkamo-internal

Dial the detail dialog's tel: through the shared normaliser

The dialog built `tel:${action.tel}` by hand because telHref() was not on main when it landed — it was in a concurrent branch, and importing it then would have ...

Kamo·4d ago
Fixkamo-internal

One formatter, and one dialable link, for every number on screen

Follow-on to the lead-view country-code fix, closing the places that still answered the same question their own way. `NumbersTab` kept a private US-only format...

Kamo·4d ago
Fixkamo-internal

Light the bell, and make a click mean something

Three defects behind one report: the browser tab alerted for an unread notification while the bell stayed dark, and clicking rows on /notifications went to the ...

Kamo·4d ago
Featurekamo-internal

Filter the bug and improvement reports by who filed them

Reuses /leads' Agent filter — the same field, the same picker, the same gesture — pointed at a different directory: everybody who has filed at least one report,...

Kamo·4d ago
Fixkamo-internal

Two more deadlines a background tab cannot meet

Swept the app for the failure the notification deck's repeat turned out to be: work whose correctness depends on a timer firing while nobody is looking. Chrome ...

Kamo·4d ago
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·4d 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·4d ago
Fixkamo-internal

A bulk action announces the folder changed, like opening one message does

`email:folder-changed` is what the nav badge listens for while it is not being pushed a count — a socket that never came up, or one that came up and relays noth...

Kamo·4d ago
Fixkamo-internal

The nav badge follows a message being read, instead of waiting for a reload

The badge treated the STOMP socket being UP as proof that counts were being pushed to it, and those are two different questions. EmailService relays the count f...

Kamo·4d ago
Fixkamo-internal

A lead outside the US lost its number's country code

The lead view read "+373 606208888" back as "606208888". `formatPhoneDisplay` chose between national and international form by comparing the number's calling co...

Kamo·4d ago
Fixkamo-internal

The repeating sound survives a tab nobody is looking at

"Repeat sound" saved correctly and did nothing audible. The deck beat the tone out with setInterval, and Chrome clamps timers in a page that has been hidden for...

Kamo·4d ago
Fixkamo-internal

The leaderboard called everyone on it a former member while it loaded

The board and the names come from two different places, and the names come second. The board is one request to SecurityService; the names are the shared member ...

Kamo·4d ago
Fixkamo-internal

The contact-effect editor's accent is the org's primary, not a fixed purple

The editor painted its reset control and its "Following the shipped default" helper lines in #8b5cf6, hardcoded four times over — the shared editor's default pl...

Kamo·4d 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·4d ago
Fixkamo-internal

The storage meter's trough was black, which is most of the bar

Reported twice, and the first fix missed it. That pass corrected every foreground and left the trough at rgba(0,0,0,0.28) with a black inset shadow, on the reas...

Kamo·4d ago
Fixkamo-internal

The dock was reserving space for its own scrollbar, and walking left

A docked window crept left in 38px steps and then jumped back to the right edge, over and over, for as long as it was open. `rightEdgeReserve` accepts a scroll...

Kamo·4d ago
Fixkamo-internal

Remove the mock desktop dialog, and guard against it coming back

The celebration layer's corner alert reproduced a named third party's interface chrome — its title bar gradient, its double bevel, its close box — and said the ...

Kamo·4d 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·4d ago
Fixkamo-internal

Round the artwork's corners

The picture sat square inside a pane with a 16px corner, cutting a rectangle out of the glass. 12px on the wrapper — the same radius the drop veil uses — and th...

Kamo·4d ago
Fixkamo-internal

Make the cabinet as tall as its own content

The page was dark for one screenful and then white for the rest of the scroll. `PageWrapper` is `height: 100%` with `flex-direction: column`, so every route in...

Kamo·4d 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·4d 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·4d 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·4d 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·4d 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·4d ago
Fixkamo-internal

The white band under the cabinet

The application's `body` and `html` are `--background: #ffffff`, and this route is the one dark surface in it. The page element is `min-height: 100%` so it fill...

Kamo·4d ago
Testkamo-internal

Pin the storage meter to white, and ship the fix past a dead runner

A source-level guard rather than a rendered assertion, because none of what went dark is visible to a rendered one. Three of the four faults were dark for only ...

Kamo·4d ago
Fixkamo-internal

Every foreground on the storage meter is white

Reported unreadable, and it was. Four places went dark or coloured where the rest of the component is white on a dark ground: - The "Add 10 GB" button was #0b0...

Kamo·4d 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·4d ago
Testkamo-internal

Fail the build on a character the bitmap font cannot draw

A codepoint Press Start 2P lacks does NOT render as tofu. The browser silently falls back to a system font, so the character appears, correctly shaped, and mere...

Kamo·4d 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·4d 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·4d ago
Fixkamo-internal

A scrollbar 17px in from the edge is still a scrollbar the dock must not cover

The tool dock reserved the right edge for a page's vertical scrollbar only when that bar was AT the edge — within two pixels, for sub-pixel rounding. Almost no ...

Kamo·4d ago
Fixkamo-internal

The Accounts app was billed as Human Resources, so the Free plan lost it

The `accounts` option was gated on `organization.isHrs && VIEW_EMPLOYEES`. Neither half is what /account is: its own backend enforces VIEW_ACCOUNTS (CRM) on the...

Kamo·4d ago
Fixkamo-internal

Three React Compiler errors, and what each of them was really saying

The compiler rules caught three things in the achievement surfaces, and none of them was a style complaint. A component aliased into a local during render (`co...

Kamo·4d 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