Live Change Log

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

17,866
Total Changes
4,581
Features
4,513
Fixes
32
Projects
Filter by project
All Projects17,866AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService348InitializerService299KBService74KlusterServices539MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,554kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,581Fix4,513Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
April 26, 2026
FixVOIPService

Correct GraphQL field name to fetchAsteriskDetails

FreePBX API returns "Did you mean fetchAsteriskDetails?" — rename the health check query and its data path accessor accordingly.

Kamo·4mo ago
FixVOIPService

Add XHR/Accept headers and String response parsing to GraphQL client

Same pattern as FreePBXTokenCache: add X-Requested-With + Accept: application/json to suppress FreePBX's HTML redirect responses, and switch all three call site...

Kamo·4mo ago
Fixkamo-internal

Sync mailbox dropdown to primary mailbox on load

Dropdown defaulted to first list item because selectedMailbox initialized without a mailboxId, causing currentValue to resolve to bare 'personal' which matched ...

kamo·4mo ago
FixAPIService

Raise file upload size limit to 500MB

Spring Boot defaults cap multipart parts at 1MB, causing background image uploads to fail with 500 in request.getParts(). Match SecurityService's existing 500MB...

Kamo·4mo ago
Fixkamo-internal

Surface HTTP errors so upload failures are visible

Replaced silent console.warn with a thrown Error on non-OK status, so the user sees the actual failure reason (status + response body) instead of silently proce...

kamo·4mo ago
FixVOIPService

Add Accept+XHR headers and raw-string response parsing for token endpoint

FreePBX was returning text/html when called via cluster DNS because the Host header didn't match the configured PBX_HOSTNAME. Adding Accept: application/json an...

Kamo·4mo ago
Fixkamo-marketing

Drive minimized-tab entry through animation controls

