Contacts Module
Third product module on the frozen platform. Mirrors the Leads / Tasks reference architecture — a workspace directory of people, with assignment, notes, and an activity timeline. Organizations are first-class in Companies; contacts may link via company_id.
Guides
| Audience | Document |
|---|---|
| Operators / workspace users | contacts.md |
| Engineers | contacts-developer.md |
| Production / ops | contacts-production.md |
| Module Development Standard | module-development.md |
| Reference blueprint | leads.md |
| Tenant API | ../api/tenant-v1-contacts.md |
Capabilities
- Name, email, phone, company (legacy string), job title, source
- Lifecycle —
on_boarded/off_boarded, shown as On Boarded Clients / Off Boarded Clients (not soft-delete) - Optional link to a Company via
company_id(form company picker when Companies is installed; New opens an inline create dialog whencompanies.createis allowed) - From the contact record: New quotation / New invoice / New payment deep-links (module + create permission gated) with contact/company query prefill
- Assignment (
created_by/assigned_to) with assignee scoping viacontacts.assign - Notes (comments) + activity timeline
- Table view with search, company filter, lifecycle filter, and My Contacts toggle
- KPIs via
GET /contacts/stats(includes on boarded / off boarded counts) - Trash filtering plus Restore and Delete permanently (trash Active only is unrelated to lifecycle)
- Module licensing (
module:contacts) + Spatie permissions — free Marketplace opt-in - Audit + activity logging
Permissions
contacts.view · create · update · delete · restore · force.delete · assign
Enable Contacts from Marketplace (free). Only Leads and Tasks install automatically on new workspaces.
Lead conversion
When both Leads and Contacts are installed, converting a lead creates (or links) a real Contact (default lifecycle On Boarded Clients) and stores contact_id on the lead. The Lead record page shows a View contact link after conversion. Without Contacts installed, conversion remains the earlier status-only placeholder.
Company link
When Companies is installed, Contact create/edit can pick a linked organization (company_id). Use New on the form to create a company in a dialog without leaving Contacts. The free-text company field remains as a legacy display/search string and is synced from the linked Company name when a link is set. List/detail UIs prefer linked_company.name, falling back to the legacy string.
Sales document shortcuts
Contact view actions open Quotation / Invoice / Payment create pages with ?contact={id} and optional ?company={id} when the corresponding module is entitled and the user can create.
Billing hub & statement
When Invoices/Payments are entitled, the contact record shows invoiced / paid / balance due, recent documents, list deep links (?contact=), and a period Statement (PDF for contacts/companies).