Clear stale hexheads on page refresh instead of restoring orphaned state
Minimized tool windows don't survive refresh, so restoring hexhead positions created orphaned heads with missing icons and non-functional click handlers. Now cl...
Add comprehensive logging to email invite route for debugging, handle multiple email field formats
Rewrite HexHead placement system with deterministic layout engine
Replaces the buggy collision-avoidance system (spiralSearch, resolveCollisions, flyToHomeRow, dock/group RAF loops) with a single deterministic reflow() functio...
Add typing indicator to AI chat while waiting for response
The streaming bubble only showed when content was already being streamed, leaving no visual feedback during the REST wait. Added bouncing dots indicator that di...
Hide member-specific tabs when memberID is "new" to prevent BAD_REQUEST errors
The /settings/member/new URL (from "Add Team Member" button) is caught by the [memberID] dynamic route, causing AccountActivityTab, MembershipPermissionsTab, an...
60s OTK TTL for meet windows, independent chat/email invites that don't block on backend
ROOT CAUSE: The OTK had a 10-second TTL. By the time the kamo-meet page loaded all its assets and branding/overrides.js ran to validate the OTK, it had already ...
Send chat invites via existing chat session API, email invites via multipart to EmailService
Chat invites: creates/gets a chat session via POST /api/media/sessions/chat then sends the meeting invite as a text message in that session. Uses the exact same...
Forward all meeting fields (sendChatInvite, sendEmailInvite, customMessage, roomAlias, joinUrl) to backend
The Next.js API route was stripping sendChatInvite, sendEmailInvite, customMessage, and roomAlias — only forwarding roomName and inviteMemberIds. Backend receiv...
Pass availableMembers to all MeetingDialog instances and self-fetch when not provided
- MemberList passes availableMembers to each MemberItem - MemberItem passes availableMembers to its MeetingDialog - MeetingDialog self-fetches members from ****...
Add glass transparency effect to feature cards on homepage and settings
Add custom message textarea to MeetingDialog for chat/email invitations
Shows a multiline text input when at least one notification option is enabled, allowing the meeting creator to add a personal note to the invitation. Hidden whe...
Show MeetingDialog for per-member meetings instead of bypassing directly
Both MemberItem (Interaction Center) and ChatBox (chat tool window) now open the MeetingDialog with the target member pre-selected, allowing the user to set the...
Route meet config API through APIService instead of direct MediaService
The existing meet/create route uses forwardToApi (APIService), which proxies to MediaService. The new config/background routes must follow the same pattern to w...
Move New Tab button after Chat Now as icon-only, remove duplicate Notes link
New Tab is now an icon button (no label) placed to the right of Chat Now. Notes removed from NavTop since it's already in NavPri.
Add /settings/features/meets page with 5 tabs for org-level video conferencing config
New settings page with General, Security & Access, Recording, Branding, and Notifications tabs. Includes meetApi client, MediaService proxy routes, logo variant...
Prevent infinite re-render loop in MeetingDialog caused by default prop array references
The useEffect had preSelectedMembers (defaulting to []) as a dependency, creating a new array on every render and triggering an infinite setState loop. Fixed by...
Match CHAT button color to meeting icon using CSS --color-primary variable
Replace deprecated InputProps with slotProps for MUI 7 compatibility in MeetingDialog
Add isOptionEqualToValue and null safety to MeetingDialog Autocomplete to prevent client crash
Make Chat Now icon white, sync email badge with message list, use CSS color-mix for theme colors
- NavTop: change ForumIcon color to white to match Chat Now label - MessageBrowser/MailButton: coordinate WebSocket email refresh via custom event so badge coun...
Restore full meeting flow with backend creation, invites, and OTK window opening
Simplify useMeeting to generate OTK and open meeting window directly
Backend meeting API endpoints don't exist yet - skip meeting record creation for now. Add error handling to all click handlers to prevent client-side crashes.
Add MEET to FeaturesManager icon/category maps and guard ChatBox Meet button with isMeet check
Add Start Meeting button to Interaction Center and per-member meeting icon
Add Meet button to chat toolbar and MeetingCard rendering in messages
Add MeetingDialog for creating meetings with room name and member selection
Add useMeeting hook for meeting creation, OTK launch, and invite sending
Remove Janus-based WebRTC integration (useWebRTC, VideoCallPanel, call API routes)
Remove old Janus WebRTC voice/video/screen share code in preparation for KamoMeet (Meet-based) replacement. Deletes useWebRTC hook, VideoCallPanel, CallInitiati...
Make visibility checkboxes and Train AI toggle independent controls
Visibility (Members, Team Members, Public) controls who can access the article in the KB UI. Train AI is a separate toggle for RAG indexing, not a parent of the...
Replace Chat Now member count with real-time unread message indicator
- NavTop badge now shows total unread messages instead of online member count - Chat button icon color derived from --color-primary theme variable - MemberItem ...
Add Train AI toggle and audience visibility checkboxes to KB article editor
Add aiEnabled master toggle with collapsible visibility checkboxes for Members, Team Members, and Public using org-customized labels from behavior-labeling sett...
Use internal K8s URL for API routing to fix avatar upload for non-KamoCRM orgs
The API proxy was computing external URLs (https://api.{domain}) for every org, which only resolved for KamoCRM. Now uses API_SERVICE_URL env var for direct int...
Re-fetch notes after create/update to show decrypted content in preview
The backend returns encrypted content/contentPlain in POST/PUT responses, causing NoteCard previews to display ciphertext until page refresh. Now re-fetches via...
Disable all auto-link behaviors in KB editor to prevent paste-as-hyperlink bug
The linkExtension singleton from @lexkit/editor retains internal paste handler state across component remounts. Disabling autoLinkUrls, autoLinkText, and linkSe...
Prevent KB editor link extension state leaking between article creates
Move Lexical extensions from module-level singletons into a factory function called via useMemo per component mount, so each new article gets fresh extension in...
Add infinite scroll pagination to classic email view
Classic mode only loaded the first 50 messages with no way to see older ones. Wire up the existing VirtualMessageList onLoadMore/hasMore/loadingMore props so pa...
Accept large CockroachDB IDs in org Zod schema
The org ID from unique_rowid() exceeds JS MAX_SAFE_INTEGER, causing z.coerce.number().int() to fail with "too_big". Now accepts number, bigint, or string to han...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.