Resolve Members tab showing empty due to Hibernate TYPE() base-class issue
Hibernate's TYPE(m) = :type JPQL filter returns 0 results when the bound parameter is the base Member class (JOINED inheritance). This affects the members-subsc...
Tag visitor messages as VISITOR_MESSAGE type, add senderName to GET messages
- PublicChatService: set messageType=VISITOR_MESSAGE so frontend can distinguish visitor echoes from agent responses on the STOMP topic - MediaController.getM...
Treat VISITOR_MESSAGE type as always-from-them in TicketChat
Visitor messages published via PublicChatService carry messageType=VISITOR_MESSAGE. Explicitly mark these as author='them' regardless of memberId so they always...
Skip VISITOR_MESSAGE echoes in LiveSupportPanel STOMP handler
Visitor messages are now tagged messageType=VISITOR_MESSAGE by the backend. Skip these in the STOMP subscription so the visitor's own messages don't re-appear o...
Wire up status filter and auto-seed required templates on list
- EmailTemplateController.list() now accepts ?status= param and filters using the existing findByOrgIdAndStatus repository query - Auto-seeds required templat...
Three support/chat issues — NATS relay, auto-popup, topic fallback
1. Switch SupportNotificationService and SupportStompRelayController from JetStream to core NATS — the CHAT_MESSAGES stream only covers chat.> so JetStrea...
Allow god-mode users to provision ownerless orgs; prefer FQDNs in domain resolution
Always trigger provision-theme on branding save; let backend resolve domain server-side
Add @Transactional to provision-theme for lazy domain loading; remove hardcoded domain from provision request
Write contact form description as chat message on public ticket creation
The description was only stored on the ticket entity and never appeared in the chat window. Added writeTextMessage() helper and call it after the system event s...
Separate ticket number/badges row from title in TicketHeader
Title was sharing a nowrap flex row with the ticket number and two badges, causing it to be cut off. Now ticket number and badges occupy their own compact row, ...
Handle tickets key in support ticket list response
MediaService returns { tickets: [...], totalElements } but the frontend only checked for data.content, causing the list to always render empty.
Use PATCH /org/{id}/colors for branding save to avoid nullable boolean constraint failure
Add PATCH /org/{id}/colors endpoint to safely update only color palette fields
Correct MEDIASERVICE_URL port from 443 to 80 for contact form
ClusterIP service only exposes port 80; using 443 with http caused a ConnectTimeoutError on every contact form submission.
Hide security model sentence for Members, fix badge overlap on branch type cards
Use memberID session key and include creatorType in creatable branch-types response
Use correct session key 'memberID' instead of 'MID'
KSessionService stores member ID under key 'memberID' but both **************** and OrganizationController were reading session.get("MID") which always returned...
Set org owner usernameAlias on creation and fix website-contact member alias
Exclude master model from models list; add debug log to child-org creation check
SecurityModelController now filters out the org's master model (identified by org.getMasterModelID()) from the /api/security/models response — it is managed exc...
Read session rights as List<String> names, not CSV of integer IDs
Session rights are stored as a JSON array of RoleRightType name strings. Both **************** and OrganizationController were casting them to String (causing C...
Stop double-toggle on age range checkboxes in BranchSetupManager
Box onClick and Checkbox onChange both fired on each click, toggling twice and leaving state unchanged. Stop propagation on FormControlLabel so only one handler...
Use MUI v7 Grid size prop in StackingOrdersManager
MUI v7 Grid2 replaced xs/sm/md with the size object prop.
Remove deprecated MUI Grid item prop in StackingOrdersManager
MUI Grid v2 dropped the item prop; use size props directly on Grid.
Stabilize countdown width to prevent banner text wobble
Fixed-width monospace container with tabular-nums prevents layout shifts as countdown digits change every 50ms.
Align model-editor SERVICE_TYPES with backend ServiceType enum
The editor's app list had drifted from the backend ServiceType enum: - Missing 8 non-deprecated apps (AI_SUPPORT, SUPPORT, KNOWLEDGE_BASE, NOTES, POS, DOCS, M...
AppConfig replace is upsert-only, never deletes on payload absence
The previous behavior deleted any existing app-config row whose ServiceType wasn't in the incoming payload. That turned partial payloads into silent data-loss: ...
Move featureRequests i18n keys into correct home namespace
Keys were accidentally placed in about namespace; section was showing raw key strings instead of translated text.
Send null instead of empty string for contentJson/contentPlainText on kb article create
Empty string is invalid for the JSONB column type, causing a DB error when creating an article with no content.
Lock user-level fields to self-only, gate member-level edits to self or MANAGE_MEMBER_SECURITY
Replace MANAGE_USERS gate with MANAGE_MEMBER_SECURITY in member settings redirect
Properly clean up Capcha event listeners on step transition
The removeEventListener calls were inside the setTimeout callback's return value, which JavaScript ignores. This caused handlers to accumulate on every user→pas...
UPSERT SYSTEM email template rows on every run
Previously the seed runner only inserted rows that didn't exist, so canonical HTML changes never propagated to the DB. Now existing SYSTEM rows have their bodyH...
Preview uses same auto-vars as sendToUser (org logo + name)
The preview endpoint now injects logoUrl, logoSimpleUrl, and orgName from the org's domain before applying sample content variables, matching the exact variable...
Use {{logoUrl}} placeholders so sent emails match preview
serializeFullEmailHtml now stores **************** placeholders in bodyHtml instead of resolved local paths. EmailTemplateService already injects absolute logo ...
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...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.