KamoCRM

Live Change Log

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

17,662
Total Changes
6,080
Features
5,341
Fixes
30
Projects
Filter by project
All Projects17,662AIService261APIService174BillingService158ConversionService110DaemonService138DocsService223ESigService91EmailService587InitializerService329KBService151KlusterServices744MCPGatewayService261MediaService604RAGService79SecurityService1,874TranslateService62VOIPService250VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,413kamo-login340kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,682kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild16CI523Chore776Docs3,257Feature6,080Fix5,341Other998Performance165Refactor278Revert23Style42Test162Upgrade1
April 29, 2026
FeatureInitializerService

Migrate members.is_available to availability_status enum

Kamo·6mo ago
Featurekamo-asterisk-support

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...

Kamo·6mo ago
FeatureConversionService

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...

Kamo·6mo ago
FeatureInitializerService

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 ...

Kamo·6mo ago
Featurekamo-shared-library

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...

Kamo·6mo ago
Featurekamo-internal

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...

kamo·6mo ago
Featurekamo-internal

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.

kamo·6mo ago
April 28, 2026
Featurekamo-internal

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....

kamo·6mo ago
FeatureSecurityService

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 ...

Kamo·6mo ago
Featurekamo-internal

Wave 3 conversions, fallback fix, and auto-translate CI

- Replace all hardcoded English strings with t() calls across wave 3 components (chat, clubhouse, support, notes, pipeline, leads, nav, etc.) - Merge wave 3 f...

kamo·6mo ago
Featurekamo-internal

Wire next-intl with member.language as locale source

Adds next-intl-based internationalization across kamo-internal without URL locale prefixes. Active locale is read from the kamo-locale cookie, which mirrors the...

kamo·6mo ago
FeatureVOIPService

Fall back to imaging recordings for call history + voicemails

FreePBX 17 doesn't expose voicemail messages over REST or GraphQL on this install (the GraphQL voiceMail type returns mailbox config, not messages, and /admin/a...

Kamo·6mo ago
Featurekamo-shared-library

Paginated Recording lookup by (instance, extension, isVm)

Used by the softphone tabs as the canonical source of truth for call recordings and voicemails when the upstream provider can't list them — e.g. FreePBX 17 has ...

Kamo·6mo ago
FeatureSecurityService

Auto-provision KamoCRM seat on sub-org creation; promote-billing-owner endpoint

EntitlementService walks SubscriptionMember (not AccountMember) to compute member entitlements — the union of features across active licensee subs, plus the Fre...

Kamo·6mo ago
April 27, 2026
FeatureInitializerService

Add member language + default_currency columns

