Live Change Log

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

17,988
Total Changes
4,648
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,988AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,529TranslateService45VOIPService173VectorService8kamo-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,648Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 20, 2026
Fixkamo-shared-library

Stop losing payloads to endpoint-counter contention

storePayload saved the payload and then bumped totalReceived/lastReceivedAt by dirtying the endpoint entity — in the same transaction. Every submission to an en...

Kamo·3w ago
Fixkamo-internal

Every country flag in the app was a blocked image

Eight more screens had the defect found in the marketing visitor drawer. The app is served under img-src 'self' data: blob: https://theme.kamocrm.com https:/...

kamo·3w ago
Fixkamo-internal

Flags are emoji, because the CSP blocks every flag CDN

The visitor drawer painted a broken-image glyph where each country flag should be. react-country-flag's `svg` mode reads like a self-contained component and is ...

kamo·3w ago
FixDaemonService

Persist each payload's outcome as it happens, not in one batch

processEndpointPayloads looped over the batch mutating statuses in memory and saved them all at the end. createLead commits per lead, so any failure of that fin...

Kamo·3w ago
Fixkamo-shared-library

Move the pool-availability recount after commit

createLead saved the lead and then, in the same transaction, ran countAssignablePool to broadcast the new "Leads Available" figure. On YugabyteDB a read after a...

Kamo·3w ago
FixMediaService

Stamp every unread frame with the instant its counts were read

The four places that built a member's unread snapshot — the REST read, the frame sent when a message arrives, the frame sent when a session is marked read, and ...

Kamo·3w ago
Fixkamo-internal

Clear the unread badge for a conversation the member is reading

The badge was fed by two unordered sources — the REST unread read and MediaService's unread topic — and applied whichever landed last, with nothing ever re-read...

kamo·3w ago
Fixkamo-marketing

Catch the silent version of "sound is not allowed here"

Follow-up to the still. Testing tap-to-play against the deployed site turned up a failure mode the muted fallback did not cover. A refused `play()` rejects, an...

Kamo·3w ago
Fixkamo-internal

Show the code as a handle, not 36 characters of hex

Moving the token to a UUID left the grid rendering the whole thing, which is correct in a URL and useless in a table: it cannot be scanned, compared against the...

kamo·3w ago
Fixkamo-marketing

The microservice count reads 64+, not 30+

