Add e-signature template entities, enums, and repositories
New JPA entities for the e-signature template design system: ESignTemplate, ESignTemplateSigner, ESignTemplateDesignVersion, and ESignTemplateFieldLink with sup...
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...
Server-side stats for real totals, infinite scroll, accurate filter counts
Stats bar and filter pill counts now come from /api/changelog/public/stats (real DB aggregates, not loaded-page counts). Replaced Load More button with Intersec...
Remove KamoGamesRoboCluck from changelog public projects, add backfill scripts
Add /api/changelog/public/stats endpoint for aggregate counts by type and project
Add findByProjectIn query to CommitLogRepository for stats endpoint
Force changelog page to render dynamically, not statically at build time
Truncate commit titles exceeding 500 chars to prevent DB insert failures
Add webhook secret validation to changelog endpoint
Defense-in-depth: validates *** header on the SecurityService side in addition to APIService gateway validation.
Expose changelog webhook through APIService with secret key auth
Adds POST /api/changelog/webhook route that validates *** header before forwarding to SecurityService. Secret configured via CHANGELOG_WEBHOOK_SECRET env var / ...
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 ...
Use List<String> instead of manual JSON strings for promotion plan/cycle IDs
Update KamoCRMPricingLoader to use List.of() for applicablePlanIds and applicableBillingCycles, matching the shared library's migration from JSON strings to ent...
Migrate subscription JSON fields to entity-based @ManyToMany relationships
Replace jsonb string columns (compatiblePlanIds, includedInPlanIds, applicablePlanIds, applicableBillingCycles) with proper JPA @ManyToMany join tables and @Ele...
Add case-insensitive text replacements for changelog display
Replaces internal tool names with public-facing names (Docs->Docs, Meet->Meet, Capcha->Capcha, Avatar Creator->Avatar Creator, etc.) in titles and descriptions ...
Add Live Change Log page with timeline UI, filters, and stats
Server-side fetches changelog from SecurityService, client component provides project/type filtering, date grouping, expandable descriptions, and paginated load...
Add CommitType enum, CommitLog entity, and CommitLogRepository for changelog system
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...
Add member access level and owner status endpoints
Add GET and PATCH **************** endpoints for reading and updating access levels with full permission enforcement. Update organization creation to use create...
Use createOrganizationOwner for admin members, rename INTERNAL to TEAM_MEMBER
Update owner creation to use new createOrganizationOwner method which handles admin role assignment and PRIVILEGED access level automatically. Replace all Image...
Add member access level system with owner promotion and security controls
Rename CLIENT→MEMBER and INTERNAL→TEAM_MEMBER in ImageAccessLevelType with {var} placeholders for org-specific labels. Move securityLevel from TeamMember to Mem...
Proper image-to-PDF conversion with sizing, centering, and multi-page TIFF
- Images scaled to fill page (max width or height) maintaining aspect ratio - Images centered on the page - Multi-page TIFF: one PDF page per TIFF page - Letter...
Add granular conversion progress stages with 8 distinct WebSocket updates
Stages: downloading (0-15%) → preparing (15-20%) → converting (20-65%) → verifying (65-75%) → storing (75-90%) → finalizing (90-100%) → complete
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.
Add extensive logging to synchronous conversion flow, fix bucket lookup
Use img.getAssocId() for bucket instead of local assocType variable. Add step-by-step logging for download, conversion call, and result.
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
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.
