Remove translate config from application.yml — belongs in k8s/configmap.yaml
Remove translate config from application.yml — belongs in k8s/configmap.yaml
Remove redundant translation table SQL — Hibernate ddl-auto handles them
Rewrite MultiFileUploader with queue-based upload and per-file settings
Remove scope/assocType from SettingsSignersTab, rename to Doc Description, add Active Member signer
Add memberType to user info, rename templateName to docDescription in template settings store
Add memberType field from Member entity discriminator column to the user-info API response and useUserInfo hook. Rename templateName to docDescription in templa...
Migrate all imaging API routes from SecurityService to ConversionService/DocsService
Upload routes now call ConversionService directly via CONVERSION_SERVICE_URL: - POST /api/imaging/upload → /api/conversion/imaging/upload - POST /api/imaging/te...
Remove ImagingController and beans/imaging — moved to ConversionService and DocsService
Upload endpoints now live in ConversionService at /api/conversion/imaging/*. All management and download endpoints now live in DocsService at /api/docs/imaging/...
Delegate thumbnail generation to ConversionService, remove PDFBox dependency
ThumbnailGenerationJob now POSTs the converted PDF to ConversionService **************** unzips the response, and stores each thumb_p{n}.png in MinIO. PDFBox re...
Delegate thumbnail generation to ConversionService, remove PDFBox dependency
generateAndStoreThumbnails now POSTs the converted PDF to ConversionService **************** unzips the response, stores each thumb_p{n}.png in MinIO, and publi...
Remove JSON parsing workarounds for subscription plan ID arrays
Backend now returns proper arrays instead of JSON strings, so the try/parse/catch fallback logic is no longer needed in add-on, bundle, and promotion grid cell ...
Use List<String> instead of manual JSON strings for promotion plan/cycle IDs
Update KamoCRMPricingLoader to use List.of() for applicablePlanIds and applicableBillingCycles, matching the shared library's migration from JSON strings to ent...
Migrate subscription JSON fields to entity-based @ManyToMany relationships
Replace jsonb string columns (compatiblePlanIds, includedInPlanIds, applicablePlanIds, applicableBillingCycles) with proper JPA @ManyToMany join tables and @Ele...
Redesign webinar settings from dialog-based to sub-page navigation
Replaces popup dialogs and separate accordion sections with a two-level inline navigation flow: - Level 1: clean webinar types table with click-to-navigate - Le...
Separate support settings from member-level support page into dedicated settings page
- Remove Settings tab from /support page, keeping only Tickets and Analytics - Add sub-tabs to Analytics: Overview and Status & Response Times (moved from setti...
Account endpoints use direct contact fields, no User required
POST /customers now saves firstName, lastName, email, phone, address directly on Account. PUT /customers/{uid} updates all direct fields. Display name, email, p...
Separate AccountManager from TeamMemberManager on /account page
3 page-level tabs: Clients & Customers, Members, Team Members. - Tab 0: new AccountManager component — standalone, fetches real account data from accountsApi,...
Update customer endpoints to use Account (Long uid), remove address endpoints
Customer/group @PathVariable changed from UUID to Long to match Account entity. Address endpoints removed — addresses come from Account's primaryMember (Member ...
Replace RetailCustomer with Account-based customer model
Account.java was already the commerce customer entity but was too minimal. RetailCustomer duplicated this concept. This commit: - Enhances Account with commerc...
Standardize brand naming across site — Kamo → KamoCRM / KamoCRM Inc.
Legal pages (terms, privacy, GDPR, footer copyrights) now use "KamoCRM Inc." for the corporate entity. Product/brand references across marketing copy, metadata,...
Migrate all pipeline components from commerceMarketApi to commerceApi
Update 10 files to import directly from commerceApi instead of the deleted commerceMarketApi. Remove the compatibility shim and dead CommerceMarketManager compo...
Rewrite HexHead placement system with deterministic layout engine
Replaces the buggy collision-avoidance system (spiralSearch, resolveCollisions, flyToHomeRow, dock/group RAF loops) with a single deterministic reflow() functio...
Strip SchemaCleanupRunner to only post-Hibernate fixups
Hibernate ddl-auto: update handles all table/column creation from JPA entities. Removed all redundant CREATE TABLE/ADD COLUMN statements that duplicated what Hi...
Split mailboxes tab into sub-tabs for primary, aliases, shared
Primary Mailboxes, Email Aliases, and Shared Mailboxes are now each under their own sub-tab within the Mailboxes settings page, matching the existing sub-tab pa...
Remove notes code, moved to KBService
Notes management (controller, service, encryption) has been relocated to KBService where it better aligns with knowledge and content management responsibilities...
Update internal entity ID types from number to string for UUID migration
Updates TypeScript types, hooks, and components to use string IDs for entities converted to UUID on the backend. User-facing entity IDs (User, Organization, Mem...
Update commerce product and market ID references from Long to UUID
Update calendar event and integration ID references from Long to UUID
Update version ID references from Long to UUID
Article IDs remain Long. Version IDs now use UUID.
Update KB media and version ID references from Long to UUID
Article IDs (KbArticle) remain Long. Version, media, pin, and review IDs now use UUID for improved CockroachDB write performance.
Update AI entity ID references from Long to UUID
Updates all controllers, services, and WebSocket handler to use UUID for AI entity IDs (providers, models, sessions, messages, folders, policies, MCP configs). ...
Update controllers and services for UUID entity IDs
Updates all controller @PathVariable and service method signatures to use UUID instead of Long for internal entity IDs (avatars, backgrounds, roles, departments...
Convert internal entity IDs from Long/unique_rowid() to UUID/gen_random_uuid()
Improves CockroachDB write performance by using randomly-distributed UUIDs for internal entity primary keys instead of sequential unique_rowid() values. User-fa...
Replace Add Source with Manage Contact Sources dialog
- Rename AddSourceDialog → ManageSourcesDialog with full CRUD (list existing sources with status + remove, plus inline add form) - Move "Manage Contact Source...
Remove Client ID and Secret fields from RingCentral UI
These are platform-level credentials set once in the K8s secret. Customers only need to provide their JWT Key and main phone number.
Read RingCentral client-id/secret from platform config, not per-org DB
Client ID and Secret identify the Kamo app on RingCentral's platform — they are shared across all orgs. Inject them from Spring Boot properties (backed by the K...
Remove clientId/clientSecret from VoipProviderConfig
These are platform-level credentials shared across all orgs. Only jwtKey and mainPhoneNumber are per-org.
Extract resolveUserId helper, add ETag comment in KamoGroupwareProvider
Move AI to Enabled Apps section and remove settings slideout search/recents
Remove the search bar and recent items section from the settings slideout panel. Move Artificial Intelligence from main topics to the Enabled Apps section so it...
Simplify apps page with Available/Incubating tabs and list-only view
Remove stats banner, search bar, category filters, grid/list toggle, and features dialog. Apps are now organized into two tabs and "Adjust Features" navigates t...
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.
