Remove duplicate ContentEditable — use RichTextExtension's plugin
The richTextExtension already renders its own ContentEditable via RichTextPlugin. Having a second manual ContentEditable created two editable areas. Remove the ...
Rebuild email signature manager with template-based visual builder
Replace the basic Quill rich text editor with a structured, form-driven signature builder featuring 8 professional templates, design customization controls (col...
Overhaul KB editor and article page layouts
Fix editor component: - Wrap in flex column container so toolbar stays fixed and content area scrolls independently - Use position:relative on content wrapper...
Add unpublish and delete buttons to KB article view
Add Unpublish button (visible on PUBLISHED articles) that reverts to DRAFT and removes from AI chat. Add Delete button with confirmation dialog. Add proxy route...
Update reviews page to match enriched backend response fields
Use uid as key, articleGuid for navigation, articleTitle for display, and dateSubmitted for date. Matches the new backend response format that includes article ...
Surface actual backend error messages in article create/edit
Read errData.error (matching backend JSON format) instead of errData.message. Fix proxy to forward backend JSON errors directly instead of double-wrapping them ...
Add missing richTextExtension to enable editor text input
The RichTextPlugin from richTextExtension is required for the Lexical is silently ignored.
Add ShadCN-inspired editor theme with visible table borders
Add a comprehensive CSS theme for the LexKit editor with styled typography, visible table cell borders, code block styling, blockquote formatting, and syntax hi...
Add shared KB layout with persistent tabs and fix reviews page error
Create app/kb/layout.tsx with KbNavBar tabs shared across Articles, Resources, and Pending Reviews pages. Remove duplicate outer shells and fixed positioning fr...
Replace Plate.js with LexKit editor and add KB resource management
Replace Plate.js editor with LexKit (Lexical-based) including custom Video, Audio, and MediaCard extensions. Add WordPress-style media browser with drag-and-dro...
Update navtop email badge when message is marked as read
Dispatch email:folder-changed event after marking a message as read, so MailButton re-fetches the unread count immediately.
Revert email WebSocket URL to same-origin Next.js rewrite path
Use /email-ws on same origin, proxied by Next.js rewrites to EmailService via k8s internal DNS. SockJS HTTP fallbacks (xhr-streaming, xhr-polling) work through ...
Connect email WebSocket directly to email.{domain} subdomain
Next.js rewrites cannot upgrade HTTP connections to WebSocket, causing the STOMP connection to silently fail after 3 retries. Now uses the same direct subdomain...
Add 30s polling fallback for real-time email updates when WebSocket is unavailable
The WebSocket connection silently fails after 3 retries, leaving the UI permanently stale. This adds a 30-second polling interval as a reliable fallback across ...
Rename Team button to Chat Now and change panel to click-only activation
Align branch-setup and automation tabs with billing tab design
Standardize layout patterns across settings tabs: consistent padding, shared EmptyState component, matching table structure and header styles.
Move AI to Enabled Apps section and remove settings slideout search/recents
Remove the search bar and recent items section from the settings slideout panel. Move Artificial Intelligence from main topics to the Enabled Apps section so it...
Use shared EmailWebSocketContext for real-time unread badge updates
MailButton was creating a duplicate WebSocket connection via useEmailWebSocket() and optimistically incrementing the unread count. Now uses the shared useEmailW...
Simplify apps page with Available/Incubating tabs and list-only view
Remove stats banner, search bar, category filters, grid/list toggle, and features dialog. Apps are now organized into two tabs and "Adjust Features" navigates t...
Add Emojis, Character Map, and Text Converter tools to calculator menu
- Emojis: browse all emoji categories with search, select to view code points, copy as emoji/HTML/CSS - Character Map: browse Unicode blocks (Latin, Greek, Cyri...
Restyle graphing calculator to light theme and add mode-specific titles and icons
- GraphingMode now uses the same light calcColors scheme as other calculator modes - Graph line colors updated to work on light background - Calculator tool win...
Add dropdowns to navtop mail and calculator icons, show unread email badge
- Mail icon now shows red unread count badge and dropdown with "Create New Email" / "View My Emails" - Calculator icon now has dropdown with all 6 modes (adds p...
Route media feed WebSocket through media.* subdomain with retry limit
useMediaFeedWebSocket was connecting to same-origin /ws (404) instead of media.kamocrm.com. Fix URL construction to match useChatWebSocket pattern and add MAX_R...
Correct KB article field names to match backend entity
Frontend was using wrong field names (dateModified, content, authorName) instead of the actual backend fields (dateUpdated, contentJson, authorMemberId). Also r...
Remove debug logging, add email WS retry limit, proxy email WS through k8s DNS
Remove verbose console.log statements from useUserInfo, NavTop, NavPri, MemberListProvider, SessionManager, sessionMonitor, avatarUtils, and useChatWebSocket th...
Add KNOWLEDGE_BASE to AppType and Organization.isKnowledgeBase getter
Without these, the KB sidebar entry and home card were hidden since organization.isKnowledgeBase was undefined.
Add Knowledge Base frontend - pages, components, API routes, Plate editor
- 13 Next.js API proxy routes under /api/kb/ - KB home page with article tree, search, pinned articles - Article viewer, editor (Plate rich text), new article, ...
Wire up sidebar session history, folders, search, and remove duplicate header icon
- Fix wrapped API response parsing for sessions and folders - Fix folder create to use parentFolderId field name - Fix session/folder updates to use PUT (backen...
Rich markdown rendering for AI chat responses
- Styled headings (h1-h4) with bottom borders and proper sizing - Bullet lists (ul) and numbered lists (ol) with proper indentation and spacing - Bold text with...
Reorder AI settings tabs, rename Sales Agent Setup to AI Sales Agent Setup
- Provider Setup is now the first tab, Usage & Overview is last - Renamed "Sales Agent Setup" to "AI Sales Agent Setup" - Updated settings slideout nav and sett...
Fetch all provider models on edit, pre-populate active selections
- Fetch provider details with all models (active+inactive) when clicking Edit - Pre-populate editing.models with IDs of active models - Show full model list wit...
Wire up end-to-end chat messaging with loading states
- Add POST handler to messages API route - Fix message type mismatches between input, context, and messages component - Show user message immediately, display l...
Stay in edit mode after creating provider, show test and model buttons
- After creating a new provider, stay in edit mode with the returned ID so user can immediately test connection and add models - Fix id checks from === undefi...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.