A running log of improvements, new features, and fixes. We ship fast so you can work smarter.
Closed the SalesBrief
write/read boundary on the legacy API-key Lead
routes (POST/PUT/GET api/lead and
GET api/lead/byEmail): they no longer
accept, replace, erase, or serialize
salesBrief, regardless of the
feature toggle. The brief remains writable only
through the authorised Lead form and the external
promotion handoff, and readable only through the
dedicated opaque-reference read API.
Extended the SalesBrief
feature: the external promotion payload accepts an
optional salesBrief (max 8,000
characters, trimmed, blank values stored as null)
stored on the Lead at creation and never compared
or overwritten on replay; added a feature-gated
Lead read API
(GET /Api/external/leads/{externalReference})
returning exactly the external reference, business
name, brief, and optional contact email and phone;
and added an optional
hasSalesBrief=true filter to the Lead
status list API that restricts results to Leads
with a brief while omitted/false behaviour is
unchanged.
Added a nullable
SalesBrief field to the Lead (MySQL
TEXT, max 8,000 characters) with a
feature-gated textarea on the authorised Lead
create/edit form. The textarea shows a live
character count when the disabled-by-default
SalesBrief toggle is enabled and is
hidden otherwise; direct form submissions cannot
store or replace a brief while the toggle is off.
Briefs are trimmed, blank values are stored as
null, and the stored text is always rendered as
untrusted text, never raw HTML.
Added an atomic Lead claim API
(POST /Api/leads/claim) for automated
sample-site claiming. Transitions one Lead from
New to Processing by opaque
external reference with optimistic concurrency;
concurrent claimers yield one success and
409 for the rest. Gated by the
disabled-by-default
AutomatedSampleSiteClaim toggle.
Added a feature-gated Lead status list API
(GET /Api/leads/byStatus) for automated sample-site claiming.
Returns opaque external references only, with keyset pagination (max page size 20),
and is disabled by default via the AutomatedSampleSiteClaim toggle.
Added atomic, feature-gated external Lead and initial Opportunity promotion with safe retries, conflicts, and tenant-scoped references.
External handoffs now use opaque references rather than CRM UUIDs; existing Lead and Opportunity APIs remain compatible for their current clients.
Added feature-gated, tenant-scoped external references and campaign selection APIs with idempotent campaign creation.
Added an Opportunities pipeline with stage-based board view, value tracking, probability, and expected close dates linked to leads.
Added Lead Tasks for assignable to-do items with due dates, priority, and status tracking.
Added Opportunities and Lead Tasks tabs to the lead detail page, with activities recorded in the lead timeline.
Added REST API endpoints and CLI commands for managing opportunities and lead tasks.
Added "Opportunities" and "LeadTasks" feature toggles under Master Features.
Updated API and CLI documentation with the new opportunities and lead tasks reference material.
Fixed TenantDatabaseMigrator to correctly migrate fresh databases and surface migration errors instead of swallowing exceptions.
Made lead names clickable in opportunity, task, and task-list views so users can jump straight to the lead detail page.
Added a feature that lets administrators design custom forms for customer data collection.
Added secure form fill links for customers to complete assigned forms.
Updated customer portal to show completed and pending forms.
Added notification groups to administrator console.
Updated workflow engine to allow processing of communications to customer/notification group.
Added sendTo option in the workflow builder to support customer/notification group.
Recreated the administrator console - manage user screen.
Fixed a bug where customer ids associated with a failed bulk action job was not clickable.
Added support to track bank transfer payments to an individual bank account.
Updated the Admin setting navigation to use modern styling.
Payment module updated to add support for different transaction types such as Adjustment, Payment and Refunds.
Tenant selector updated to supporting customers with multiple domains.
Added a toggle to custom fields to determine if they should display fields on the customer portal.
Added a new Feature Toggle section in the administration view to easily toggle on/off features.
Various bugs fixed.
Dashboard component refresh with faster data loading and new KPI cards for active workflows and aging balances.
Resolved an edge case where portal payment callbacks could duplicate balance records under high concurrency.
UI alignment fixes on the customer detail screen for mobile viewports.
Payments via customer portal — customers can now pay outstanding balances directly through the self-service portal with Stripe and PayPal support.
Portal payment receipts now include PDF generation and automatic email dispatch.
Completely redesigned workflow builder with drag-and-drop stage reordering, modern card-based UI, and real-time validation.
Create Record workflow action — automatically create new entities (payments, plans, disputes) from within a workflow stage.
Start Workflow action — chain workflows together to build complex automation pipelines.
Custom field support inside workflows — read and write custom field values dynamically during workflow execution.
Entity field references in workflow actions now support aggregation (First, Last, Max, Min, Sum, Average, Count).
Removed legacy appointment support to simplify the data model. Appointments will return in a future dedicated module.
Two-factor authentication (2FA) support added for all admin and agent accounts using TOTP authenticator apps.
Support requests and customer portal access — customers can now raise tickets and track progress without agent intervention.
Bulk action engine — select multiple customers and apply tags, status changes, or start workflows in one operation.
Backend filtering for customer grids now supports multi-column searches with debounced input.
Calendar view for customer data — visualize appointments, important dates, and plan renewals in a month/week/day layout.
One-time payment support — record ad-hoc payments without needing a recurring plan attached.
Calendar navigation bug where switching months would reset the selected custom field filter.
Recursive workflow start — workflows can now safely trigger other workflows with infinite-loop prevention built in.
Set custom field workflow action — update custom field values dynamically using static values, calculated expressions, or entity references.
Time support added to calendar events and custom date-time fields.
Custom fields system — define unlimited custom fields per tenant with text, number, date, date-time, and boolean types.
Dynamic values — use calculated expressions and entity field references inside workflow actions and data field updates.
API controller with token-based authentication for third-party integrations.
Customer detail screen redesigned with tabbed navigation and custom field sections.
Twilio dialer embedded in the CRM — make and receive calls without leaving the app.
Call controls (mute, hold, transfer) and agent status dashboard for queue management.
Search indexing issue that caused customer lookups to return stale results after bulk imports.
Dialer button on customer cards for one-click outbound calling.
Encryption field configuration now pulls from tenant database settings rather than static config.
Tenant DTO serialization bug that caused multi-tenant context switches to fail intermittently.
Mass action support — apply actions to filtered customer lists directly from grid views.
Option to disable field-level encryption per tenant for performance-critical deployments.
Custom views — build and save filtered customer views with custom columns, sorting, and date ranges.
Quick views sidebar for one-click access to commonly used filters (Overdue, New This Week, etc.).
Customer plan refactoring — individual plan fields (service name, price, billing frequency, due days) replace rigid plan types.
Workflow improvements including stage condition evaluation and better error logging on failure.
Set data field workflow action — programmatically update customer fields like Age, Important Date, or Referral Source.
Workflow quick link for jumping directly to a customer's active workflow instance from the grid.
Optional auditing feature toggle — enable per-tenant audit trails for compliance requirements.
Workflow ordering bug where stages could execute out of sequence after a database rollback.
Customer aging background task no longer runs on a constant loop when no tenants are configured.
Start workflow action — trigger a workflow manually from within another workflow or via the API.
Workflow engine processing reliability with retry logic and better failure state handling.
Workflow builder — visually design multi-stage workflows with delays, conditions, and actions.
Workflow engine background service — processes scheduled workflow stages automatically.
Owner assignment — assign customers to specific agents with filtered views.
Background service stability fixes preventing the hosted processor from stalling on tenant switches.
Referral tracking — capture and report on how customers found your business.
Database query performance optimizations for large customer lists (>50k records).
Slow query timeout on the customer dashboard for tenants with heavy plan data.
Feature toggle system — enable or disable modules per tenant without redeploying.
Status change bug where updating a customer's status would not cascade to related plan eligibility checks.
Tag service and background processing — auto-apply tags based on rules and process tag-based reports.
Tag helper performance and view rendering speed for customer grids with many tags.
Reporting engine with parameterized reports — create reusable reports with date ranges, status filters, and tag inclusion.
Transaction history and balance reporting with drill-down to individual payments.
Customer UI overhaul with better search, filtering, and inline editing capabilities.
Action manager, SMS service, and credit manager for pay-as-you-go message billing.
Notification action service with queue-based dispatch for emails and SMS.
Report parameter bug where empty optional parameters would crash the report viewer.
Dashboard with key metrics, recent activity feed, and quick-action shortcuts.
Global settings panel for SMTP, branding, and default page size configuration.
Audit log UI — view every change made to customers, plans, and payments with before/after snapshots.
Call audit trail for tracking agent activity and call outcomes.
Various UI bugs on mobile viewports and form validation edge cases.
Multi-tenancy support — run multiple CRM instances from a single deployment with isolated data and branding.
Account lockout protection after repeated failed login attempts.
SMS credit calculation bug that under-reported remaining credits in the admin panel.
Data encryption at rest for sensitive customer fields using AES-256 + RSA hybrid encryption.
Decryption performance optimized with parallel processing and property caching.
Query filter middleware bug that caused data leakage between concurrent requests.
Customer management with full CRUD, advanced search, tagging, and status tracking.
Customer plans and recurring billing with automated balance generation.
Payment recording with dispute tracking and resolution workflows.
Document storage with file upload and customer association.
Email and SMS templates with token replacement for personalized messaging.
User management with role-based access control (Admin, Agent, ReadOnly).
Automated action designer for event-driven emails, SMS, status changes, and tag updates.
Scheduled action processor for time-delayed automation.