Skip to main content
crm is the human layer over everything the suite already knows. It holds what a person wrote about a customer, what someone has to do next, and the one screen that shows a customer’s whole history — purchases, points, messages and notes — in a single chain.

Who this is for

The problem today

A company running a loyalty program ends up with the customer’s history split across the point of sale, the loyalty tool and the email platform. When that customer calls to complain that they never got their points, the agent checks three systems, none of which agree, and the customer explains themselves twice. The suite already holds all three. What is missing is a place to put the human part and one view that joins it. The honest second half: we are not trying to replace HubSpot or Salesforce. A tenant with a sales organization already has one and will keep it. We are the CRM for the customer relationships the loyalty program creates, which those tools do not see at all.

What it does (normative)

  • Notes on a contact, attributed and audit-logged.
  • Activities: something to do, assignable, with a due date, over a tenant-extensible type vocabulary (DEC-B4).
  • Lists: static membership and saved filter views, distinct from core’s dynamic segments.
  • Timeline 360: a merge-sorted view over behaviour, points, messages, notes and activities, filtered by the reader’s permissions and chained by correlation_id.
  • A reserved object model so deals and pipelines can arrive later without a data migration.

Non-goals (normative)

  • No pipeline, deals or forecasting in v1. Explicitly deferred, not forgotten: FS-CRM-0005 reserves the model. Building them now means competing with tools our customers already pay for.
  • Not a ticketing system. An activity is a reminder, not a support case with SLAs and queues.
  • No email inbox or two-way sync. Messages appear in the timeline as sends; replies go to the tenant’s own address.
  • No duplicate contact management. Identity resolution and merging are core.
  • Not a reporting tool. The timeline is per contact. Cross-contact analytics is a later concern and reads from the same data.

Success

Commercial shape

crm is not separately metered. It is included, and it is one of the reasons the suite is worth more than a loyalty engine on its own. Two things become plan-gated later rather than priced now: activity assignment across a team, which only matters at a size that correlates with a higher plan, and the object model when deals arrive.

Phases

Compliance and risk

Notes are free text written by humans about identified people, which makes them the least predictable personal data in the platform. Two consequences:
  • Notes are deleted on erasure, with no anonymized remnant. Unlike a ledger row, a note has no accounting value that survives the person.
  • The timeline is filtered by the reader’s permissions. An agent without core.contacts.read_national_id sees a masked one there too — a joined view is exactly where a permission gets forgotten.
The product risk is scope creep: a CRM invites “just add a pipeline” until it becomes a second product built by nobody. The non-goals exist to be enforced, and FS-CRM-0005 is how we say no without saying never.

Dependencies

core for contacts and events. Read-only projections of loyalty and messaging data for the timeline, through their public read paths, never their tables — the module boundary holds even for a read.

Open questions

Changelog