Kamo Logo
Home
Change Log

Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

April 12, 2026
Fixkamo-marketing

Use 24-hour window instead of UTC date for today's changelog count

The server runs in UTC, so at night in US timezones toISOString() returns tomorrow's date and no commits match. Using a 24h rolling window instead.

Kamo·1d ago
Fixkamo-marketing

Force-dynamic on changelog API routes to prevent stale date caching

Next.js was statically caching these GET route handlers at build time, freezing new Date() to the build date so today's changelog count never updated.

Kamo·1d ago
Fixkamo-internal

Use systemDocsOnly flag for System Docs tab, show all docs in Original Docs

Original Docs tab now shows all docs for this org/assocType without filtering by assocObjectId. System Docs tab sends systemDocsOnly: true to only get docs with...

kamo·1d ago
FixDocsService

Use esign_templates.current_design_version for hasDesignVersion, add systemDocsOnly filter

hasDesignVersion now checks if an esign template exists with current_design_version > 0, instead of using isSigTemplate which is true for all uploads through th...

Kamo·1d ago
Fixkamo-internal

Default assocObjectId to current member ID for proper doc tab filtering

When no oid URL param is provided, Original Docs and Modified Docs tabs now query by the current member's ID, while System Docs queries with blank assocObjectId...

kamo·1d ago
FixConversionService

Add @JsonIgnoreProperties to UploadTemplateRequest to prevent hash null on unknown fields

The frontend sends accessLevel, description, folderId, docTypeId in the metadata JSON. Jackson was failing to parse the entire metadata object when encountering...

Kamo·1d ago
Refactorkamo-internal

Rewrite MultiFileUploader with queue-based upload and per-file settings

kamo·1d ago
Fixkamo-internal

Separate data fetching for Original/Modified/System doc tabs

kamo·1d ago
FeatureDocsService

Add isConverted, hasDesignVersion, isHidden to DocumentMetadata response

The /api/docs/imaging/list endpoint now returns conversion status from ImgDat and design version status (isSigTemplate) so the frontend can enable/disable the E...

Kamo·1d ago
Featurekamo-internal

Restructure DocManager tabs, add Edit icon, embed editor and multi-file uploader

kamo·1d ago
Featurekamo-internal

Create MultiFileUploader component with per-file conversion pipeline

kamo·1d ago
Featurekamo-internal

Create DocumentEditor component for inline editing in DocManager

kamo·1d ago
Chorekamo-internal

Remove /doc/sign/create and /doc/sign/edit routes

Editor is now embedded inline in the doc manager page.

kamo·1d ago
Refactorkamo-internal

Remove scope/assocType from SettingsSignersTab, rename to Doc Description, add Active Member signer

kamo·1d ago
ChoreDaemonService

Remove background document conversion and thumbnail generation jobs

Kamo·1d ago
Fixkamo-internal

Raise annotation toolbar z-index to 1000 so it always renders above page elements

kamo·1d ago
Featurekamo-internal

Fix watermark above-layer z-index, add page right-click menu, add page above/below, improve drag indicator

- ModifierLayer: 'above' pass now uses zIndex 20 so watermarks render on top of fields and annotations - PdfCanvas: right-click context menu with rotate, delete...

kamo·1d ago
Fixkamo-internal

Place dropped field at ghost's exact visual position

