KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
April 12, 2026
Fixkamo-internal

Defer setTotalPages until after PDF dim loop to prevent PDF.js worker saturation

On a 50-page PDF, calling setTotalPages before the getPage() dimension loop mounts all 50 ThumbnailCanvas components immediately. Each falls back to PDF.js (ser...

kamo·6mo ago
FixConversionService

Expand component scan and add full datasource/JPA/Redis/MinIO config

ConversionServiceApplication was only scanning com.kamo.ConversionService, missing all shared library beans (ImageService, MinIOStorageService, MemberRepository...

Kamo·6mo ago
FixConversionService

Add kamo-shared-library build stage to resolve missing dependency

The Dockerfile was trying to fetch kamo-shared-library from Maven Central, which doesn't exist there. Mirror the SecurityService pattern: clone the shared libra...

Kamo·6mo ago
Fixkamo-internal

Prevent page stacking, fix thumbnail slivers, add server-side thumbnails with PDF.js fallback

- Add flexShrink: 0 to page divs in PdfCanvas so pages don't compress in flex column - Add flexShrink: 0 to thumbnail items in PageThumbnailSidebar for same rea...

kamo·6mo ago
Fixkamo-internal

Eager PDF rendering, natural scale normalisation, no horizontal scroll

- PdfCanvas: replace IntersectionObserver with eager render-all-pages. The observer-based approach was unreliable when the design tab starts with display:no...

kamo·6mo ago
Fixkamo-internal

Eliminate removeChild DOM conflict in PDF thumbnail rendering

Replace container.innerHTML + appendChild pattern in ThumbnailCanvas with a React-managed <canvas> ref. The old approach cleared React-owned DOM nodes directly,...

kamo·6mo ago
Fixkamo-marketing

Handle applicablePlanIds and applicableBillingCycles as string arrays

These fields are typed as string[] but had .split(",") calls on them, causing TypeScript build failures.

Kamo·6mo ago
FixESigService

Add CockroachDB transaction retry for template init endpoint

CockroachDB serializable isolation can trigger RETRY_SERIALIZABLE on the read-then-write pattern in initTemplate. Retries up to 3 times with backoff when detect...

Kamo·6mo ago
Fixkamo-marketing

Redact *** references in changelog display

Kamo·6mo ago
Fixkamo-internal

Revert proxy routes to OTK auth, remove unused esigProxy helper

OTK is the correct auth mechanism — the prior session-header approach bypassed the established security pattern. All esig proxy routes now use generateOTK from ...

kamo·6mo ago
FixESigService

Correct OTK Redis key format and add imaging template list endpoint

OTK keys use OTK<id> and ***<id> (no colon) matching the Next.js proxy. Added POST /api/esig/templates/list to query imaging templates via shared library ImgRep...

Kamo·6mo ago
Fixkamo-internal

Use direct session headers instead of OTK for ESigService proxy routes

Read *** session from Redis in Next.js and pass orgId/memberId as trusted headers to ESigService via internal K8s DNS. Removes OTK dependency.

kamo·6mo ago
FixESigService

Replace OTK auth with trusted session headers for internal K8s calls

ESigService is internal — the Next.js backend reads the session from Redis and passes orgId/memberId/userId as X-Org-Id, X-Member-Id, X-User-Id headers. No OTK ...

Kamo·6mo ago
Fixkamo-internal

Use init endpoint to find-or-create template by imgId on editor load

The create page passes imgId in the URL. The edit page now calls the init endpoint to find or create the ESignTemplate, then uses the returned UUID for design o...

kamo·6mo ago
FixESigService

Scan all shared library repository packages to resolve bean dependencies

ComponentScan picks up shared library services which depend on repos in donotmodify.dao.repos and commerce packages — must scan those too.

Kamo·6mo ago
April 11, 2026
Fixkamo-internal

Correct field name mapping between backend and frontend for access level API

Map backend securityLevelId→accessLevel, isOrganizationOwner→isOwner, memberType→isTeamMember in API route. Fix right check to use EDIT_MEMBER_ACCESS_LEVEL inst...

kamo·6mo ago
Fixkamo-marketing

Update fallback offer end date to 2026-04-26

Kamo·6mo ago
FixInitializerService

Set 18DOFF promotion end date to 2026-04-26

Kamo·6mo ago
Fixkamo-marketing

Add static fallback for offer page when subscription API unavailable

The **************** table doesn't exist in production yet, so the API returns an error. Fall back to hardcoded promotion and plan data so the offer page works ...

Kamo·6mo ago
Fixkamo-marketing

Update ApiPromotion type to match new List<String> backend response

applicablePlanIds and applicableBillingCycles are now arrays, not JSON strings.

Kamo·6mo ago
FixInitializerService

Extend 18DOFF promotion end date to 2026-12-31

The April 14 end date was causing the offer page to show as expired.

Kamo·6mo ago
FixAPIService

Validate Forgejo HMAC-SHA256 signature instead of plain secret header

Forgejo sends webhook secret as X-Gitea-Signature / X-Forgejo-Signature HMAC-SHA256 hash, not as a plain header value. Read body, verify HMAC, then forward to S...

Kamo·6mo ago
Fixkamo-marketing

Redact *** header name in changelog display

Kamo·6mo ago
FixConversionService

Handle image files (JPG, PNG, TIFF, etc.) directly via PDFBox instead of Docs

Docs can't convert images to PDF. Added ImageToPdfService that embeds images into a PDF page using PDFBox. Docs is only used for office document formats (DOC, D...

Kamo·6mo ago
FixDaemonService

Use imgRepository.findByDat() instead of lazy imgDat.getImages()

Quartz jobs run outside JPA sessions, so lazy collection access on ImgDat.images throws LazyInitializationException. Use explicit repository query instead.

Kamo·6mo ago
Fixkamo-shared-library

Pass SYSTEM_WIDE as parameter instead of FQCN in JPQL query

Hibernate may not resolve fully-qualified enum names in JPQL across all versions. Pass ImageAssocType.SYSTEM_WIDE as a named parameter instead.

Kamo·6mo ago
FixSecurityService

Serialize imgId as String to prevent JavaScript precision loss

CockroachDB unique_rowid() IDs exceed Number.MAX_SAFE_INTEGER. Changed imgId from Long to String in UploadDocumentResponse and DocumentMetadata DTOs so Jackson ...

Kamo·6mo ago
FixSecurityService

Download converted PDF from MinIO instead of original file

The converted-pdf endpoint was calling imageService.downloadDocument() which returns the original file. Now downloads directly from MinIO using the convertedDat...

Kamo·6mo ago
Fixkamo-internal

Properly forward multipart FormData and set route handler body size limit

- Revert to parsing FormData and rebuilding for forwarding (fixes MalformedStreamException from raw arrayBuffer forwarding) - Add routeHandlerBodySizeLimit: 5...

kamo·6mo ago
Fixkamo-internal

Stream upload body directly to avoid Next.js 10MB body size limit

- Read request as arrayBuffer and forward raw bytes with content-type header instead of parsing FormData (which triggers Next.js body limit) - Add serverActio...

kamo·6mo ago
Fixkamo-internal

Call SecurityService directly via RKE2 DNS, fix hash computation, add staged upload progress

- All template API routes now call SecurityService directly via internal K8s DNS instead of proxying through APIService - Use computeBlake3/computeSha3256 fro...

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