KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,494
Total Changes
5,983
Features
5,282
Fixes
30
Projects
Filter by project
All Projects17,494AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices738MCPGatewayService248MediaService602RAGService79SecurityService1,846TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,254Feature5,983Fix5,282Other994Performance165Refactor278Revert23Style42Test160Upgrade1
July 8, 2026
FeatureMediaService

MaterialReviewController — status map + set-status

GET /api/media/materials/reviews (org-wide imgId→status map) + POST to set a material's status (validated, reviewer-stamped, upsert).

Kamo·3mo ago
Featurekamo-shared-library

MaterialReview entity+repo (approval status side-table)

DRAFT/PENDING/APPROVED/ARCHIVED per material, keyed by imgId (imaging schema untouched). Table MATERIAL_REVIEWS (targeted CRDB DDL; KI auto-scans).

Kamo·3mo ago
Fixkamo-internal

Treat ACTIVE status as connected in OAuth provider configs

The Microsoft 365 / Google Workspace / Zoho config views gated their connected state on providerStatus === 'CONNECTED', but the backend EmailProviderStatus enum...

kamo·3mo ago
FixEmailService

Persist selected OAuth provider on callback so it stops reverting to KamoMail

Switching an org to Microsoft 365 (or Google Workspace / Zoho) never stuck: the OAuth callback stored tokens and only flipped status on a pre-existing provider ...

Kamo·3mo ago
Featurekamo-internal

Per-member RingCentral connect + softphone web-phone v2 fixes

Softphone SDK fixes (ringcentral-web-phone is v2.4.0, not the v0.x the adapter targeted — the old wp.userAgent.* usage threw on init): - Rewrite RingCentralPhon...

kamo·3mo ago
FeatureVOIPService

Per-member RingCentral OAuth identity + softphone SIP fixes

Softphone SIP credential fixes: - getSipCredentials: map outboundProxyBackup + stunServers (web-phone v2 needs them for WSS failover + ICE/media); throw Provi...

Kamo·3mo ago
Featurekamo-shared-library

Add MemberVoipOAuthToken for per-member RingCentral connections

Per-member OAuth token keyed (memberId, provider, instanceId) backing extension-scoped RingCentral operations — softphone sip-provision plus the member's person...

Kamo·3mo ago
Featurekamo-internal

Collections/campaigns UI (P2)