The number is 64+ services now. Five untranslated surfaces still claimed 30+: the technology answer in the homepage FAQ JSON-LD (which is what a search result q...

Kamo·3w ago
FixKlusterServices

Cache CORS preflights for two hours, not 100 seconds

`accessControlMaxAge: 100` meant browsers re-ran the preflight roughly once per visit, so every page load on the marketing site paid two extra OPTIONS round-tri...

Kamo·3w ago
Fixkamo-marketing

Clear every console error and DevTools issue

Diagnosed with Chrome over the debugging protocol rather than by reasoning, collecting exactly what Lighthouse's errors-in-console and inspector-issues audits c...

Kamo·3w ago
Fixkamo-marketing

Clean the console, and restore the static rendering I broke

Three things from the console, one of them much bigger than the other two. THE BIG ONE. Chasing the "Fetch failed loading" lines led to the prefetch payload, a...

Kamo·3w ago
Fixkamo-marketing

The Trusted Types policy was being injected by next/script

The report-only console showed two violations, and one of them was the policy component's own doing: This document requires 'TrustedScript' assignment. Thi...

Kamo·3w ago
FixKlusterServices

Stop the edge rate limit from 429ing every cold KamoDesktop load

Opening an assigned Linux instance always landed on Guacamole's generic "An error has occurred and this action cannot be completed" modal, and always worked aft...

Kamo·3w ago
Fixkamo-internal

A popup with nowhere to dock now overlaps instead of not opening

A tool window — the email composer, a support conversation, a chat, the softphone — would sometimes simply not appear, and be fine after a reload. Three silent ...

kamo·3w ago
Fixkamo-internal

Say which link the strip is offering

"Your tracking link" showed exactly one link while a member can hold any number of them, so the strip silently rendered whichever code the sort put first and ga...

kamo·3w ago
Fixkamo-marketing

A fixed-position banner cannot use a scroll-driven reveal

Fallout from the framer sweep, caught before it could matter. The rewrite maps entrance animations onto `.reveal`, which is driven by `animation-timeline: view(...

Kamo·3w ago
Fixkamo-marketing

The platform runs YugabyteDB, not CockroachDB

Unrelated to the performance work — found while reading the homepage's inline payload, where the string turned up in the FAQ answers. CockroachDB was retired f...

Kamo·3w ago
Fixkamo-marketing

Make the server actually able to read the theme path

Completes the change 48493ae shipped half of. That commit swept four in-flight files — layout.tsx, DynamicMetaLoader, TouchOptimized and ThemedBackground — into...

Kamo·3w ago
Fixkamo-marketing

Stop gating the referral beacon, and report the visit properly

Two corrections to what shipped, both restoring the behaviour this feature was asked for. The beacon was gating itself on the analytics consent record. That re...

Kamo·3w ago
Fixkamo-shared-library

Make the two paged tracking reads deterministic

Both paged queries ordered on a column that ties, with no tiebreaker, so the database was free to return tied rows in a different order per page fetch — which s...

Kamo·3w ago
August 19, 2026
FixKlusterServices

Make the HLS playlists immutable, and say what that costs

The playlists were the last entry in Lighthouse's cache-lifetime audit — 300s originally, then an hour, still reported. Everything else in the ladder was alread...

Kamo·3w ago
Fixkamo-internal

Stop opening a note from overwriting it with a blank body

The editor seeded its buffer with `note.content || ''`, then compared that '' against the incoming null and concluded the member had unsaved edits. Two seconds ...

kamo·3w ago
FixKBService

Keep the encryption key across restarts instead of inventing one

Every note body in production was unreadable. NOTES_MASTER_ENCRYPTION_KEY was never set anywhere - not in the deployment, and the deployed ConfigMap carried no ...

Kamo·3w ago
Fixkamo-shared-library

Tell an unreadable note apart from an empty one

A note whose body cannot be deciphered came back with content null and nothing else, which is exactly what an empty note looks like on the wire. Clients could n...

Kamo·3w ago
Fixkamo-marketing

Render themed imagery server-side, and keep brand text readable

Every background on the homepage was being downloaded TWICE. The components rendered the local `/img/bg/N.webp`, then an effect resolved the org's theme path on...

Kamo·3w ago
Fixkamo-internal

Paint the knowledge console in the org's colour, not a fixed purple

The rebuild took its chrome from --accent-knowledge, which globals.css declares as #8b5cf6. That variable does not move with an organization's brand, so every c...

kamo·3w ago
FixKlusterServices

Compress the theme host, which was serving every text asset raw

MinIO returns object bytes exactly as stored — it does not negotiate Content-Encoding — and the two theme IngressRoutes carried `strip-hsts` and `cors` but no c...

Kamo·3w ago
Fixkamo-marketing

Name the controls that had no name, and lift the text under 4.5:1

Three separate defects, all of them invisible to the build, the type check, the lint run and both existing guards. UNNAMED CONTROLS — the phone layout's naviga...

Kamo·3w ago
Fixkamo-marketing

Every route change was animating a scroll back to the top

<html> carried Tailwind's `scroll-smooth` and nothing else. Next suppresses smooth scrolling while it scrolls to a new route, but only for pages that declare it...

Kamo·3w ago
Fixkamo-capcha

Reject a replayed Capcha payload instead of accepting it forever

`verifySolution` answers "is this a correct solution to a challenge we issued". It says nothing about whether we have already accepted that exact solution, and ...

Kamo·3w ago
Fixkamo-marketing

Survive a retried image pull, and stop deploying twice per push

The 013faf1 deploy failed on `exceeded its progress deadline` while the rollout itself was fine — the pod came up healthy about 90s in, and prod has been servin...

Kamo·3w ago
FixMediaService

Resolve a public chat's owner without walking a lazy association

getChatSessions runs outside a transaction, so reaching the session owner through the visitor's lazy session proxy worked only for as long as open-in-view stays...

Kamo·3w ago
Fixkamo-internal

Nobody with a login is the anonymous web-chat visitor

A widget ticket names the org's SYSTEM member as its requestor because the visitor has no member record — and that member is the org owner, usually the person a...

kamo·3w ago
FixMediaService

Stop reading the org's system member as the web-chat visitor

Four reported faults, one cause. A widget visitor has no Member, so the org's SYSTEM member — the owner, who works the queue — stands in for them as the ticket'...

Kamo·3w ago
Fixkamo-shared-library

Give the web-chat visitor an identity of their own

A public web-chat visitor has no Member, so the platform stands the org's SYSTEM member in for them: the ticket's requestor, and the author of every message the...

Kamo·3w ago
Fixkamo-marketing

Carry the heading contrast fix to pricing, security, about and offer

Same defect as the home page, same nine remaining spots: section headings opened on `--color-primary`, which measures 2.61:1 against a mid-green background — un...

Kamo·3w ago
Fixkamo-marketing

Raise section-heading contrast off the green end of the ramp

Every section heading's second line ran `--color-primary` -> `--color-primary-light` -> `--color-secondary`, so it STARTED in the brand green. Measured against ...

Kamo·3w ago
Fixkamo-internal

Stop the inbox claiming email is unset while it works it out

Opening /messages showed the "email isn't available / you have no mailbox" panel for a moment on nearly every visit, then replaced it with the member's real inb...

kamo·3w ago
Fixkamo-internal

Let a note pinned from its sticky reach the launchpad band

The home band fetched the pinned list once on mount, so a note pinned from its floating sticky afterwards was in no list it held. Closing the sticky then left t...

kamo·3w ago
Fixkamo-marketing

Move the grid out of styled-jsx; drop two dead components

Finishes the styled-jsx sweep started on the preview banner. No `<style jsx>` block remains anywhere in the app. SITEMAP — the grid was an inline `display:grid...

Kamo·3w ago
Fixkamo-marketing

Stop the banner flashing unstyled, make whole feature cards clickable

PREVIEW BANNER — its CSS lived in a `<style jsx>` block inside the component. In the App Router styled-jsx does not server-render CSS for client components, so ...

Kamo·3w ago
FixKlusterServices

Pin and verify the kubectl download instead of falling back to a broken wget

The deploy died at "Install kubectl". Three separate faults lined up: 1. curl aborted mid-stream with (56) "decryption failed or bad record mac" — the corru...

Kamo·3w ago
FixKlusterServices

Name channels live/<name>, use Recreate, feed the loop a uniform GOP

Three defects found by exercising the deployed service. 1. The /live/ route 404'd through Traefik. MediaMTX answers the first HLS request with a 302 to `?co...

Kamo·3w ago
FixSecurityService

Make the verification sweep's DNS upgrade reachable

DomainVerificationWatcher gated on **************** but **************** only ever answers ok/pending/error/na — it has never returned "verified". allVerified w...

Kamo·3w ago
FixKlusterServices

Move the encode job's decision logic out of the mc container

The plan stage died on `sed: command not found`. The minio/mc image is minimal to the point of having no sed, awk, grep, wget or curl — it can move objects and ...

Kamo·3w ago
FixKlusterServices

Upload segments with an explicit glob, not --recursive

mc cp --recursive takes a directory; the segments were being passed as a glob, which is the wrong shape for that flag. Segments and the playlist beside them nee...

Kamo·3w ago
FixSecurityService

Restore media as a required DNS alias so its card can verify

media.<domain> backs MediaService realtime websockets and is live in Traefik, auto-cert and the /setup/dns studio catalog, but it was dropped from KnownAliases ...

Kamo·3w ago
Fixkamo-register

Hold the token's int64 ids as digits, not as numbers

KToken could not verify a real token. The four ids it carries are int64s, and the Java signer (kamo-shared-library KToken#canonicalForMac) appends each as a raw...

Kamo·3w 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