Changelog
What's new.
Every improvement to the platform, as it ships.
· kamo-shared-library
Enterprise validation in POSService
- createRetailOrder: null check on request - createLineItem: null check, quantity > 0, unitPrice >= 0 validation
· kamo-internal
Enterprise-grade POS UI and API
- posApi: POSApiError class, fetchWithError, structured error handling - useToast + POSToast: centralized snackbar for success/error feedback - posUtils: formatCurrency, formatDate, toCSV, downloadBlob - PipelineOrdersTab: search, sort, pagination, CSV export, skeleton loading, toast notifications, empty state CTA, confirm empty order - PipelineApplicationsTab: search, CSV export, skeleton, toast - PipelineProductsTab: search, delete confirmation dialog, skeleton, toast - PipelineInventoryTab: toast notifications - PipelineDashboardTab: skeleton loading, refresh, export summary, toast - PipelinePOSDomainConfigTab: toast on save
· kamo-internal
POS domain config, retail order line items, dynamic pipeline tabs
- Add getPOSConfig/updatePOSConfig to posApi, posDomainLabels utility - Extend createOrder with lineItems, add getOrder, RetailOrderLineItem type - PipelineOrdersTab: product-based order creation, line item selector, order detail drawer - Pipeline: dynamic tabs from POS config, domain-specific titles (Orders, Applications) - PipelineDashboardTab: metrics filtered by enabled domains - Settings POS: Domains tab with enable/disable toggles for RETAIL, MORTGAGE, RENTAL, VENDOR, SUBSCRIPTION - Empty state when no domains enabled
· SecurityService
Add POS controllers for retail products, inventory, and orders
- RetailProductController: CRUD for products - RetailInventoryController: inventory stock management - POSController: orders and mortgage applications
· kamo-shared-library
Add POS/inventory domain entities, DTOs, repos and services
- Add POS beans (retail, rental, mortgage, subscription, vendor) - Add RetailProduct, RetailInventoryStock, RetailOrder, MortgageApp DTOs - Add RetailProductService, RetailInventoryStockService, POSService - Add repositories for retail, mortgage, rental, subscription, vendor - Update EmbRecordState
· kamo-shared-library
Populate vendorProduct relationship when fetching leads
Update getLeadsByOrganizationId() to populate the @Transient vendorProduct field for each lead that has a vendorProductId. This ensures the vendor and product data is available for the LeadDTO mapping.
· kamo-internal
Improve lead grid with base30 IDs, raven icon, All Markets tab, and Market column
- Add toBase30() function for consistent ID representation across LeadManager and DocManager - Fix Grim status icon in tabs to use raven.ico (matching the datagrid status renderer) - Add "All Markets" tab as first option in market tabs to show leads from all markets - Add Market column between Street and Status columns in datagrid - Update currentMarket logic to support tab 0 as "All Markets" (no filter)
· kamo-shared-library
Add status, subStatus, source, and dateCreated fields
- Added status, subStatus, source, dateCreated, and isActive fields to Lead entity - Updated LeadDTO with frontend-compatible fields (status, subStatus, source, createdAt, primaryContact, vendor, product, agentAssigned) - Added PrimaryContactDTO for frontend compatibility - Added @PrePersist hook to set default values for new leads This fixes the leads page data grid showing empty columns for contact, status, sub-status, vendor, product, source, agent, created, and assigned fields.
· kamo-shared-library
Refactor Lead assignment from String to Employee reference
- Changed Lead.assignedUser (String) to Lead.assignedEmployee (Employee) - Added LeadAssignment entity to track assignment history - Added LeadAssignmentType enum with various assignment types - Added LeadCredit entity for tracking employee lead credits - Added LeadAllotment entity for managing employee lead allotments - Added corresponding repositories and services - Updated LeadService to record assignments automatically - Updated LeadDTO and request DTOs for the new structure - Added MemberService methods for retrieving employees by organization - Database datetime fields now use DB-level defaults for consistency
· KlusterServices
Add HTTP to HTTPS redirect middleware and IngressRoute
- Create redirect-to-https middleware for permanent redirects - Add catch-all IngressRoute on web entrypoint to redirect all kamocrm.com domains to HTTPS - Fixes 404 errors when users access sites via HTTP instead of HTTPS
· KlusterServices
Add automatic *** secret creation
- Create *** secret on both k1m1 and k2m1 - Secret contains MINIO_CURRENT_HOST pointing to k0m1 MinIO instance (http://10.8.0.1:9000) - Fixes kamowssecurity-deployment CreateContainerConfigError
· kamo-internal
Reorganize form layout for better field grouping
· kamo-internal
Reposition Add Lead tab and improve market tab UX
· kamo-internal
Add live tab label updates based on first/last name input
· kamo-internal
Convert Add Lead button to tab and implement data persistence
· kamo-internal
Overhaul lead creation UI with pane-based interface
· kamo-internal
Move Add Lead button to filter row and convert to popup dialog
· kamo-internal
Reorganize lead creation form into elegant two-column layout
- Split form fields into two columns: contact/personal info (left) and lead/business info (right) - Add visual separation with semi-transparent backgrounds, borders, and shadows - Improve form organization and visual hierarchy - Maintain responsive design for mobile devices
· kamo-marketing
Enable Turbopack for faster builds (Next.js 16)
· kamo-register
Enable Turbopack for faster builds (Next.js 16)
· kamo-login
Enable Turbopack for faster builds (Next.js 16)
· kamo-internal
Enable Turbopack for faster builds (Next.js 16)
· kamo-internal
Redesign lead creation form with complete name fields, proper dropdown sizing, country field, and improved phone layout
· kamo-internal
Enhance lead creation form with modern UI, validation, error handling, and improved UX
· kamo-shared-library
Add phone extension support to CreateLeadRequest, UpdateLeadRequest, and LeadDTO
· kamo-internal
Add LeadProspectType, vendor/product, bestContactTime, phone extension/isText, and residential mortgage fields to lead creation form
· kamo-shared-library
Add salesSubType field to LeadMarketDTO for mortgage field detection
- Added salesSubType field to distinguish between parent SaleType and sub-types - When SaleType has a parent (e.g., RESIDENTIAL_MORTGAGE), salesType becomes the parent (SERVICE) and salesSubType becomes the child (RESIDENTIAL_MORTGAGE) - This allows frontend to correctly detect when to show mortgage fields from LeadClaimMortgage.java
· kamo-internal
Add missing Next.js API routes for leads endpoints
- Added /api/security/leads route for GET (all leads) and POST (create lead) - Added /api/security/leads/[id] route for GET, PUT, DELETE operations - Added **************** route for market configuration - Fixes 'Unknown error' when accessing /leads page by properly proxying requests to backend
· SecurityService
Add backend validation for required fields in lead imports
- Add validateRequiredFields method to check required fields before import - Validate email, firstName, and lastName are present - Validate mortgage-specific fields (loanAmount) when market is mortgage type - Skip rows with missing required fields and add to error list - Use LeadMarketService to determine market type for validation
· kamo-internal
Add validation for required fields in lead imports
- Mark email, firstName, and lastName as required fields in leadFields.ts - Add validation in handleStartImport to check all required fields are mapped - Add validation in ReviewStep to show errors for missing required field mappings - Display user-friendly error messages when required fields are missing

Your universe is waiting.
Start free in minutes. Add products whenever you are ready — no migration, no new logins.
Free forever — no credit card required