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...
Accept UUID strings for feature IDs in org Zod schema
The OrgFeature schema required id to be a coercible integer, but the backend returns UUIDs. This caused a ZodError on every layout fetch, falling back to the ha...
Always refresh org context after any app toggle, not just completed-stage
POS and other non-completed apps also affect the UI (e.g. Pipeline in NavPri). The stage check was preventing the refresh for these apps.
Update all fallback feature lists and gate Pipeline/Chat/LeadStatus
Root cause: layout.tsx and org API route had hardcoded fallback feature lists with only 6 old apps (missing VOIP, AI_SUPPORT, SUPPORT, KB, NOTES, DOCS). When th...
Show CC and BCC in sent item email previews
Add bcc field to EmailMessage type. ThreadDetailView now displays BCC recipients when present (typically in sent folder copies).
Remove legacy /email iframe page
This page only embedded mail.kamocrm.com in an iframe. The built-in email client at /messages replaces it entirely.
Email nav icon now links to /messages instead of legacy /email iframe
The /email page embeds mail.kamocrm.com in an iframe (legacy webmail). The actual built-in email client is at /messages. Updated NavPri to point to the correct ...
Surface actual backend error message on feature toggle failure
Enable/disable now parses the error response body and shows the real error in the toast instead of a generic message. Helps diagnose what's actually failing on ...
Restore org context refresh after toggling completed-stage apps
Without router.refresh(), the org context stayed stale after enabling apps — NavPri, homepage, and settings never showed the newly enabled features. Now refresh...
Gate all feature cards and settings sections by org feature flags
Homepage: Documents card now uses isDocs (not deprecated isStorage/isDocManager), Calendar gated by isEmail, Notes gated by isNotes. Settings page: Commerce se...
Remove router.refresh() from feature toggle to prevent page reset
router.refresh() was causing the page to re-render and reset the active tab back to "Available" on every toggle. The cache invalidation and loadFeatures() call ...
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.
