KamoCRM

Live Change Log

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

17,411
Total Changes
5,924
Features
5,262
Fixes
30
Projects
Filter by project
All Projects17,411AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService593RAGService79SecurityService1,835TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,333kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,641kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,924Fix5,262Other993Performance165Refactor278Revert23Style42Test159Upgrade1
April 27, 2026
Featurekamo-internal

Merge Organizations into Configuration page with unified tab nav

- Add Organizations as a tab in **************** (General · Organizations · VOIP & SMS · System User · Advanced order) - Delete **************** standalone page...

kamo·6mo ago
Fixkamo-shared-library

Use @CreationTimestamp(source=DB) on ****************

The DB is the single source of truth for timestamps in this codebase. The canonical Hibernate pattern is @CreationTimestamp(source = SourceType.DB), which makes...

Kamo·6mo ago
Fixkamo-shared-library

Let DB fill **************** via @Generated(INSERT)

INSERTs were failing with: null value in column "date_created" violates not-null constraint @ColumnDefault only declares the DB-side default for new rows; Hi...

Kamo·6mo ago
Fixkamo-asterisk-support

Drop the [from-internal-custom] _X. catch-all that broke softphone calls

The catch-all exten => _X.,1 in [from-internal-custom] was intercepting every internal dial — softphones started reporting "phone is not registered" / calls wou...

Kamo·6mo ago
FixConversionService

Enable JPA repos for commerce + email + dao.repositories packages

ConversionService new pod CrashLoopBackOff with the same error DaemonService hit earlier: Parameter 0 of constructor in **************** required a bean of ...

Kamo·6mo ago
FixAPIService

