KamoCRM

Live Change Log

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

18,569
Total Changes
6,654
Features
5,579
Fixes
30
Projects
Filter by project
All Projects18,569AIService282APIService179BillingService165ConversionService118DaemonService147DocsService256ESigService98EmailService628InitializerService344KBService162KlusterServices771MCPGatewayService277MediaService622RAGService79SecurityService2,023TranslateService62VOIPService265VectorService11kamo-apps29kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,750kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,859kamo-signer-monorepo61kamolos115
Filter by type
All TypesBuild23CI527Chore794Docs3,287Feature6,654Fix5,579Other1,001Performance174Refactor284Revert23Style45Test177Upgrade1
July 2, 2026
FixVOIPService

Implement POST /api/bulktext/send internal transactional SMS

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was ...

Sage·4mo ago
OtherKlusterServices

Provision R1 MEDIA JetStream stream via idempotent bootstrap Job

Media/lead-feed events (media.feed.*, media.post.*) had no JetStream stream, so publishes returned '503 No Responders Available For Request' (chat.> is covered ...

Kamo·4mo ago
Fixkamo-internal

Send leadId as string when creating a comment

parseInt() rounded lead ids past JS MAX_SAFE_INTEGER, so the backend looked up a nonexistent lead and returned 404, surfacing as 'Failed to create post' on the ...

kamo·4mo ago
FixSecurityService

Accept leadId as string in createPost to preserve CRDB id precision

Lead IDs are CRDB unique_rowid() values that exceed JS MAX_SAFE_INTEGER. The frontend now sends leadId as a string; parse both String and numeric forms so findB...

Kamo·4mo ago
Fixkamo-internal

Resolve member names on /leads/credits + link to their account

The member column and filter showed raw ids because the name map was built from /api/security/members, whose CockroachDB Long ids serialize as JSON numbers and ...

kamo·4mo ago
Chorekamo-internal

Rebuild to pull new i18n keys from translation dictionary

The manual-import feature keys were added to kamo-translation-dictionary (en) which CI copies into messages/ at build time; this forces a rebuild so the deploye...

kamo·4mo ago
Featurekamo-internal

Inject Test Lead action on /leads/available (managers only)

Adds an 'Inject Test Lead' button beside Accept for each vendor/product, shown only to members with MANAGE_CREDITS. Opens a confirmation dialog, then POSTs to t...

kamo·4mo ago
FeatureSecurityService

Inject test lead + fix Manage-Credits list for grant-all admins

- New POST **************** (MANAGE_CREDITS): creates a synthetic 'Void > Test Lead' (John Doe / 555-555-5555 / noreply@<org base domain>) with requiresAssi...

Kamo·4mo ago
Featurekamo-shared-library

Store original uploaded file key on LeadImport run

Adds SOURCE_FILE_KEY + SOURCE_FILE_CONTENT_TYPE columns so a run references the original file archived in MinIO (KamoInitializer adds the columns on next run).

Kamo·4mo ago
Featurekamo-internal

Archive & download the original imported file

On Start Import the raw file is uploaded (best-effort) and its key passed to the import POST; Past Imports shows a Download button for runs with an archived fil...

kamo·4mo ago
FeatureSecurityService

Archive original file to MinIO + download endpoint

Injects MinIOStorageService; POST /source-file stores the raw upload in the private internal bucket; GET /{id}/source-file streams it back (org-checked); the ke...

Kamo·4mo ago
Featurekamo-internal

Import Templates + Past Imports sub-tabs, auto-detect, re-import

- Sub-tab bar in LeadManualImportManager: Import Leads | Import Templates | Past Imports - LeadImportTemplateManager: template list/create/edit/delete + upload-...

kamo·4mo ago
FeatureSecurityService

Persist runs/records, template CRUD, header auto-detect & re-import

- LeadImportPersistenceService: header normalize+SHA3 fingerprint (ordered/unordered), mapping/row JSON round-trips, persist run + non-success records, templa...

Kamo·4mo ago
Featurekamo-internal

Live availability indicator on the Lead Credits button

Mirror the NavPri Leads indicator on the /leads 'Lead Credits' action: a green/red status dot (green = a lead is acceptable now via FFA or credit, red = none) a...

kamo·4mo ago
Fixkamo-internal

Make EditableCard onEdit optional so reassignment gating type-checks

The assignment card passes `canReassignManually ? startEditAssignment : undefined` to EditableCard.onEdit, but onEdit was typed `() => void` (required), failing...

kamo·4mo ago
Featurekamo-internal

Live NavPri lead alert — green/red dot, blink, fire popup, edge trim

- LeadAlertProvider (global, mounted at NavPri level): WS-driven /available-summary; drives all state - NavPri Leads icon: green dot (can accept) / red (cannot)...

kamo·4mo ago
FeatureSecurityService

GET /leads/available-summary for the live NavPri lead alert

Aggregates the caller acceptability across all active markets (comment gate + credit/FFA/ daily-spend rules). Returns hasAcceptable / hasAcceptableCredit / bloc...

Kamo·4mo ago
Featurekamo-shared-library

Persistence spine for import templates, runs & per-row records

Replaces the empty stub entities with real @Entity classes (modeled on the LeadIntake* precedent: UUID id, gen_random_uuid, DB-default timestamps, statusId + @T...

Kamo·4mo ago
Fixkamo-internal

Busy state on Start Import + drop debug logs

- disable Start Import / Back and show a spinner + 'Importing…' while the import POST is in flight, preventing duplicate submissions on large files - remove [...

kamo·4mo ago
FixSecurityService

Correctness, scale & PII hardening in LeadImportController

- dedup via scoped LeadRepository query instead of findAll() over all tenants (was an OOM/DoS + cross-tenant exposure risk, re-run per 1000-row batch) - cap i...

Kamo·4mo ago
Fixkamo-shared-library

Scope import dedup query + org-guard member/vendor-product assignment

- **************** scoped, projection-only duplicate lookup for the manual importer (replaces a per-batch findAll() that hydrated every lead across all tena...

Kamo·4mo ago
Featurekamo-internal

/account-style header+tabs, /leads Card containers, right gating

- LeadsCreditLayout: gradient hero header + underline tabs (matches /account); filters+grid in rounded /leads-style Card; Available tab gated by SPEND_RECEIVE...

kamo·4mo ago
FeatureSecurityService

Mark-reassignment gated by MARK right; Manage-Credits returns members with Spend/Receive right

LeadAcceptController: mark-reassignment requires MARK_LEADS_REQUIRES_ASSIGNMENT. LeadCreditController.manage: returns eligibleMemberIds (SPEND_RECEIVE_LEAD_CRED...

Kamo·4mo ago
Featurekamo-shared-library

3 CRM rights + members-with-right query

RoleRightType: SPEND_RECEIVE_LEAD_CREDIT(147), **************** REASSIGN_LEADS_MANUALLY(149) under CRM. **************** for listing members holding a right. Se...

Kamo·4mo ago
FeatureInitializerService

Codify §4.2 requirement-writer single-live partial-unique backstop

At most ONE LIVE requirement per (loan_file_uid, img_doc_type_id, party) obligation cell. **************** app-layer idempotency read cannot catch a concurrent ...

Kamo·4mo ago
July 1, 2026
OtherKlusterServices

node-config(k1m1-runner): record data.forgejo.org IPv4 pin + capacity=6

Documents the live on-node change: data.forgejo.org is IPv6-only and k1m1 has no IPv6 route, so job containers hung ~133s and actions/checkout failed. Pin its I...

Kamo·4mo ago
Fixkamo-shared-library

Pin markedForReassignmentBy FK to INT8 (no inherited default)

Without columnDefinition, Hibernate copies members.id (INT8 DEFAULT unique_rowid()), so CockroachDB backfilled existing leads rows with bogus member ids on ALTE...

Kamo·4mo ago
Featurekamo-shared-library

**************** (Accepted-Today column)

Counts leads a member accepted via credit/FFA for a vendor product since a UTC instant (member local start-of-day). Consumed by LeadAcceptController /leads/avai...

Kamo·4mo ago
Featurekamo-internal

Credit-based lead assignment UI (available/history/credits)

- /leads/available: real-time vendor/product grid, atomic Accept (routes to the lead), comment-gate blocked state, rows animate the moment a lead is claimable...

kamo·4mo ago
Featurekamo-shared-library

Add **************** for the registry decision half

doc 11 §5.3 step 4 / §10 audit completeness — every registry mint/receipt/supersede emits a paired WORM AiDecision + LoanIdentifierEvent. This adds the AiFuncti...

Kamo·4mo ago
FeatureDaemonService

Daily-allotment forfeit audit job (hourly, per-member timezone)

Records FORFEITED rows for members with drip allotments who did not sign in on their completed local day. Idempotent, yields to GRANTED rows. Compiles clean (mv...

Sage·4mo ago
FeatureMediaService

Relay credit/lead-assignment NATS events to STOMP

Subscribes security.leads.> and security.credits.>, mirrors each to /topic/... so the CRM front-end updates the Leads-Available grid, Manage-Credits fields, and...

Kamo·4mo ago
FeatureSecurityService

Credit lead-assignment API ****************

- LeadAcceptController: GET /leads/available, POST /leads/accept (atomic, comment-gated, FFA + credit), GET /leads/uncommented, POST /leads/{id}/mark-reassign...

Kamo·4mo ago
Featurekamo-shared-library

Credit-assignment orchestration services (shared-lib)

- LeadAllotment.isInfiniteBalance (∞ credit balance → mint-on-the-fly at accept) - CreditLeadAssignmentService: atomic Accept-Lead (select→lock→recheck→claim, m...

Kamo·4mo ago
Featurekamo-shared-library

Credit-assignment shared-lib helpers

- **************** — powers the 'must comment before accepting another lead' gate (comment = member's non-removed MediaObj in lead stream) - **************** ...

Kamo·4mo ago
Featurekamo-shared-library

Credit lead-assignment data model (shared-lib)

- Lead: requiresAssignment flag + markedForReassignmentAt/By (nullable; null actor = vendor/API import) - **************** + eventTypeForKey routing + registry ...

Kamo·4mo ago
Featurekamo-internal

Market lifecycle + market-scoped vendors/products

- Markets & Fields: Active/Archived sub-tabs; row action is Archive/Reactivate (PATCH .../active), never delete - Vendors & Products: one sub-tab per active m...

kamo·4mo ago
FeatureSecurityService

Market status filter, archive/reactivate, market-scoped vendors

- GET **************** (default active); enrich each market DTO with vendor-products derived from its vendors - Replace DELETE /lead-markets/{id} with PATCH /...

Kamo·4mo ago
Featurekamo-shared-library

Scope vendors to a market; derive market products; archive markets

- LeadVendor gains a required MARKET_ID (columnDefinition pinned to plain UUID so the FK column does not inherit the referenced PK's gen_random_uuid() default...

Kamo·4mo ago
Fixkamo-internal

Stop refresh icon blinking via infinite check loop

Once a domain was SSL-confirmed, checkDns unconditionally built a new domain object even when sslConfirmed was already true. The new object reference re-trigger...

kamo·4mo ago
Featurekamo-internal

Add media subdomain to the required records list

media.<domain> backs the realtime websockets (chat, calls, SMS, theme provisioning) and media streaming, but it was missing from the DNS setup catalog, so custo...

kamo·4mo ago
FixEmailService

Return 422 (not 500) when member has no mailbox

listFolders and other read endpoints threw IllegalStateException from MailContext.toMailCredentials() when a member had no IMAP credentials provisioned, which t...

Sage·4mo ago
Fixkamo-internal

Don't fetch org with a precision-truncated id

LabelManager derived orgIdStr from getOrgIdString() (precision-safe) with a fallback to String(organization.id). organization.id is a JS number and silently tru...

kamo·4mo ago
FeatureBillingService

TRIAL_PENDING mode for a not-yet-started trial

Sage·4mo ago
FeatureSecurityService

Start trial clock on org owner's first login

Seed new orgs with a PENDING trial (source=TRIAL, trialExpiresAt=null) that grants nothing until started, then start the 3-day clock on the owner's first FQDN-s...

Kamo·4mo ago
FixSecurityService

Set site region + use node-local MinIO per pod

- Add kamo.minio.region (MINIO_REGION, default us-west-ca-s-1) so SigV4 signatures match the server's enforced site region; fixes background upload and sett...

Kamo·4mo 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