Rewrite all canonical templates with full branded design
All 5 templates now use the consistent outer table structure (600px, rounded card, gray header/footer) matching the block editor's serializeFullEmailHtml output...
Remove @Enumerated — RoleRightTypeConverter autoApply takes over
Add 11 new rights (119-129) and CALCULATOR service type
MANAGE_CRM_SETTINGS, VIEW_TASKS, CALC_SIMPLE, CALC_SCIENTIFIC, CALC_PROGRAMMER, CALC_GRAPHING, CALC_UNIT_CONVERTER, CALC_CURRENCY_CONVERTER, CALC_EMOJIS, CALC_C...
Add WELCOME_MEMBER and WELCOME_TEAM_MEMBER canonical email templates
Add 7 module-access rights (IDs 112-118)
ACCESS_COMMERCE, VIEW_CALENDAR, ACCESS_CHAT, ACCESS_MAIL, ACCESS_VOIP, VIEW_SUPPORT, VIEW_ANALYTICS
Improve email verification template — URL fallback, expiry text, subject
- Add plain-text verification link below button as copy-paste fallback - Switch expiry variable from {{expiryMinutes}} to {{expiryText}} for human-readable fo...
Add branded outer frame to email-verification canonical template
Wraps inner content with a proper email shell: header with org name, padded content area, and footer. Uses {{orgName}} as the identifier.
Remove eager feature-loading from getOrganizationByDomain
Features are an org-level concern unrelated to most callers of this method (e.g. registration, login domain resolution). Force-loading them via setFeatures() re...
Mutate features collection in-place to avoid cascade orphanRemoval error
Calling org.setFeatures(newList) replaces the Hibernate-tracked persistent collection, causing JpaSystemException when any query triggers auto-flush in an open ...
Add DEFAULT false to email_verified column definition
Hibernate's schema migrator generates ALTER TABLE without a default, failing on tables with existing rows. columnDefinition forces it to include DEFAULT false s...
Add EmailVerificationToken entity + repo + User.alias/emailVerified + UserRepo queries; bump 1.4.0 (SP4)
Add recovery entities + repos; bump to 1.3.0 (SP3)
Adds PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode JPA entities with corresponding repositories for SP3 recovery flow.
Add SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash to User (SP3)
Bump kamo-shared-library version to 1.2.0 for SP1 additions
Adds EmailTemplate, EmailTemplateCategory, TemplateStatus, TemplateKeys, CanonicalTemplate, CanonicalTemplateLoader, and canonical HTML resources.
Add CanonicalTemplateLoader + CanonicalTemplate record
Reads the three REQUIRED templates (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION) from classpath resources at **************** Consumed by KamoInitializerService...
Add canonical HTML + JSON for WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION
Source-of-truth content for SYSTEM rows. Loaded at KamoInitializerService startup by CanonicalTemplateLoader and UPSERTed into email_templates. Part of SP1.
Add EmailTemplate entity + repository
Stores one SYSTEM row per template_key (org_id NULL, is_system TRUE) plus one clone per org per template_key. Soft-reference org_id/category_id. DB- driven time...
Add EmailTemplateCategory entity + repository
Org-scoped categories for email templates. Soft BIGINT org_id (no FK) matches existing patterns. Case-insensitive name uniqueness per-org is enforced via a part...
Add TemplateStatus enum + TemplateKeys constants for transactional templates
Declares the REQUIRED/CUSTOM/ARCHIVED lifecycle states and the three required template keys (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION). Variable contracts fo...
Add domain ownership verification via DNS TXT record
- OrgDomain: add verificationToken and ownershipVerified fields - DomainService: add setVerificationToken() and setOwnershipVerified() - DomainDTO: expose verif...
Query CommitLogs with LEFT JOIN so zero-translation records are caught by retry
The old query selected from CommitLogTranslation — commit logs with no translations at all were invisible to it. Use LEFT JOIN from CommitLog so the HAVING COUN...
Add sslConfirmed/sslConfirmedAt fields to OrgDomain and DomainDTO
Adds two new fields to OrgDomain entity and DomainDTO to track SSL certificate confirmation status after the auto-cert service issues a certificate. Also adds s...
Add billing entities and repositories for Stripe integration
New package **************** with 9 entities (BillingCustomer, BillingSubscription, BillingPaymentMethod, BillingInvoice, BillingCredit, BillingCreditLedger, Bi...
Use UUID for SubscriptionPlanTranslation FK to match BaseUuidEntity PK type
Add translation entities and repositories for CommitLog, KbArticle, SubscriptionPlan
- CommitLogTranslation + CommitLogTranslationId (PK: commit_log_id, locale) - KbArticleTranslation + KbArticleTranslationId (PK: article_uid, locale) - Subscrip...
Restore removed languages with translationSupported field
Add translationSupported boolean to LanguageType enum. Restore URDU, MARATHI, TELUGU, and GUJARATI (translationSupported=false). All 22 previously supported lan...
Replace removed DocumentNotFoundException with ImagingException in ImageService
DocumentNotFoundException was deleted as part of the Document entity removal but ImageService still referenced it in 9 places. Replaced with the existing Imagin...
Remove standalone Document entity — all docs now use Img/ImgDat imaging system
The Document entity, DocumentRepository, and DocumentNotFoundException are removed. DocsService WOPI and Docs integration now operates entirely through the Img ...
Add Lead Intake system entities, repos, DTOs, and service
Adds the complete data layer for the automated lead intake system: - 4 entities: LeadIntakeEndpoint, LeadIntakeFieldMapping, LeadIntakeRawPayload, LeadIntakePro...
Remove memberType field entirely to prevent Hibernate duplicate column
The previous fixes (@Transient on field, @Access(AccessType.FIELD) on class) were insufficient. Bytecode inspection revealed Lombok's @Setter generated a public...
Add @Access(AccessType.FIELD) to Member to stop Hibernate mapping getMemberType() as a column
The previous fix (@Transient on the memberType field) was insufficient. Hibernate 6 was still discovering the public getMemberType() method via property scannin...
Track uploaded-by member on Img entity
Add createdByMember (ManyToOne) field to Img so the uploader is persisted at upload time. ImageService.uploadDocument() now sets it from the calling member. Hib...
Resolve security_level SQL error caused by duplicate MEMBER_TYPE column in Hibernate 6
Member.java mapped MEMBER_TYPE both as @DiscriminatorColumn and as an explicit @Column field. Hibernate 6 selected the column twice in the parent table projecti...
Add findActiveSharesForSwMember and countNewSharesForSwMember queries to ImgShareRepository
Add null safety checks in MemberRightsAppliedService and fix role save in MemberService
Add doc sharing security rights (SHARE_DOCS_SEARCH_MEMBERS, SHARE_DOCS_ALIAS_MEMBERS, SHARE_DOCS_SEARCH_TEAM_MEMBERS, SHARE_DOCS_ALIAS_TEAM_MEMBERS)
New RoleRightType entries (IDs 108-111) under ServiceType.DOCS to control member document sharing permissions with search vs alias-only access patterns.
Add real BLAKE3 hashing, pre-upload dedup check, and org-scoped dedup
- Replace BLAKE3 placeholder with real BouncyCastle Blake3Digest in HashUtils - Add dedupScope column to ImgOrgAssoc (GLOBAL or ORG, default GLOBAL) - Add org-s...
Add thumbPageCount field and findNeedingPageThumbnails query for per-page thumbnail support
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.