Carve /api/voip/recordings/** out of the wildcard VOIP forwarder

The /api/voip/** catch-all in APIGatewayController was shadowing the dedicated VoipRecordingUploadController POST /api/voip/recordings/upload mapping when Sprin...

Kamo·6mo ago
Featurekamo-marketing

Add Go logo to BUILT WITH banner

Kamo·6mo ago
Fixkamo-asterisk-support

Write managed config files 0644 so the asterisk daemon can read them

The kamo-asterisk-support pod runs as root and writes to host-mounted **************** Asterisk inside the FreePBX pod runs as user "asterisk" and could not rea...

Kamo·6mo ago
Fixkamo-asterisk-support

Use envsubst-compatible \${VAR} syntax in config template + re-render on stale placeholders

Pods were CrashLoopBackOff with "config errors: API_KEY is missing or too short" because the config template used literal __API_KEY__ markers that envsubst sile...

Kamo·6mo ago
Fixkamo-asterisk-support

Drop unused watcher import

uploader.go only uses CallBatch (declared in grouper.go in the same package), not anything from internal/watcher directly. Go rejects unused imports.

Kamo·6mo ago
FixDaemonService

Enable JPA repos for commerce + email + dao.repositories packages

DaemonService crashed on startup with: Parameter 0 of constructor in **************** required a bean of type **************** that could not be found. A r...

Kamo·6mo ago
Featurekamo-internal

Surface PHONE_SERVER_ID on phone-instance overview tab

Operators configuring kamo-asterisk-support on a FreePBX host need to paste the matching VoipProviderInstance UUID into the helper's config file as PHONE_SERVER...

Kamo·6mo ago
FixVOIPService

Capture newExtNumber as final for lambda capture in MemberVoipConfigController

newExtNumber is conditionally reassigned inside the if (isVoipEnabled && ...) block, which makes it not effectively final. The TeamMember sync block reads it fr...

Kamo·6mo ago
RevertSecurityService

Remove VOIP extension backfill from SecurityService

Kamo·6mo ago
Featurekamo-internal

Wire call features settings end-to-end through provider abstraction

- voipApi: add CallFeaturesDto type, getCallFeatures() and setCallFeatures() API calls - useSoftphone: add **************** state loaded from API on startup; ...

kamo·6mo ago
FeatureVOIPService

Add call features API — call forward + auto-answer wired through provider abstraction

- Add CallFeaturesDto and SetCallFeaturesRequest POJOs - Add callForward/autoAnswer flags to ProviderCapabilities - Add default getCallFeatures/setCallFeatures ...

Kamo·6mo ago
Featurekamo-asterisk-support

Initial commit — FreePBX recording uploader (GO)

Watches **************** for finished WAV recordings, groups multi-leg call legs by Asterisk UNIQUEID, and uploads each batch to APIService /api/voip/recordings...

Kamo·6mo ago
OtherSecurityService

Change to configmap to add kamo-asterisk-support

Kamo·6mo ago
Featurekamo-internal

VOIP_RECORDING_UPLOADS scope + recording pipeline counters/tunables

- APIManager: new VOIP_RECORDING_UPLOADS scope option (used by kamo-asterisk-support on FreePBX hosts to upload voicemail and call recordings via APIService)....

Kamo·6mo ago
FeatureSecurityService

System-config recording stats + recording-processing tunables

- GET **************** returns the four counters exposed on the kamo-internal Settings → Platform → Configuration → VoIP/SMS tab (vmPending, callPending, vm...

Kamo·6mo ago
FeatureDaemonService

RecordingProcessorJob + NATS shortcut for fresh uploads

- New Quartz job RecordingProcessorJob ticks every minute, dispatches independent VM and call batches concurrently to ConversionService **************** usi...

Kamo·6mo ago
FeatureConversionService

Recording ingest + FFmpeg processing pipeline

- New **************** endpoint stages multipart uploads forwarded by APIService into MinIO bucket **************** and creates an UnprocessedRecording stag...

Kamo·6mo ago
FeatureAPIService

VoipRecordingUploadController for kamo-asterisk-support uploads

POST /api/voip/recordings/upload accepts multipart bodies from kamo-asterisk-support running on FreePBX hosts. Validates the X-Api-Key has the new VOIP_RECORDIN...

Kamo·6mo ago
Featurekamo-shared-library

UnprocessedRecording staging entity, ImgDat track tracks, recording imaging service

- Fix ImageAssocType ID collision: VM_RECORDING=8, CALL_RECORDING=9 (were both duplicating MY_DOCS at 4). - Add **************** so a master recording can car...

Kamo·6mo ago
Featurekamo-asterisk-support

Initial commit — FreePBX recording uploader (GO)

Watches **************** for finished WAV recordings, groups multi-leg call legs by Asterisk UNIQUEID, and uploads each batch to APIService /api/voip/recordings...

Kamo·6mo ago
Featurekamo-internal

Replace mock contacts tab with fully-featured SoftphoneContacts

Extracts a new SoftphoneContacts component that wires the softphone contacts tab to the real contacts API via useContacts(). Replaces 4 hardcoded mock contacts ...

kamo·6mo ago
Featurekamo-shared-library

Add **************** helpers to TeamMember

Kamo·6mo ago
Fixkamo-internal

Cast voiceActivityDetection to bypass missing TS DOM type

voiceActivityDetection is a valid WebRTC MediaTrackConstraints property but is absent from TypeScript's DOM lib, causing a type error at build time.

kamo·6mo ago
Featurekamo-internal

Wire VAD + push-to-talk; remove unimplementable settings

- vadEnabled now passed as voiceActivityDetection in buildAudioConstraints so the browser honours the toggle when opening mic for a call - pushToTalk auto-mut...

kamo·6mo ago
April 26, 2026
Otherkamo-internal

debug+fix(softphone): inspect <audio> element state, auto-recover when bytes arrive but sound stays silent

WebRTC stats from a recent call showed inboundBytes=39680 / receivers unmuted / ICE pair succeeded — the bridge was delivering audio to the browser — yet the op...

kamo·6mo ago
Featurekamo-internal

Scrollable ringtone list with search filter

Make the ringtone catalog panel match the right-column height and scroll vertically when the list overflows, so members can navigate as more tones are added. Ad...

kamo·6mo ago
Otherkamo-internal

Dump WebRTC state again 5s after Established + track all state changes

The Established-time dump always shows receivers with muted=true because DTLS handshake and SRTP keying haven't completed yet. To diagnose "call connects but no...

kamo·6mo ago
Featurekamo-internal

Add seven more ringtones to the catalog

Adds Battleship Horn, Demon Horn, Land Line, 1985 Ring, Office Phone, Ringing Old Phone, and Olé under /public/sounds/ringtones/ and wires them into RINGTONE_CA...

kamo·6mo ago
Featurekamo-internal

Add Sci-Fi and Buzzer ringtones to the catalog

Drops two new ringtone assets under /public/sounds/ringtones/ and registers them in RINGTONE_CATALOG so they appear in the Ringtones subtab and can be set as th...

kamo·6mo ago
FixKlusterServices

Configure STUN so browser ICE can complete bidirectionally

Two-party browser-to-browser calls connected at the SIP layer but had no audio either direction. Voicemail (one-way Asterisk → browser) worked because Asterisk'...

Kamo·6mo ago
Otherkamo-internal

Dump WebRTC negotiation state on Established

To diagnose "call connects but no audio between parties", log the peer-connection state (ice / dtls / signaling) along with sender and receiver tracks (kind / e...

kamo·6mo ago
Fixkamo-internal

Live audio that survives load-interrupts, centered spinner, outbound ringback

Three coordinated fixes for the in-call audio path: 1. AbortError on remoteAudio.play() (visible in production console as "The play() request was interrupte...

kamo·6mo ago
Fixkamo-internal

Hangup tears down ALL live sessions, not just the primary

Self-call edge case left a session leaked: dialing your own extension creates an outbound session, then Asterisk loops the call back as a second inbound session...

kamo·6mo ago
Fixkamo-internal

Instant connecting feedback on outbound dial

Same problem the inbound Answer button had: clicking Call kicked off the SIP INVITE round-trip (1-3 seconds) but the button kept its idle "Call" appearance the ...

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