Add esign repos to JPA repository scan so ESignTemplateRepository bean is found
DocsService was crashing on startup because ESignTemplateRepository lives in com.kamo.z.shared.esign.repos which wasn't included in the @EnableJpaRepositories s...
Redesign Prepare Selected tab with reordering, preview, and bulk download
Replace mock Options panel with functional document preparation UI. Documents are reorderable via drag-and-drop and arrow buttons, with checkboxes for deselecti...
Add bulk download (merged PDF/ZIP) and general-purpose thumbnails
Remove e-signature template guard from thumbnail endpoint so all documents can serve per-page thumbnails. Add isThumbAvail and thumbPageCount to DocumentMetadat...
Include folderName, folderPath, and docTypeName in DocumentMetadata response
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.
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.
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...
Use **************** 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...
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...
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...
Rewrite MultiFileUploader with queue-based upload and per-file settings
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...
Restructure DocManager tabs, add Edit icon, embed editor and multi-file uploader
Create MultiFileUploader component with per-file conversion pipeline
Remove /doc/sign/create and /doc/sign/edit routes
Editor is now embedded inline in the doc manager page.
Remove scope/assocType from SettingsSignersTab, rename to Doc Description, add Active Member signer
Add memberType to user info, rename templateName to docDescription in template settings store
Add memberType field from Member entity discriminator column to the user-info API response and useUserInfo hook. Rename templateName to docDescription in templa...
Raise annotation toolbar z-index to 1000 so it always renders above page elements
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...
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...
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...
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(...
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...
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...
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...
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...
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...
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-...
Switch preview-banner-text to inline flow so changelog link sits on the same line
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...
Show today's changelog count in preview banner with link to /changelog
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...
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...
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...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.