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(...
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-...
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...
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...
Fit to Width calculates actual container width instead of resetting to zoom 1
Reads **************** (which accounts for the stable scrollbar gutter) and the page's natural width via **************** then computes fitZoom = (availableWidt...
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...
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...
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...
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...
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, ...
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...
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...
Add Thumbnails step to upload progress indicator, track generating_thumbnails WS stage
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...
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...
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,...
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 ...
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.
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...
Add e-signature template editor with design canvas, signers, and versioning
Complete rewrite of /doc/sign/edit page with tabbed interface (Settings & Signers, Design), PDF.js canvas with draggable field overlay, annotation tools, signer...
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...
Remove JSON parsing workarounds for subscription plan ID arrays
Backend now returns proper arrays instead of JSON strings, so the try/parse/catch fallback logic is no longer needed in add-on, bundle, and promotion grid cell ...
Add access level editor to member settings with org-specific label substitution
Rename CLIENT→MEMBER and INTERNAL→TEAM_MEMBER in ImageAccessLevelType.ts with {var} placeholders. Add access level section to RolesPermissionsTab with edit cont...
Update imgId type to string|number for CockroachDB ID safety, add error logging
Set proxyClientMaxBodySize to 500mb for large file uploads in Next.js 16.2
Next.js 16.2.3, TypeScript 6.0, Node 24, React 19.2
- Next.js 16.0.10 → 16.2.3, TypeScript 5.8 → 6.0.2, Node 20 → 24, React 19.2.3 → 19.2.5 - Migrate ESLint from .eslintrc.json to flat config (eslint.config.mjs) ...
Redesign support page and webinar wizard to match account page layout
Both pages now use the same gradient hero header with embedded tab navigation, matching the /account page pattern. The webinar scheduling wizard uses numbered s...
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...
Add support dropdown with sections, extract webinar scheduling to dedicated page
Support nav button now has a dropdown arrow and Popover with two sections: "Online Support" (Contact Support, View Active Tickets) and "Training" (Request Webin...
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...
Rename e-signature tabs and reorder to Available Templates, Drafts, Archived
Real-time conversion progress via WebSocket with dual percentages
- Add useConversionWebSocket hook supporting both member and template topics - Create page connects WebSocket before upload, shows live conversion progress fr...
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...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.