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.
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 ...
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...
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.
Remove .mvn/ copy from Dockerfile — directory does not exist in this project
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...
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 ...
Update ApiPromotion type to match new List<String> backend response
applicablePlanIds and applicableBillingCycles are now arrays, not JSON strings.
Extend 18DOFF promotion end date to 2026-12-31
The April 14 end date was causing the offer page to show as expired.
Remove redundant webhook secret validation, APIService handles HMAC auth
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...
Force changelog page to render dynamically, not statically at build time
Truncate commit titles exceeding 500 chars to prevent DB insert failures
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...
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.
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.
Update imgId type to string|number for CockroachDB ID safety, add error logging
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 ...
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...
Set proxyClientMaxBodySize to 500mb for large file uploads in Next.js 16.2
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...
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
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...
Attach widget event listeners when password step renders, not on initial mount
Listen for both statechange and verified events, remove payload requirement from login gate
Use identical explicit pixel spacing on both username and password option rows
Context-aware *** error messages, tighten spacing between fields and options
Swap spacing on username/password views, label to 'I am Human', update error message
Use widget's CSSVariables type instead of React.CSSProperties for style prop
Remove duplicate Capcha-widget JSX type declarations (widget ships its own)
Vendor kamo-capcha-widget locally instead of git URL (Docker can't resolve k0m1)
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.