Add MemberUiPreferenceController for per-member UI settings
Backs the new hex-head popover size selector and any future small per- member UI preference. Endpoints under /api/security/members/me/ui- preferences resolve th...
Add MemberUiPreference entity for per-member UI prefs
Generic per-member UI preference store (memberId, prefKey, JSONB value) for small persisted UI settings. First consumer is the hex-head popover size selector.
Wire FeaturesManager to platform subscription for child-org gating
FeaturesManager was calling legacy **************** which throws (ungated fallback) instead of reading the real platform subscription. Now calls **************...
Add platform-subscription endpoint for cross-org feature gating
Child-org admins (like GNosia's owner Daniel) have their COMP subscription orders on the root KamoCRM org, not on their own org. FeaturesManager was querying t...
Use translated aria-label for SettingsView tabs
Reads **************** from next-intl.
I18n for legacy hub content/sidebar via settingsLegacyHub
Replace hard-coded English with next-intl. Introduces stable topic id constants; activeTopic is compared against ids instead of translated display strings.
Wire landing page to settingsLanding translations
Replace hardcoded feature cards and section copy with useTranslations- backed strings from **************** including ICU branch label for branch types cards. C...
Move translations to kamo-translation-dictionary
All 22 locale files move to the centralized kamo-translation-dictionary repo. The CI now clones that repo and copies the kamo-marketing/ folder into messages/ b...
Move translations to kamo-translation-dictionary
All 22 locale files move to the centralized kamo-translation-dictionary repo. The CI now clones that repo and copies the kamo-internal/ folder into messages/ be...
Wire MUI Tooltip titles through common.actions and common.tooltips
Replace literal single-line Tooltip title strings with tCommon("actions.*") or tCommon("tooltips.*"), merge keys into messages/en.json, and fix nested component...
Tooltip wave — AccountManager, ModernColorPicker, SMS tabs
Account grid View/Delete via common.actions; color picker and SMS tooltips via common.tooltips (pickColorFromScreen, resetToDefault, crmIntegrationComingSoon, e...
Tooltip wave — TeamMemberManager actions
Wire grid tooltips to **************** and common.tooltips.resetFilters. i18n: audit tooltip literals 217→209.
Tooltip wave — DocManager grid and row actions
Internationalize all literal Tooltip titles in DocManager via common.tooltips and common.actions (download, share, delete, refresh). Merge fragment into en.json...
Tooltip wave — lead list icons and email template blocks
Wire Lead ID column icons via leads.list.tooltips; email block reorder/delete via **************** i18n:audit tooltip literals 236→230.
Common tooltips wave — subscription invoices, billing tab, activity IP, avatar delete
Replace literal Tooltip titles with common.actions.send, common.tooltips.markPaid, blockThisIp, addBillingAccount, and actions.delete; merge fragment into en.js...
Localize CRM account, leads, procurement, and phone extension tooltips
Add common.alerts wave for alert() literals
Introduce **************** with shared alert strings under common.alerts, merge into en.json, and replace literal alert('...') calls across clubhouse, documents...
Wire components.ui.placeholders across tools, contacts, SMS, tasks
Replace literal input placeholders with **************** in calculator modes, message tool, AI chat search, notes, contact dialogs, SMS tabs, and task sidebar. ...
Merge UI placeholders fragment and wire account, messages, email blocks
Wire settings placeholders and scoped translation hooks
Replace literal TextField/MUI placeholders under settings with next-intl keys, add useTranslations in nested components where needed (dialogs, sub-views, manual...
Merge settings placeholder catalog and wire essential/security/AI MCP tabs
Adds **************** in messages via fragment merge and replaces literal placeholders in DepartmentManager, JobTitleManager, LabelManager, SecurityRoleManager,...
Wire pipeline tab placeholders to next-intl
Add components.pipeline.shared keys and tab-specific placeholders via merge fragments; replace literal placeholder strings across pipeline TSX with useTranslati...
Expand English strings and align UI components across modules
Updates message catalogs and wires translations through calendar, chat, messages, POS/market settings, subscriptions, support tickets, esign, and related pages.
Move Credits link from nav to Lead Browser toolbar
Remove Credits from NavTop and add Lead Credits beside Add Lead on /leads, same CRM + VIEW_LEADS visibility and /leads/allotments destination.
Update availability endpoints to use MemberAvailabilityStatus enum
Replace isAvailable boolean with MemberAvailabilityStatus enum
Enrich upload manifests with Asterisk CDR caller-ID data
Adds optional MySQL CDR enrichment so the softphone history tab can display who called (or was called). When ASTERISK_CDR_DSN is configured as a Forgejo repo se...
Parse CDR caller-ID fields from upload manifest
When kamo-asterisk-support includes a cdr{} section in the upload manifest (populated when ASTERISK_CDR_DSN is configured), ConversionService extracts callerIdN...
Add CDR caller-ID columns to recordings table (order 40)
Adds caller_id_num, caller_id_name, call_direction, and call_result columns to the recordings table so the softphone history tab can display who called without ...
Add CDR caller-ID fields to Recording entity
Adds callerIdNum, callerIdName, callDirection, and callResult columns to the Recording entity so kamo-asterisk-support can store Asterisk CDR metadata alongside...
Add COMP payment method option to subscription order wizard
COMP is a valid backend PaymentMethod enum value for complimentary platform-admin grants, but was missing from the frontend type and wizard UI — only INVOICE an...
Show platform kamocrm domain on custom domain entry
Surface the active *.kamocrm.com hostname on the add-domain flow and detect custom domains by excluding kamocrm URLs instead of default-flag alone.
Show Manage Domain button for top-level org owners and system members
Show Set Up Billing button for org owners with no account
When an org owner opens the plans-billing tab and no billing accounts exist, display a bootstrap prompt instead of the generic "contact your org owner" message....
Add bootstrap-billing endpoint for pre-existing orgs
POST **************** triggers the same idempotent setup as the sub-org creation hook (BillingSetupService .setupForSubOrgCreation) but can be called on-demand ...
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.