Use active.rect.current.translated (the DragOverlay ghost's client rect) instead matches the translated rect, so the field now lands precisely where the user re...

kamo·1d ago
Fixkamo-internal

Remap field signerUids when backend returns new signer UIDs after save

kamo·1d ago
Featurekamo-internal

Drag-and-drop field placement, floating annotation toolbar, and PDF page spacing

- Replace click-to-place with @dnd-kit drag-and-drop for all signature, identity, and input field tools; drag ghost matches the exact visual appearance of the...

kamo·1d ago
FixESigService

Preserve signer UID on save to keep field associations intact

Kamo·1d ago
RevertAPIService

Remove incorrectly added esig gateway route

Kamo·1d ago
Fixkamo-internal

Route all esig API calls directly to ESigService via K8s DNS

kamo·1d ago
FixESigService

Use environment variables for Redis, datasource config

Kamo·1d ago
Fixkamo-internal

Route all esig API calls through forwardToApi() to fix save failures

All 10 esig route handlers were pointing to ESIG_SERVICE_URL which resolves to a non-existent kamowsesig-service proxy. Replace every handler with forwardToApi(...

kamo·1d ago
FixESigService

Replace upsertSigners with full delete+insert to handle frontend temp UUIDs

The frontend assigns temporary crypto.randomUUID() values to newly-added signers before any backend call. The previous upsert-by-uid logic would throw 404 for t...

Kamo·1d ago
FeatureAPIService

Add /api/esig/** gateway routing to ESigService

Route all /api/esig/** requests through the existing API gateway to the dedicated ESigService (kamowsesig-service) instead of the non-existent proxy target. Add...

Kamo·1d ago
Featurekamo-internal

Add layer position option to Watermark modifier (behind / above content)

- WatermarkModifier gains a 'layer' field: 'behind' | 'above' (defaults to 'behind') - ModifierLayer now takes a 'pass' prop ('below' | 'above'): - below pass...

kamo·1d ago
Featurekamo-internal

Add Watermark modifier to esign toolbox

- WatermarkModifier type: logoType (full/simple), startPage, endPage, rotation (−180–180), size (10–90% of page width), opacity (2–60%), solidColor toggle, colo...

kamo·1d ago
Fixkamo-internal

Only show page number format token hint when Custom is selected

kamo·1d ago
Featurekamo-internal

Extend Label modifier to full 8-position grid with LM/RM rotation

- LabelModifier.position now uses ModifierPosition8 (same 8-position grid as Page Numbers) - LM (Middle Left): each line rendered as a vertical pill with writin...

kamo·1d ago
Featurekamo-internal

Add Tools/Modifiers tabs to esign Toolbox with live canvas overlays

- Split Toolbox left sidebar into Tools and Modifiers tabs - Modifiers tab: split list + settings panel (Option B) - Page Numbers modifier: start/end page, 8-...

kamo·1d ago
Fixkamo-marketing

Switch preview-banner-text to inline flow so changelog link sits on the same line

Kamo·1d ago
Fixkamo-marketing

Force changelog link inline so it flows with banner text

Kamo·1d ago
Fixkamo-internal

Correct rotated thumbnail positioning and restore rotation transform

Two bugs in ThumbnailCanvas: 1. Replaced `height: \`${displayAspect * 100}%\`` (percentage height on abs- positioned element — unreliable when containing bl...

kamo·1d ago
Featurekamo-marketing

Show today's changelog count in preview banner with link to /changelog

Kamo·1d ago
Featurekamo-internal

Fix floating zoom control visibility and polish thumbnail placeholders

- Move floating zoom controls outside the scroll container and use position:absolute so they remain visible at all times regardless of scroll position; offs...

kamo·1d ago
Featurekamo-internal

Page selection with animated glow border synced between canvas and thumbnail sidebar

- DesignTab holds selectedPageIndex as the single source of truth - Clicking any page in the main canvas selects it (onPageSelect) - Clicking a thumbnail select...

kamo·1d ago
Fixkamo-internal

Move scroll ownership from PdfCanvas to canvasContainerRef

PdfCanvas root Box previously had overflow-auto + h-full, making it its own scroll container. This meant: - scrollbarGutter: stable on canvasContainerRef had no...

kamo·1d ago
Fixkamo-internal

Fit to Width calculates actual container width instead of resetting to zoom 1

Reads canvasContainerRef.current.clientWidth (which accounts for the stable scrollbar gutter) and the page's natural width via pdfCanvasRef.getPageDimension(0),...

kamo·1d ago
Fixkamo-internal

Replace all hardcoded purple with var(--color-primary) on Settings & Signers page

Signers icon, icon background, count badge, Add Signer buttons, Add First Signer button, empty-state illustration tint, add-another hover, and the ALL_OF_TYPE s...

kamo·1d ago
Featurekamo-internal

Auto-select first signer, fix zoom control scrollbar gap, animate properties panel

- Toolbox auto-selects the first signer's UID when signers go from 0→1 - Canvas container uses scrollbar-gutter: stable so the sticky zoom/undo control mainta...

kamo·1d ago
Featurekamo-internal

Reorder tabs, gate field tools by signer, redesign Settings & Signers tab

- Design is now the first tab; Settings & Signers is second - Toolbox shows "Add Signer" CTA (navigates to Settings) when no signers exist - Signature Tools, Id...

kamo·1d ago
Featurekamo-internal

Render field controls as actual-looking form elements with signer color tinting

Each field type now renders a visual representation of the real control (text input, checkbox, toggle, dropdown, radio group, date picker, etc.) tinted with the...

kamo·1d ago
Fixkamo-internal

Remove fixed height and scroll bars from field properties panel

The panel had two vertical scrollbars: 1. DesignTab wrapper had height: 200 + overflowY: auto 2. FieldPropertiesPanel root had height: 200 + overflow: hidden, ...

kamo·1d ago
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·1d ago
April 11, 2026
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·2d 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·2d ago
Refactorkamo-internal

Migrate all imaging API routes from SecurityService to ConversionService/DocsService

Upload routes now call ConversionService directly via CONVERSION_SERVICE_URL: - POST /api/imaging/upload → /api/conversion/imaging/upload - POST /api/imaging/te...

kamo·2d ago
RefactorSecurityService

Remove ImagingController and beans/imaging — moved to ConversionService and DocsService

Upload endpoints now live in ConversionService at /api/conversion/imaging/*. All management and download endpoints now live in DocsService at /api/docs/imaging/...

Kamo·2d ago
Live Change Log | KamoCRM | KamoCRM