Contact pipeline, call tracking, AI analysis, and Blueprint automations for contractors. The command center for every customer relationship.
CrmHub — contacts.length === 0
useQuery(api.calls.contacts.list), useQuery(api.calls.contacts.getStats)
CrmHub — populated, pipeline filter + search
useQuery(api.calls.contacts.list), crmWidgets.getCustomerCount / getRepeatCustomerRate / getEstimateConversion / getResponseTime
ContactDetail — tabbed layout (Calls / Notes / Reminders)
useQuery(api.calls.contacts.getById), useMutation(api.calls.contacts.update)
CallDetail — AI analysis with lead score, sentiment, keywords, next steps
useQuery(api.calls.queries.getById)
BlueprintList — stats, search, filter, FAB to create, locked upsell state
useQuery(api.automations.queries.listAutomations), getContractorAutomationStats
BlueprintDetail — info card, trigger, numbered steps, run history timeline
useQuery(api.automations.queries.getAutomation), RunTimeline component
BlueprintBuilder — trigger picker, step cards with connectors
useMutation(api.automations.mutations.create), StepEditor, TriggerPicker
TemplateGallery — category filters, step icons, clone action
useQuery(api.automations.queries.listTemplates), TemplateCard component
AutomationBilling — usage meter, per-action pricing, upgrade CTA
useQuery(api.automations.queries.getBillingUsage), Stripe upgrade flow
TemplateGalleryEnhanced — 11 trigger-type filter pills, “Use Template” CTA
useQuery(api.automations.queries.listTemplates), triggerType filter param
StatusFilters — status chip filters, per-card actions (Pause/Resume/Edit)
useQuery(api.automations.queries.listAutomations, { status }), useMutation(api.automations.mutations.updateStatus)
DuplicateContactsScreen — AI-detected duplicate pairs with confidence scoring, merge/keep actions.
useQuery(api.calls.contacts.findDuplicates) · useMutation(api.calls.contacts.merge)
SegmentationScreen — AI-powered segments with auto/manual modes, tag management.
useQuery(api.calls.contacts.listSegments) · useMutation(api.calls.contacts.createSegment)
BusinessAccounts — B2B account list with linked contacts, revenue, job counts
app/(contractor)/(tabs)/(home)/crm/business-accounts/index.tsx
CrmImport — CSV upload, Google sync, phone contacts, import status tracking
useMutation(api.calls.contacts.importCsv) · useQuery(api.calls.contacts.getImportStatus)
CSRDashboardScreen — app/(contractor)/csr/index.tsx
useQuery(api.calls.queries.list) · useQuery(api.calls.queries.getStats)
PhoneFrameScreen — app/(contractor)/csr/phone-frame.tsx
useQuery(api.calls.contacts.getById) · useMutation(api.calls.contacts.create)
AutomationsIndex — app/(contractor)/(tabs)/(home)/crm/automations/index.tsx
useQuery(api.automations.list)
AutomationsNew — app/(contractor)/(tabs)/(home)/crm/automations/new.tsx
useMutation(api.automations.create)
BusinessAccountsIndex — app/(contractor)/(tabs)/(home)/crm/business-accounts/index.tsx
useQuery(api.crm.businessAccounts.list)
PipelineKanban — app/(contractor)/(tabs)/(home)/crm/index.tsx (pipeline view)
useQuery(api.crm.pipeline.list)
ContactsMerge — app/(contractor)/(tabs)/(home)/crm/contacts/merge.tsx
useQuery(api.crm.contacts.findDuplicates) · useMutation(api.crm.contacts.merge)
Schema tables, queries, mutations, and source files powering the CRM Hub.