Adds two NOT NULL columns to the members table backing the new Member.language (VARCHAR DEFAULT 'ENGLISH') and Member.defaultCurrency (VARCHAR(10) DEFAULT 'USD'...

Kamo·6mo ago
Featurekamo-register

Add language step, country timezone picker, scroll + *** fixes

- New 'My Language' step prepended to the wizard, mirroring the country step's layout. Lists the 22 marketing-supported locales as flag tiles with native na...

Kamo·6mo ago
Featurekamo-internal

Add language + default currency to Regional Settings card

Member profile's Regional Settings card now exposes editable Language (22 supported locales mirroring the marketing site) and Default Currency (searchable Autoc...

kamo·6mo ago
FeatureSecurityService

Persist member language/timezone/currency on signup

The /register endpoint now accepts language, timezone, and defaultCurrency alongside the existing country field. RegistrationService sets country and timezone o...

Kamo·6mo ago
Featurekamo-shared-library

Map external customer address blocks into AccountAddress on pull

Add AdapterAddressMapper helper that converts a JSON address node from any provider into an EmbAddress and attaches it to an Account as a typed AccountAddress (...

Kamo·6mo ago
Featurekamo-internal

/account/new copy-from-lead UX, full name fields, dual phones, address; account-level address management

Frontend: - /account/new: per-section "Copy from Lead" buttons + header "Copy all from Lead" button (when leadId param) - Name section: prefix, first, middle, l...

kamo·6mo ago
FeatureSecurityService

Support nested name/email/phoneNumbers + address management endpoints

- AccountController accepts nested name/email/phoneNumbers JSON on POST/PUT - Initial address on POST creates SHIPPING (and BILLING when useAsBillingToo set), s...

Kamo·6mo ago
Featurekamo-internal

Production-grade History + Voicemail tabs with media-player tool

History tab (SoftphoneHistoryTab.tsx): - Infinite scroll via IntersectionObserver inside the panel's scroll container - Filter chips: All / Inbound / Outbound /...

kamo·6mo ago
FeatureInitializerService

Migration runner for Recording provider-lookup columns + VM archive columns

Adds RECORDINGS.provider_instance_id (UUID) and provider_external_id (VARCHAR(64)) plus the composite idx_recordings_provider_lookup index used by the softphone...

Kamo·6mo ago
FeatureConversionService

Persist providerInstanceId + providerExternalId on Recording at ingest

Threads asterisk-support's X-Phone-Server-Id and X-Asterisk-Unique-Id (already in UnprocessedRecording) onto the new RecordingMetadata fields so call/voicemail ...

Kamo·6mo ago
FeatureDocsService

Add **************** with HTTP Range support

Generic streaming endpoint for audio/video imaging assets, used by the kamo-internal MediaPlayer tool. Reuses ImageService authorization (same as /download/...)...

Kamo·6mo ago
FeatureVOIPService

Recording playback, voicemail archive, paginated voicemail, history enrichment

- New RecordingController with bulk lookup, range-streamed audio for master + per-channel tracks, and metadata for the media-player tool window - CallController...

Kamo·6mo ago
Featurekamo-shared-library

Provider lookup keys on Recording, voicemail archive, MinIO range streaming

- Recording: add providerInstanceId + providerExternalId for joining provider call-history / voicemail rows back to imaging assets - PhoneVoicemail: add isArchi...

Kamo·6mo ago
Featurekamo-internal

Add History tab — paginated audit timeline with search and filters

- LeadHistoryPanel: sticky filter toolbar with debounced search, **************** filters, MUI table with pagination, color-coded event chips, member-name resol...

kamo·6mo ago
FeatureSecurityService

Add GET /{id}/history and /{id}/history/filters endpoints

Paginated, filterable, searchable lead-history endpoint with batch actor loading (no N+1). Filters endpoint returns distinct used fields, all registry fields, d...

Kamo·6mo ago
Featurekamo-shared-library

Add lead-history audit log — entity, registry, service, DTO, LeadService hooks

- LeadHistory entity (UUID PK, plain Long FKs — no FK constraints to allow lead deletion/conversion) - LeadHistoryEventType enum with human-readable labels - Le...

Kamo·6mo ago
Featurekamo-internal

Dynamic member type label in My Account page title

Title now reads "My {Member|Team Member} Account" using the org-configured behavior labels, switching automatically once the member's type is loaded.

kamo·6mo ago
Featurekamo-internal

Move Create Document button into DocManager toolbar

The button was only available on /doc/manager via the actions prop. Moved all logic (state, handler, DOC_TYPES, menu) into DocManager so it appears on every emb...

kamo·6mo ago
Featurekamo-internal

International support — CountrySelect, LanguageSelect, SubdivisionField across all forms

- Add reusable CountrySelect (207 countries, flag icons), LanguageSelect (26 languages, flag icons), SubdivisionField (US state dropdown with flags; other cou...

kamo·6mo ago
Featurekamo-shared-library

Add international support — Lead country/subdivision/timezone, Org language, CountryType isProvince

- CountryType: add PROVINCE_NAMES set, isProvince(), getSubdivisionLabel() - Organization: add language (LanguageType) field - Lead: add country (CountryType), ...

Kamo·6mo ago
Featurekamo-internal

ASSIGN_LEADS right, agent filter unassigned option, grid column cleanup

- Gate 'Unassigned Leads' agent filter option behind ASSIGN_LEADS right - 'All Leads' excludes unassigned leads for members without the right - Remove Street, P...

kamo·6mo ago
Featurekamo-shared-library

Add ASSIGN_LEADS right (ID 137) under CRM section

Kamo·6mo ago
Featurekamo-internal

Add Assign To field to Market & Assignment section on /leads/new

- Fetches active team members from **************** on mount - Groups members by department with alphabetically sorted departments and members - Formats names a...

kamo·6mo ago
Featurekamo-asterisk-support

Emit recordedAt + per-file extension in upload manifest

- Watcher: every emitted Recording carries RecordedAt, derived from the EPOCH segment of our managed **************** filename, falling back to file mtime f...

Kamo·6mo ago
FeatureConversionService

Pass Recording metadata to imaging — ffprobe length + manifest parsing

- **************** runs ffprobe -show_entries format=duration on the master Opus/WebM, returns ms. 0 = unknown (not fatal). - **************** now: * runs p...

Kamo·6mo ago
Featurekamo-shared-library

Recording + RecordingExt entities, RecordingImagingService writes them

- New Recording entity (UUID id, IMG_ID, IS_MASTER, IS_VM, EXTENSION, MEMBER_ID, LENGTH, DATE_RECORDED, DATE_CREATED [DB-defaulted via @CreationTimestamp]). ...

Kamo·6mo ago
Featurekamo-internal

Update Platform Administration cards to match unified tab structure

Replace the two stale cards (Organizations standalone page + Configuration) with five cards matching the actual tabs: General, Organizations, VOIP & SMS, System...

kamo·6mo ago
Featurekamo-internal

Full-width grid layout and move sync trigger from Advanced tab

- Redesign VOIP & SMS tab to use full content-area width: pipeline stats span the top row, Recording Processing and Global Sync Schedule sit side by side in...

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