Date range filter, placeholder pages, dashboard/engagement UX
- Engagements tab: dateFrom/dateTo filter, engagement count, context-aware empty states - Placeholder pages: service, bookings, agreements, procurement (coming ...
Add ordering (createdAt DESC) and date range filter
- EngagementRepository: OrderByDateCreatedDesc on all find methods - CommerceService: dateFrom/dateTo params, in-memory date filter - Engagements API now suppor...
Use getDisplayName for domain, support WORK_ORDER/VENDOR_ORDER link labels
- Engagement detail: show friendly domain label (Retail vs RETAIL) - Engagements tab: domain column uses getDisplayName - Add link labels for WORK_ORDER, VENDOR...
Add EngagementDomainTypeConverter for VENDOR→SERVICE, no manual SQL
- JPA AttributeConverter maps legacy VENDOR to SERVICE when reading from DB - Applied to Engagement.domain and OrgPOSConfig.enabledDomains - Removes need for ma...
Add engagement endpoints GET /engagements and GET /engagements/{id}
Add Engagements tab, detail page, and dashboard integration
- posApi: add Engagement types, getEngagements, getEngagementById - posDomainLabels: add getEngagementStatusLabel - PipelineEngagementsTab: AG Grid with domain/...
Complete remaining items (validation, product cache, status, recent items, focus); revert lazy load to fix build
Finish remaining plan items – low-stock warning, date filters, plan checkboxes
- Order Create: low-stock warning when adding product with trackInventory - Orders tab: date range filter (last 7 days, last 30 days) - Applications tab: date r...
Phase 4–5 – Dashboard reporting, error handling, a11y
Phase 4 – Dashboard & reporting: - Revenue by period (week, month, quarter) - Order count by status (DRAFT, AUTHORIZED, PAID, CANCELLED, REFUNDED) - Application...
Align Pipeline and Settings UI with commerce backend
- Update order status colors to match backend (DRAFT, AUTHORIZED, PAID, CANCELLED, REFUNDED) - Update application status colors (DRAFT, SUBMITTED, EXPIRED, CANC...
Switch DataLoader to CommerceService
- Use CommerceService instead of POSService, RetailProductService, RetailInventoryStockService - createProduct, createOrUpdateStock, createRetailOrder, createMo...
Switch POS controllers to CommerceService
- POSController uses CommerceService instead of POSService - RetailProductController uses CommerceService instead of RetailProductService - RetailInventoryContr...
Replace pos beans with commerce package
- Add commerce package (Order, Intent, Offering, InventoryItem, InventoryPool, etc.) - Add CommerceService replacing POSService, RetailProductService, RetailInv...
Full-page views, AG Grid, domain support, create screens
- Add getMortgageApplication(id) to posApi - Replace Orders tab: MUI Table -> AG Grid, row click -> /pipeline/orders/[id] - Replace Applications tab: cards -> A...
Enterprise validation in POSService
- createRetailOrder: null check on request - createLineItem: null check, quantity > 0, unitPrice >= 0 validation
Enterprise-grade POS UI and API
- posApi: POSApiError class, fetchWithError, structured error handling - useToast + POSToast: centralized snackbar for success/error feedback - posUtils: format...
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 - PipelineOrde...
Resolve Map type inference in POS controllers for CI compilation
- Use explicit Map<String, Object> in ResponseEntity Map.of() calls - Fixes 'incompatible types: inference variable V has incompatible bounds' when mixing DTO...
Add POS controllers for retail products, inventory, and orders
- RetailProductController: CRUD for products - RetailInventoryController: inventory stock management - POSController: orders and mortgage applications
DataLoader IOException import and mock lead assignment FK errors
- Add missing java.io.IOException import for copyJavaEnumsToNextJS - Use saveLead instead of saveLeadWithAssignment for mock data to avoid lead_assignments FK...
Add POS/inventory domain entities, DTOs, repos and services
- Add POS beans (retail, rental, mortgage, subscription, vendor) - Add RetailProduct, RetailInventoryStock, RetailOrder, MortgageApp DTOs - Add RetailProductSer...
POS restructure: API via APIService, Settings for admin, Pipeline for users
- API proxy: POS requests forward to APIService (relays to SecurityService) - Settings: New POS System section under main settings + /settings/features/pos - PO...
Update Traefik routes: themes.* assets now only load from k1m1 minio instead of balancing across k0m1, k1m1, and k2m1
Stabilize connection line physics and mouse proximity
- Only apply mouse proximity force after mouse has moved (avoids 0,0 affecting lines on load) - Guard mouse position with Number.isFinite before use - Clamp con...
Unify section title underline and grid for lower sections
- Use var(--color-primary) for CRM, E-Mail, Phone section underlines - Use 3-column grid on lg for E-Mail and Phone (3 cards) for consistent layout
Fix market tabs, status by market, filter options, lead ID prefix L
- Market tab: filter by lead.marketId and vendorProductIds when a market is selected - Status/Sub Status: use availableStatuses for column filter options (marke...
Back button on view header, restore filters when returning from view
- HeaderBar: add Back to Lead Browser button (ArrowBack) in lead info header - LeadManager: persist filters/tabs to sessionStorage before opening a lead - LeadM...
Switch to base28, remove 5 and S from alphabet
- Rename toBase30 to toBase28; use 28-char alphabet - Lead/doc formatters now use toBase28 internally
Agent column from assignedEmployee, base30 lead/doc ID formats
- Agent column shows assignedEmployee.fullName or 'Unassigned' - Add assignedEmployee to Lead type; use valueGetter for sort/filter - LeadManager: use toBase30L...
Shared toBase30 in app/utils/base30, use in LeadManager and DocManager
Trigger pipeline - pull latest kamo-shared-library with vendorProduct population
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 d...
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 datag...
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,...
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 en...
Add mouse proximity physics effect to connection lines
- Checks 5 points along the curve for proximity detection - 80px effect radius - lines respond when mouse gets close - Force strength uses inverse square fallof...
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.