Switching animate={...} to animate={tabControls} broke the entry animation: tabControls has no queued target on mount, so the button stayed at its initial { y: ...

Kamo·4mo ago
FixVOIPService

Correct OAuth2 scope strings for FreePBX API

FreePBX scopes are top-level identifiers: 'gql' (all GraphQL) and 'rest' (all REST). The format 'gql:read' means GQL for a module named 'read', which doesn't ex...

Kamo·4mo ago
Featurekamo-marketing

Live unread badge + bounce on new agent message

- Keeps LiveSupportPanel mounted offscreen while the widget is minimized (only when a support session exists) so the STOMP subscription stays alive and onUn...

Kamo·4mo ago
FixKlusterServices

Expose port 8088 directly on ClusterIP service

Service only had port 80→8088 mapping. Internal services using **************** (e.g. VOIPService API token requests) were timing out because port 8088 had no l...

Kamo·4mo ago
Fixkamo-internal

Trust backend pendingCount, drop client offsets

Backend pendingCount is now unread-based (counts SUPPORT_TICKET sessions with messages newer than the owner's lastViewed). When the agent opens a ticket, markAs...

kamo·4mo ago
FeatureMediaService

Broadcast pending count + unread on agent read & visitor send

- **************** now delegates to **************** so the count reflects sessions with unread visitor messages and decrements when the agent calls markA...

Kamo·4mo ago
Featurekamo-shared-library

Unread-based count + lookup-by-session helper

Adds **************** so the navtop SupportButton badge can count support tickets that actually need attention (have unread visitor messages) instead of just PR...

Kamo·4mo ago
FixKlusterServices

Add missing fail2ban-config ConfigMap for k1m1

Deployment references fail2ban-config ConfigMap (jail.local + asterisk-security.conf) but it did not exist, blocking the pod at MountVolume.SetUp and preventing...

Kamo·4mo ago
April 25, 2026
ChoreMediaService

Rebuild to pull latest kamo-shared-library

Picks up the new **************** queries and the SUPPORT_TICKET branch in ****************

Kamo·4mo ago
Fixkamo-internal

MarkAsRead after agent send so lastViewed advances

On support tickets, both visitor and agent messages are stored under the same systemMember, so the unread-count query is member-agnostic and relies entirely on ...

kamo·4mo ago
Fixkamo-shared-library

Support tickets need member-agnostic unread counts

Visitor messages on support tickets are stored under the same systemMember that the agent authenticates as, so the existing CHAT-session unread queries — which ...

Kamo·4mo ago
FeatureKlusterServices

Add media to subdomain cert provisioning list

Kamo·4mo ago
Featurekamo-internal

Add media subdomain to required DNS aliases

kamo·4mo ago
OtherSecurityService

Add logging to uploadBackground endpoint

Log org/index, file info, userId, auth decisions, and MinIO staging key to trace why background uploads are not appearing in staging bucket.

Kamo·4mo ago
Otherkamo-internal

Add logging to upload-background proxy route

Log org/index, file name/size/type, and upstream response status to diagnose why background uploads are not reaching APIService.

kamo·4mo ago
Featurekamo-internal

Add Location column to ticket datagrid

Reads **************** straight off the SupportTicketDTO (now snapshot on the ticket entity at creation time — no extra round trip). Renders flag + city/region/...

kamo·4mo ago
PerformanceMediaService

Store geo on ticket at creation, drop GeoLite reads

**************** now captures the visitor's geo once (via GeoLookupService) and persists ip/country/city/subdivision on the SupportTicket itself. SupportTicket...

Kamo·4mo ago
Featurekamo-shared-library

Snapshot visitor geo on ticket entity

Adds VISITOR_IP_ADDRESS, VISITOR_COUNTRY_CODE, VISITOR_COUNTRY_NAME, VISITOR_CITY, VISITOR_SUBDIVISION columns. Captured at ticket creation so the list/detail e...

Kamo·4mo ago
PerformanceMediaService

Bulk-load visitors and skip GeoLite lookup in list

The /api/support/tickets list endpoint was running, per page of 20 rows: - 20 **************** calls (N+1) - 20 calls into GeoLookupService.lookup, each of ...

Kamo·4mo ago
Performancekamo-shared-library

Add findBySessionGuidIn for bulk loading

Used by the support-ticket list endpoint to fetch all visitors for a page in one query instead of N separate findBySessionGuid calls.

Kamo·4mo ago
Fixkamo-internal

Pass folder to loadThread retry button

loadThread takes (threadId, folder); the error-state retry button only passed threadId, breaking the kamo-internal build. Match the call to the signature.

kamo·4mo ago
ChoreSecurityService

Rebuild to pick up Member JsonIdentityInfo fix from kamo-shared-library

kamo-shared-library b57d156 fixes @JsonIdentityInfo(property = "uniqueId") → "id" on Member, resolving 400 errors on PUT /api/security/org/{id}.

Kamo·4mo ago
Fixkamo-shared-library

Correct JsonIdentityInfo property from 'uniqueId' to 'id'

Member entity declared @JsonIdentityInfo(property = "uniqueId") but the actual primary key field is named 'id'. Jackson threw "cannot find property with name 'u...

Kamo·4mo ago
FeatureMediaService

Add /ws/public-chat-native plain WebSocket endpoint alongside SockJS

Registers a second STOMP endpoint without SockJS at /ws/public-chat-native so that the frontend can connect with a native WebSocket (brokerURL) without needing ...

Kamo·4mo ago
Fixkamo-marketing

Remove SSR guard causing hydration mismatch; drop SockJS for native WebSocket

- Hero.tsx: remove typeof window check around ParticleField — ParticleField already has ssr:false so the guard produced a server/client tree mismatch (React #...

Kamo·4mo ago
Featurekamo-internal

Per-ticket unread badge + 'New messages only' filter

- Ticket list shows a chat-bubble badge with the unread count next to ticket# whenever the session has messages newer than the agent's last viewed message. ...

kamo·4mo ago
FeatureMediaService

Broadcast unread counts to agent on visitor message

After a visitor sends a support message, push the latest unread-counts payload to **************** so the agent's ticket-list badge and navtop counter update in...

Kamo·4mo ago
Featurekamo-shared-library

Include SUPPORT_TICKET sessions in unread membership query

findChatMembershipsByMemberId now returns memberships for both CHAT and SUPPORT_TICKET session types, so the existing per-member unread-count infrastructure (ge...

Kamo·4mo ago
Fixkamo-internal

Clear unread indicators when conversation is opened

ThreadDetailView now dispatches email:folder-changed after markConversationRead succeeds so MailButton refetches the navtop inbox badge count. ConversationListV...

kamo·4mo ago
FixAPIService

Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter

The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...

Kamo·4mo ago
Fixkamo-marketing

Use /public/{mainDomain}-{tld} path matching actual MinIO bucket layout

The getThemePath() was generating /domain/{tld}/{split}/kamosite paths that don't exist in MinIO — theme files live in the public bucket under kamocrm-com/, bad...

Kamo·4mo ago
Fixkamo-internal

Break min-w-0 chain to contain email scroll in body column only

Add min-w-0 to outer container and main content flex div so flex children cannot expand to email min-content width, which was causing the page-wide horizontal s...

kamo·4mo ago
Fixkamo-internal

Hoist providers above ToolProviders

Same root cause as the ChatWebSocketProvider hoist: SupportTicketWindow calls **************** and ChatBox calls useUnread().markAsRead(), but both tool windows...

kamo·4mo ago
Fixkamo-marketing

Add suppressHydrationWarning and fix broken placeholder images

suppressHydrationWarning on <html> prevents React error #418 caused by browser extensions (e.g. translate, dark mode) mutating html attributes between SSR and c...

Kamo·4mo ago
FixKlusterServices

Allow /domain/ path prefix on theme IngressRoute for CORS

The theme config at theme.kamocrm.com/domain/... was not matched by the existing route rules (only /public/ and /internal/ were allowed), so Traefik returned a ...

Kamo·4mo ago
FixAPIService

Remove duplicate CorsFilter and strip upstream CORS headers in gateway

WebConfig.java defined a second CorsFilter bean competing with CorsConfig.java's bean, risking duplicate header writes. Deleted it so only one CorsFilter exists...

Kamo·4mo ago
FixSecurityService

Remove duplicate CorsFilter bean causing double Access-Control-Allow-Origin header

The explicit CorsFilter bean caused a second CORS filter alongside Spring Security's built-in CORS support (which uses CorsConfigurationSource). Both filters re...

Kamo·4mo ago
Fixkamo-internal

Remove debug console.log statements and add missing routes

Remove all temporary debug logging added during WebSocket tracing from ChatBox, TicketChat, MemberItem, ChatTool, and useChatWebSocket; add redirect pages for /...

kamo·4mo ago
Fixkamo-internal

Prevent message header from expanding column on long addresses

The header's left flex child had no min-w-0, so long unbreakable email addresses in From/To/Cc forced its min-content width to grow, dragging the header (and th...

kamo·4mo ago
Fixkamo-internal

Hoist ChatWebSocketProvider above ToolProviders

ToolDock (and its tool windows like SupportTicketWindow → TicketChat) is mounted inside ToolProviders, which sits ABOVE PresenceWrapper in the tree to avoid unm...

kamo·4mo ago
Fixkamo-internal

Drop Shadow DOM in email renderer so overflow-x-auto fires

Shadow DOM was the root cause. Wide email content (fixed-width tables) inside the shadow tree painted past the host without contributing to the host's layout bo...

kamo·4mo ago
Fixkamo-internal

Align ChatWebSocketContext import path to match provider

TicketChat and ChatNotificationListener imported the context via the '@/app/contexts/...' alias while PresenceWrapper (the provider) imports it via the relative...

kamo·4mo ago
Otherkamo-internal

Temporary console.log to trace TicketChat STOMP subscription path

Adds console logs at every stage of the subscribe pipeline (effect fire, guard pass, subscribe() call, attachSessionSubscription, client.subscribe, /app/chat/su...

kamo·4mo ago
Fixkamo-internal

Force shadow host containment with inline styles + contain: layout

Class-based overflow-x-auto on the shadow host wasn't reliably winning against the shadow ':host { all: initial }' reset, so wide email content (fixed-width tab...

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