Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesLeads CrmLeads & CRM — Code Map

Leads & CRM — Code Map

API

Module — leads (public lead intake)

FilePurpose
apps/api/src/leads/leads.module.tsWires LeadsController + LeadsService + cross-import to OrganizationLeadsService.
apps/api/src/leads/leads.controller.tsTwo public endpoints: platform waitlist + minisite contact form.
apps/api/src/leads/leads.service.tsTiny — only handles platform leads (inserts leads + platform_leads).

Module — organization-leads (staff CRM)

FilePurpose
apps/api/src/organization-leads/organization-leads.module.tsWires controller + service.
apps/api/src/organization-leads/organization-leads.controller.tsAll staff CRM routes under organizations/:orgId/leads. Decorated with @RequiresFeature('lead_management').
apps/api/src/organization-leads/organization-leads.service.tsList/get/create/update/convert/analytics. Owns dedup + auto-task + status event history.

Routes

MethodPathHandlerAuth
POST/leadsLeadsController.createPlatformLead@Public
POST/leads/organization/:orgIdLeadsController.createMinisiteLead@Public
GET/organizations/:orgId/leads/analyticsOrganizationLeadsController.getAnalyticsBearer + staff + lead_management
GET/organizations/:orgId/leadslistLeadssame
GET/organizations/:orgId/leads/:leadIdgetLeadsame
POST/organizations/:orgId/leadscreateLeadsame
PATCH/organizations/:orgId/leads/:leadIdupdateLeadsame
POST/organizations/:orgId/leads/:leadId/convertconvertLeadBearer + owner/admin + lead_management

Web

Component / RouteDescription
apps/web/src/app/[lang]/(protected)/dashboard/leads/page.tsx + leads-content.tsx + leads-page.driver.tsxList, filters, search.
apps/web/src/components/leads/add-lead-dialog.tsxManual create.
apps/web/src/components/leads/convert-lead-dialog.tsxConvert UI; calls POST /leads/:id/convert.
apps/web/src/components/leads/lead-detail-sheet.tsxSide sheet showing detail + status events + edit form.
i18n: leads.* in apps/web/src/i18n/dictionaries/.

DB tables

TableUsed as
leadsCanonical lead row.
platform_leadsWaitlist tag for platform-marketing leads.
organization_leadsPer-org link + assignment + trial date + converted membership.
lead_status_eventsAppend-only history.
membershipsCreated by convertLead; source_lead_id set.
usersFind-or-create shell on convert.
tasksAuto-task on new lead.

Shared schemas

libs/shared/src/lib/schemas/lead.schema.ts exports the Zod schemas used by controllers:

  • createPlatformLeadSchema — name/email/phone/locale/source/note.
  • createOrganizationLeadSchema — same; source defaults to 'manual' (public minisite path overrides to 'minisite').
  • updateOrganizationLeadSchema — name/email/phone/note/status/assignedToUserId/trialDate.
  • listOrganizationLeadsSchema — search/status/source/page/limit query params.
  • convertLeadSchema — firstName/lastName/email/role.

Enums: leadSource, leadStatus (see libs/db/src/lib/schema/enums.ts).

Events

EventProducerConsumers
MEMBERSHIP_ACTIVATED { source:'lead_converted' }convertLeadForms fan-out (compliance forms), analytics, future welcome emails (per code comments).

Tests

FileWhat it covers
apps/web/src/app/[lang]/(protected)/dashboard/leads/leads-page.driver.tsxWeb driver for leads page (driver pattern — see CLAUDE.md).
API unit specsNo dedicated unit spec found for LeadsService or OrganizationLeadsService as of this audit. TODO: add.