Left-nav Collections section (create/select/delete), campaign filter on the collection view, and a collections editor in the detail drawer (add/remove material,...

kamo·3mo ago
FeatureMediaService

MaterialCampaignController — CRUD + item map + add/remove

/api/media/materials/campaigns: list/create/update/delete, GET /items (org-wide imgId↔campaignId map), POST /add + /remove with org-ownership checks.

Kamo·3mo ago
Featurekamo-shared-library

MaterialCampaign + item entities/repos (collections)

First-class named collections grouping materials across folders. Tables MATERIAL_CAMPAIGNS + MATERIAL_CAMPAIGN_ITEMS (targeted CRDB DDL; KI auto-scans on next r...

Kamo·3mo ago
Featurekamo-internal

Tags UI + access-level control (P2)

Tags (org-scoped, cross-cutting): tag chips on tiles, a tag filter bar (AND across selected), and a tag editor in the detail drawer (assign/remove existing, cre...

kamo·3mo ago
FeatureMediaService

MaterialTagController — tag CRUD + assign/unassign + assignment map

/api/media/materials/tags: list/create/delete tags, GET /assignments (org-wide imgId↔tagId map the workspace joins client-side), POST /assign + /unassign with o...

Kamo·3mo ago
Featurekamo-shared-library

MaterialTag + assignment entities/repos (org-scoped tags)

Flat, cross-cutting tag axis over folders for marketing materials. Tables MATERIAL_TAGS and MATERIAL_TAG_ASSIGNMENTS (created via targeted CRDB DDL; KI auto-sca...

Kamo·3mo ago
Featurekamo-internal

Managed public links UI (P1) — create/expiry/revoke/view-count

Detail drawer gains a 'Public links' panel (ShareLinkManager): create a durable link with an optional label and expiry (1h/1d/7d/30d/never), copy it, see its vi...

kamo·3mo ago
FeatureMediaService

Managed public-link endpoints (create/list/revoke) + tracked serve

Adds POST/GET /api/media/materials/links and DELETE /links/{id} backed by MaterialShareLink, and resolves managed tokens on the public GET first (checking revok...

Kamo·3mo ago
Featurekamo-shared-library

MaterialShareLink registry entity + repo (managed/tracked public links)

Backs revocable, expiring, view-counted public links for marketing materials — persisted so links can be listed, revoked, and counted (vs. the stateless HMAC on...

Kamo·3mo ago
Featurekamo-internal

Add right-click / long-press context menu to conversation-view rows

Completes the list action menu across both view modes. Conversation rows now open the same shared menu on right-click and touch long-press with thread-level act...

kamo·3mo ago
Featurekamo-shared-library

DecisionGate.appliedThreshold exposes the actual confidence bar

The gate internally applies max(tenant override, safetyFloor, stage floor) but callers only had the pre-gate tenant wall. appliedThreshold returns the true bar ...

Kamo·3mo ago
FixEmailService

Resolve welcome-email logo from the org theme host, not the apex

Header/footer logos in system emails (welcome/verification) were built as **************** — an apex path that only exists on the Kamo marketing site, so for cu...

Kamo·3mo ago
Featurekamo-internal

Enterprise Materials workspace (P0) — folders, search, bulk, real preview, shared email composer

Replaces the flat 200-item grid with a full document workspace over the existing imaging backend (which already supports folders, trash, sharing, history, bulk ...

kamo·3mo ago
Featurekamo-internal

Overhaul /messages — iframe rendering, list context menu, threading, races, a11y

Implements the audit of the /messages page end-to-end. Reported issues: - Reply/Reply All/Forward buttons now show text labels; removed from the more-actions ...

kamo·3mo ago
Fixkamo-internal

Source home from the nav registry, add nav cross-highlight, fix settings scroll

The home page was rendering a stale, separately-maintained feature list (Clubhouse, Feed, Reports, Tasks, Network) that isn't even in the nav registry, so it ex...

kamo·3mo ago
CIKlusterServices

Only deploy components whose config changed; never needlessly reinstall

deploy-services.yml re-applied every service AND reinstalled cluster operators (cert-manager, KubeVirt, CDI — with 600s waits) on every push to main, so a one-l...

Kamo·3mo ago
Featurekamo-internal

Instrument Panel redesign — accent families, masthead, section-index nav, unified glass card

Redesigns the two most-visited landings into a permission-shaped operator's console. Foundation - Turn on the already-bundled Geist Sans/Mono (were discarded b...

kamo·3mo ago
Fixkamo-shared-library

Point-in-time resolvers include SUPERSEDED windows (historical effective-resolution)

All three effective-version resolvers (rate-sheet, guideline, lock-policy) queried only status=ACTIVE, then window-filtered. But supersession flips the prior ve...

Kamo·3mo ago
FixDocsService

Bounds-check assoc-type ordinal lookups (fixes Materials list 500)

DocsService was running a shared-lib built before ImageAssocType.MATERIALS (ordinal 11) was added, so listDocuments' ImageAssocType.values()[11] threw ArrayInde...

Kamo·3mo ago
FixKlusterServices

Move data dir off MinIO FUSE mount to local disk

rspamd's /var/lib/rspamd was hostPath-backed by the rclone FUSE mount of the MinIO shared-files bucket. Every hyperscan recompile / map refresh rewrote files th...

Kamo·3mo ago
FixMediaService

Persist scheduled-material thumb flags via targeted update

Same detached-entity orphanRemoval issue as the conversion pipeline: the headless sweep held a detached ImgDat and save()/merge() cascaded into the images colle...

Kamo·3mo ago
FixConversionService

Persist thumb flags via targeted update, not detached save

The image/video/PDF thumbnail steps set thumb flags on a detached ImgDat and called save(), which merges and cascades into the orphanRemoval images collection —...

Kamo·3mo ago
Featurekamo-shared-library

**************** targeted update

Async conversion (virtual threads) and scheduled sweeps hold a detached ImgDat; save()/merge() cascades into the orphanRemoval=true images collection and throws...

Kamo·3mo ago
Featurekamo-internal

Add Reply All to the messages reading pane and thread view

Reply All was advertised (keyboard-shortcut label + i18n key) but had no handler. Wire it up: new computeReplyAllRecipients helper puts the sender in To and eve...

kamo·3mo ago
Fixkamo-shared-library

Reject negative income / asset / liability amounts on section saves

Extends the requireNonNegative guard (already on loan amount + property values) to the core DTI/asset inputs in BorrowerSectionService: employment income ******...

Kamo·3mo ago
FeatureInitializerService

Partial-unique index enforcing one active closing package per loan (eClose double-close backstop)

CREATE UNIQUE INDEX uk_mlos_closing_pkg_active_loan ON mlos_closing_package (loan_file_uid) WHERE status <> 'CANCELLED'. Durable backstop behind the assembler's...

Kamo·3mo ago
FixConversionService

Stop uploads hanging on 'Converting...' — route NATS progress + direct image thumbnails

The conversion-progress publish used NatsMessageService.publish(), which asserts expectedStream=<this service's stream>. The subject **************** resolves t...

Kamo·3mo ago
Fixkamo-internal

Add Marketing to the security-model app editor

The model editor's app list (SERVICE_TYPES) is a hand-maintained mirror of ServiceType.java and was missing MARKETING — so Marketing had no row in the apps tab,...

kamo·3mo ago
Otherkamo-internal

Show Canva actions only when Canva is usable

The page previously offered Create/Import/Generate-in-Canva next to a "Canva isn't set up" notice — incoherent. Now the toolbar reveals progressively by Canva s...

kamo·3mo ago
FeatureMediaService

Thumbnail scheduled-generated materials in-process

A headless sweep can't drive ConversionService's OTK thumbnail pipeline, so generate a page-0 PNG thumbnail via ImageIO right after storing the export — schedul...

Kamo·3mo ago
FixMCPGatewayService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·3mo ago
FixTranslateService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·3mo ago
FixVOIPService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·3mo ago
FixEmailService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·3mo ago
Featurekamo-internal

Recurring generation schedules UI

ScheduleManager: create/list/delete schedules (recipe + daily/weekly/monthly + hour/day + optional auto-post targets + caption); launched from Materials, gated ...

kamo·3mo ago
FeatureMediaService

Scheduled generation — sweep runs recipes on a cadence

- CanvaScheduleController: CRUD for org schedules (recipe + cadence + hour/day + optional social targets), computes nextRunAt - CanvaGenerationService: headle...

Kamo·3mo ago
Featurekamo-shared-library

CanvaSchedule entity + repo (recurring generation)

Org-scoped recurring schedule (recipe + cadence + optional social targets) with an atomic-claim query so a MediaService sweep runs each due schedule once.

Kamo·3mo ago
Featurekamo-internal

Inline expandable Whisper transcript on softphone voicemail + call-history rows

Each recorded row (voicemail and call history) gets a 'Transcript' toggle that fetches the recording's Whisper transcript on demand and shows it inline, so memb...

kamo·3mo ago
Featurekamo-internal

Save + reuse autofill recipes

TemplateAutofill: "Saved recipes" chips load a template + prefilled mapping; "Save as recipe" persists the current template + field values org-wide. + canvaApi ...

kamo·3mo ago
FeatureMediaService

Saved autofill recipes CRUD (org-scoped)

CanvaRecipeController: GET/POST /api/media/canva/recipes + DELETE /{id} — save/list/soft-delete a named brand-template + field mapping, scoped to the caller's o...

Kamo·3mo ago
Featurekamo-shared-library

CanvaAutofillRecipe entity + repo (saved autofill recipes)

Org-shared named binding of a Canva brand template to field values (literal text or a Materials image), so stewards can re-run a standard data-merge.

Kamo·3mo ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing